Jlm
Loading...
Searching...
No Matches
ViewTests.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2024 David Metz <david.c.metz@ntnu.no>
3 * See COPYING for terms of redistribution.
4 */
5
6#include <gtest/gtest.h>
7
8#include <jlm/hls/ir/hls.hpp>
14#include <jlm/rvsdg/lambda.hpp>
15#include <jlm/rvsdg/theta.hpp>
16#include <jlm/rvsdg/view.hpp>
17
18TEST(ViewTests, TestDumpDot)
19{
20 std::cout << std::endl << "### Test dump_dot ###" << std::endl << std::endl;
21
22 using namespace jlm;
23 using namespace jlm::hls;
24 using namespace jlm::llvm;
25
26 // Arrange
27 auto b32 = rvsdg::BitType::Create(32);
28 auto ft = rvsdg::FunctionType::Create({}, { b32 });
29
30 rvsdg::Graph graph;
31
32 auto lambda = rvsdg::LambdaNode::Create(
33 graph.GetRootRegion(),
34 LlvmLambdaOperation::Create(ft, "f", Linkage::externalLinkage));
35
36 auto bitConstant = &rvsdg::BitConstantOperation::create(*lambda->subregion(), { 32, 0 });
37
38 auto f = lambda->finalize({ bitConstant });
39 rvsdg::GraphExport::Create(*f, "");
40
41 rvsdg::view(graph, stdout);
42
43 std::unordered_map<rvsdg::Output *, ViewColors> outputColor;
44 std::unordered_map<rvsdg::Input *, ViewColors> inputColor;
45 std::unordered_map<rvsdg::Output *, ViewColors> tailLabel;
46
47 // Act
48 auto dotOutput = ToDot(lambda->region(), outputColor, inputColor, tailLabel);
49
50 // Assert
51 EXPECT_GT(dotOutput.size(), 0u);
52 EXPECT_NE(dotOutput.find("digraph G {"), std::string::npos);
53 EXPECT_NE(dotOutput.find("subgraph cluster_"), std::string::npos);
54 EXPECT_NE(dotOutput.find("tooltip=\"bit32\""), std::string::npos);
55 EXPECT_NE(dotOutput.find("BITS32_0_"), std::string::npos);
56}
57
58TEST(ViewTests, TestDumpDotTheta)
59{
60 using namespace jlm;
61 using namespace jlm::hls;
62 using namespace jlm::llvm;
63
64 // Arrange
65 auto b32 = rvsdg::BitType::Create(32);
66 auto ft = rvsdg::FunctionType::Create({ b32, b32, b32 }, { b32, b32, b32 });
67
68 rvsdg::Graph graph;
69
70 auto lambda = rvsdg::LambdaNode::Create(
71 graph.GetRootRegion(),
72 LlvmLambdaOperation::Create(ft, "f", Linkage::externalLinkage));
73
74 auto theta = rvsdg::ThetaNode::create(lambda->subregion());
75 auto idv = theta->AddLoopVar(lambda->GetFunctionArguments()[0]);
76 auto lvs = theta->AddLoopVar(lambda->GetFunctionArguments()[1]);
77 auto lve = theta->AddLoopVar(lambda->GetFunctionArguments()[2]);
78
79 auto arm = rvsdg::CreateOpNode<rvsdg::bitadd_op>({ idv.pre, lvs.pre }, 32).output(0);
80 auto cmp = rvsdg::CreateOpNode<rvsdg::bitult_op>({ arm, lve.pre }, 32).output(0);
81 auto & matchNode = rvsdg::MatchOperation::CreateNode(*cmp, { { 1, 1 } }, 0, 2);
82
83 idv.post->divert_to(arm);
84 theta->set_predicate(matchNode.output(0));
85
86 auto f = lambda->finalize({ theta->output(0), theta->output(1), theta->output(2) });
87 rvsdg::GraphExport::Create(*f, "");
88
89 rvsdg::view(graph, stdout);
90
91 std::unordered_map<rvsdg::Output *, ViewColors> outputColor;
92 std::unordered_map<rvsdg::Input *, ViewColors> inputColor;
93 std::unordered_map<rvsdg::Output *, ViewColors> tailLabel;
94 // Act
95 auto dotOutput = ToDot(lambda->region(), outputColor, inputColor, tailLabel);
96
97 // Assert
98 EXPECT_GT(dotOutput.size(), 0u);
99 EXPECT_NE(dotOutput.find("digraph G {"), std::string::npos);
100 EXPECT_NE(dotOutput.find("subgraph cluster_"), std::string::npos);
101 EXPECT_NE(dotOutput.find("tooltip=\"bit32\""), std::string::npos);
102 EXPECT_NE(dotOutput.find("tooltip=\"ctl(2)\""), std::string::npos);
103}
TEST(ViewTests, TestDumpDot)
Definition ViewTests.cpp:18
Global memory state passed between functions.