xref: /llvm-project/llvm/test/tools/llvm-debuginfo-analyzer/WebAssembly/06-wasm-full-logical-view.test (revision b19cfb9175223d3e1bb3ef6d49ccd26d0104906c)
1; REQUIRES: webassembly-registered-target
2
3; Test case 6 - Full logical view
4
5; test.cpp
6;  1  using INTPTR = const int *;
7;  2  int foo(INTPTR ParamPtr, unsigned ParamUnsigned, bool ParamBool) {
8;  3    if (ParamBool) {
9;  4      typedef int INTEGER;
10;  5      const INTEGER CONSTANT = 7;
11;  6      return CONSTANT;
12;  7    }
13;  8    return ParamUnsigned;
14;  9  }
15
16; Print low level details.
17; The following command prints low level information that includes
18; offsets within the debug information section, debug location
19; operands, linkage names, etc.
20
21; RUN: llvm-mc -arch=wasm32 -filetype=obj \
22; RUN:         %p/Inputs/test-clang.s -o %t.test-clang.o
23
24; RUN: llvm-debuginfo-analyzer --attribute=all \
25; RUN:                         --print=all \
26; RUN:                         %t.test-clang.o 2>&1 | \
27; RUN: FileCheck --strict-whitespace -check-prefix=ONE %s
28
29; ONE:      Logical View:
30; ONE-NEXT: [0x0000000000][000]            {File} '{{.*}}test-clang.o' -> WASM
31; ONE-EMPTY:
32; ONE-NEXT: [0x000000000b][001]              {CompileUnit} 'test.cpp'
33; ONE-NEXT: [0x000000000b][002]                {Producer} 'clang version 19{{.*}}'
34; ONE-NEXT:                                    {Directory} '{{.*}}/general'
35; ONE-NEXT:                                    {File} 'test.cpp'
36; ONE-NEXT:                                    {Public} 'foo' [0x0000000002:0x000000007f]
37; ONE-NEXT: [0x000000000b][002]                {Range} Lines 2:9 [0x0000000002:0x000000007f]
38; ONE-NEXT: [0x00000000b3][002]                {BaseType} 'bool'
39; ONE-NEXT: [0x0000000090][002]                {BaseType} 'int'
40; ONE-NEXT: [0x00000000ac][002]                {BaseType} 'unsigned int'
41; ONE-EMPTY:
42; ONE-NEXT: [0x0000000097][002]   {Source} '{{.*}}general/test.cpp'
43; ONE-NEXT: [0x0000000097][002]      1         {TypeAlias} 'INTPTR' -> [0x00000000a2]'* const int'
44; ONE-NEXT: [0x0000000026][002]      2         {Function} extern not_inlined 'foo' -> [0x0000000090]'int'
45; ONE-NEXT: [0x0000000026][003]                  {Range} Lines 2:9 [0x0000000002:0x000000007f]
46; ONE-NEXT: [0x0000000026][003]                  {Linkage}  0x3 '_Z3fooPKijb'
47; ONE-NEXT: [0x000000006c][003]                  {Block}
48; ONE-NEXT: [0x000000006c][004]                    {Range} Lines 5:0 [0x000000004c:0x0000000064]
49; ONE-NEXT: [0x0000000075][004]      5             {Variable} 'CONSTANT' -> [0x00000000ba]'const INTEGER'
50; ONE-NEXT: [0x0000000075][005]                      {Coverage} 100.00%
51; ONE-NEXT: [0x0000000076][005]                      {Location}
52; ONE-NEXT: [0x0000000076][006]                        {Entry} fbreg 12
53; ONE-NEXT: [0x000000004c][004]      5             {Line} {NewStatement} '{{.*}}/general/test.cpp'
54; ONE-NEXT: [0x000000004c][004]                    {Code} 'i32.const	7'
55; ONE-NEXT: [0x000000004e][004]                    {Code} 'local.set	10'
56; ONE-NEXT: [0x0000000050][004]                    {Code} 'local.get	5'
57; ONE-NEXT: [0x0000000052][004]                    {Code} 'local.get	10'
58; ONE-NEXT: [0x0000000054][004]                    {Code} 'i32.store	12'
59; ONE-NEXT: [0x0000000057][004]      6             {Line} {NewStatement} '{{.*}}/general/test.cpp'
60; ONE-NEXT: [0x0000000057][004]                    {Code} 'i32.const	7'
61; ONE-NEXT: [0x0000000059][004]                    {Code} 'local.set	11'
62; ONE-NEXT: [0x000000005b][004]                    {Code} 'local.get	5'
63; ONE-NEXT: [0x000000005d][004]                    {Code} 'local.get	11'
64; ONE-NEXT: [0x000000005f][004]                    {Code} 'i32.store	28'
65; ONE-NEXT: [0x0000000062][004]                    {Code} 'br      	1'
66; ONE-NEXT: [0x0000000064][004]      0             {Line} '{{.*}}/general/test.cpp'
67; ONE-NEXT: [0x0000000064][004]                    {Code} 'end'
68; ONE-NEXT: [0x000000005e][003]      2           {Parameter} 'ParamBool' -> [0x00000000b3]'bool'
69; ONE-NEXT: [0x000000005e][004]                    {Coverage} 100.00%
70; ONE-NEXT: [0x000000005f][004]                    {Location}
71; ONE-NEXT: [0x000000005f][005]                      {Entry} fbreg 19
72; ONE-NEXT: [0x0000000042][003]      2           {Parameter} 'ParamPtr' -> [0x0000000097]'INTPTR'
73; ONE-NEXT: [0x0000000042][004]                    {Coverage} 100.00%
74; ONE-NEXT: [0x0000000043][004]                    {Location}
75; ONE-NEXT: [0x0000000043][005]                      {Entry} fbreg 24
76; ONE-NEXT: [0x0000000050][003]      2           {Parameter} 'ParamUnsigned' -> [0x00000000ac]'unsigned int'
77; ONE-NEXT: [0x0000000050][004]                    {Coverage} 100.00%
78; ONE-NEXT: [0x0000000051][004]                    {Location}
79; ONE-NEXT: [0x0000000051][005]                      {Entry} fbreg 20
80; ONE-NEXT: [0x0000000084][003]      4           {TypeAlias} 'INTEGER' -> [0x0000000090]'int'
81; ONE-NEXT: [0x0000000002][003]      2           {Line} {NewStatement} '{{.*}}/general/test.cpp'
82; ONE-NEXT: [0x0000000002][003]                  {Code} 'nop'
83; ONE-NEXT: [0x0000000003][003]                  {Code} 'end'
84; ONE-NEXT: [0x0000000004][003]                  {Code} 'i64.div_s'
85; ONE-NEXT: [0x0000000005][003]                  {Code} 'global.get	0'
86; ONE-NEXT: [0x000000000b][003]                  {Code} 'local.set	3'
87; ONE-NEXT: [0x000000000d][003]                  {Code} 'i32.const	32'
88; ONE-NEXT: [0x000000000f][003]                  {Code} 'local.set	4'
89; ONE-NEXT: [0x0000000011][003]                  {Code} 'local.get	3'
90; ONE-NEXT: [0x0000000013][003]                  {Code} 'local.get	4'
91; ONE-NEXT: [0x0000000015][003]                  {Code} 'i32.sub'
92; ONE-NEXT: [0x0000000016][003]                  {Code} 'local.set	5'
93; ONE-NEXT: [0x0000000018][003]                  {Code} 'local.get	5'
94; ONE-NEXT: [0x000000001a][003]                  {Code} 'local.get	0'
95; ONE-NEXT: [0x000000001c][003]                  {Code} 'i32.store	24'
96; ONE-NEXT: [0x000000001f][003]                  {Code} 'local.get	5'
97; ONE-NEXT: [0x0000000021][003]                  {Code} 'local.get	1'
98; ONE-NEXT: [0x0000000023][003]                  {Code} 'i32.store	20'
99; ONE-NEXT: [0x0000000026][003]                  {Code} 'local.get	2'
100; ONE-NEXT: [0x0000000028][003]                  {Code} 'local.set	6'
101; ONE-NEXT: [0x000000002a][003]                  {Code} 'local.get	5'
102; ONE-NEXT: [0x000000002c][003]                  {Code} 'local.get	6'
103; ONE-NEXT: [0x000000002e][003]                  {Code} 'i32.store8	19'
104; ONE-NEXT: [0x0000000031][003]      3           {Line} {NewStatement} {PrologueEnd} '{{.*}}/general/test.cpp'
105; ONE-NEXT: [0x0000000031][003]                  {Code} 'local.get	5'
106; ONE-NEXT: [0x0000000033][003]                  {Code} 'i32.load8_u	19'
107; ONE-NEXT: [0x0000000036][003]                  {Code} 'local.set	7'
108; ONE-NEXT: [0x0000000038][003]      3           {Line} '{{.*}}/general/test.cpp'
109; ONE-NEXT: [0x0000000038][003]                  {Code} 'i32.const	1'
110; ONE-NEXT: [0x000000003a][003]                  {Code} 'local.set	8'
111; ONE-NEXT: [0x000000003c][003]                  {Code} 'local.get	7'
112; ONE-NEXT: [0x000000003e][003]                  {Code} 'local.get	8'
113; ONE-NEXT: [0x0000000040][003]                  {Code} 'i32.and'
114; ONE-NEXT: [0x0000000041][003]                  {Code} 'local.set	9'
115; ONE-NEXT: [0x0000000043][003]                  {Code} 'block'
116; ONE-NEXT: [0x0000000045][003]                  {Code} 'block'
117; ONE-NEXT: [0x0000000047][003]                  {Code} 'local.get	9'
118; ONE-NEXT: [0x0000000049][003]                  {Code} 'i32.eqz'
119; ONE-NEXT: [0x000000004a][003]                  {Code} 'br_if   	0'
120; ONE-NEXT: [0x0000000065][003]      8           {Line} {NewStatement} '{{.*}}/general/test.cpp'
121; ONE-NEXT: [0x0000000065][003]                  {Code} 'local.get	5'
122; ONE-NEXT: [0x0000000067][003]                  {Code} 'i32.load	20'
123; ONE-NEXT: [0x000000006a][003]                  {Code} 'local.set	12'
124; ONE-NEXT: [0x000000006c][003]      8           {Line} '{{.*}}/general/test.cpp'
125; ONE-NEXT: [0x000000006c][003]                  {Code} 'local.get	5'
126; ONE-NEXT: [0x000000006e][003]                  {Code} 'local.get	12'
127; ONE-NEXT: [0x0000000070][003]                  {Code} 'i32.store	28'
128; ONE-NEXT: [0x0000000073][003]      0           {Line} '{{.*}}/general/test.cpp'
129; ONE-NEXT: [0x0000000073][003]                  {Code} 'end'
130; ONE-NEXT: [0x0000000074][003]      9           {Line} {NewStatement} '{{.*}}/general/test.cpp'
131; ONE-NEXT: [0x0000000074][003]                  {Code} 'local.get	5'
132; ONE-NEXT: [0x0000000076][003]                  {Code} 'i32.load	28'
133; ONE-NEXT: [0x0000000079][003]                  {Code} 'local.set	13'
134; ONE-NEXT: [0x000000007b][003]                  {Code} 'local.get	13'
135; ONE-NEXT: [0x000000007d][003]                  {Code} 'return'
136; ONE-NEXT: [0x000000007e][003]                  {Code} 'end'
137; ONE-NEXT: [0x000000007f][003]      9           {Line} {NewStatement} {EndSequence} '{{.*}}/general/test.cpp'
138; ONE-NEXT: [0x000000007f][003]                  {Code} 'unreachable'
139; ONE-EMPTY:
140; ONE-NEXT: -----------------------------
141; ONE-NEXT: Element      Total    Printed
142; ONE-NEXT: -----------------------------
143; ONE-NEXT: Scopes           3          3
144; ONE-NEXT: Symbols          4          4
145; ONE-NEXT: Types            5          5
146; ONE-NEXT: Lines           73         73
147; ONE-NEXT: -----------------------------
148; ONE-NEXT: Total           85         85
149; ONE-EMPTY:
150; ONE-NEXT: Scope Sizes:
151; ONE-NEXT:        180 (100.00%) : [0x000000000b][001]              {CompileUnit} 'test.cpp'
152; ONE-NEXT:        105 ( 58.33%) : [0x0000000026][002]      2         {Function} extern not_inlined 'foo' -> [0x0000000090]'int'
153; ONE-NEXT:         23 ( 12.78%) : [0x000000006c][003]                  {Block}
154; ONE-EMPTY:
155; ONE-NEXT: Totals by lexical level:
156; ONE-NEXT: [001]:        180 (100.00%)
157; ONE-NEXT: [002]:        105 ( 58.33%)
158; ONE-NEXT: [003]:         23 ( 12.78%)
159