1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
#include "analysis/cfg.h"
#include "support/colors.h"
#include "wasm-s-parser.h"
#include "wasm.h"
#include "gtest/gtest.h"
using namespace wasm;
using namespace wasm::analysis;
TEST(CFGTest, Print) {
auto moduleText = R"wasm(
(module
(func $foo
(drop
(i32.const 0)
)
(drop
(if (result i32)
(i32.const 1)
(block
(loop $loop
(br_if $loop
(i32.const 2)
)
)
(i32.const 3)
)
(return
(i32.const 4)
)
)
)
)
)
)wasm";
auto cfgText = R"cfg(;; preds: [], succs: [1, 5]
0:
0: i32.const 0
1: drop
2: i32.const 1
;; preds: [0], succs: [2]
1:
;; preds: [1, 2], succs: [3, 2]
2:
3: i32.const 2
4: br_if $loop
;; preds: [2], succs: [4]
3:
5: loop $loop
;; preds: [3], succs: [6]
4:
6: i32.const 3
7: block
;; preds: [0], succs: []
5:
8: i32.const 4
9: return
;; preds: [4], succs: []
6:
10: drop
11: block
)cfg";
Module wasm;
SExpressionParser parser(moduleText);
SExpressionWasmBuilder builder(wasm, *(*parser.root)[0], IRProfile::Normal);
CFG cfg = CFG::fromFunction(wasm.getFunction("foo"));
bool colors = Colors::isEnabled();
Colors::setEnabled(false);
std::stringstream ss;
cfg.print(ss);
Colors::setEnabled(colors);
EXPECT_EQ(ss.str(), cfgText);
}
|