| ; REQUIRES: webassembly-registered-target |
| |
| ; Test case 6 - Full logical view |
| |
| ; test.cpp |
| ; 1 using INTPTR = const int *; |
| ; 2 int foo(INTPTR ParamPtr, unsigned ParamUnsigned, bool ParamBool) { |
| ; 3 if (ParamBool) { |
| ; 4 typedef int INTEGER; |
| ; 5 const INTEGER CONSTANT = 7; |
| ; 6 return CONSTANT; |
| ; 7 } |
| ; 8 return ParamUnsigned; |
| ; 9 } |
| |
| ; Print low level details. |
| ; The following command prints low level information that includes |
| ; offsets within the debug information section, debug location |
| ; operands, linkage names, etc. |
| |
| ; RUN: llvm-mc -arch=wasm32 -filetype=obj \ |
| ; RUN: %p/Inputs/test-clang.s -o %t.test-clang.o |
| |
| ; RUN: llvm-debuginfo-analyzer --attribute=all \ |
| ; RUN: --print=all \ |
| ; RUN: %t.test-clang.o 2>&1 | \ |
| ; RUN: FileCheck --strict-whitespace -check-prefix=ONE %s |
| |
| ; ONE: Logical View: |
| ; ONE-NEXT: [0x0000000000][000] {File} '{{.*}}test-clang.o' -> WASM |
| ; ONE-EMPTY: |
| ; ONE-NEXT: [0x000000000b][001] {CompileUnit} 'test.cpp' |
| ; ONE-NEXT: [0x000000000b][002] {Producer} 'clang version 19{{.*}}' |
| ; ONE-NEXT: {Directory} '{{.*}}/general' |
| ; ONE-NEXT: {File} 'test.cpp' |
| ; ONE-NEXT: {Public} 'foo' [0x0000000002:0x000000007f] |
| ; ONE-NEXT: [0x000000000b][002] {Range} Lines 2:9 [0x0000000002:0x000000007f] |
| ; ONE-NEXT: [0x00000000b3][002] {BaseType} 'bool' |
| ; ONE-NEXT: [0x0000000090][002] {BaseType} 'int' |
| ; ONE-NEXT: [0x00000000ac][002] {BaseType} 'unsigned int' |
| ; ONE-EMPTY: |
| ; ONE-NEXT: [0x0000000097][002] {Source} '{{.*}}general/test.cpp' |
| ; ONE-NEXT: [0x0000000097][002] 1 {TypeAlias} 'INTPTR' -> [0x00000000a2]'* const int' |
| ; ONE-NEXT: [0x0000000026][002] 2 {Function} extern not_inlined 'foo' -> [0x0000000090]'int' |
| ; ONE-NEXT: [0x0000000026][003] {Range} Lines 2:9 [0x0000000002:0x000000007f] |
| ; ONE-NEXT: [0x0000000026][003] {Linkage} 0x3 '_Z3fooPKijb' |
| ; ONE-NEXT: [0x000000006c][003] {Block} |
| ; ONE-NEXT: [0x000000006c][004] {Range} Lines 5:0 [0x000000004c:0x0000000064] |
| ; ONE-NEXT: [0x0000000075][004] 5 {Variable} 'CONSTANT' -> [0x00000000ba]'const INTEGER' |
| ; ONE-NEXT: [0x0000000075][005] {Coverage} 100.00% |
| ; ONE-NEXT: [0x0000000076][005] {Location} |
| ; ONE-NEXT: [0x0000000076][006] {Entry} fbreg 12 |
| ; ONE-NEXT: [0x000000004c][004] 5 {Line} {NewStatement} '{{.*}}/general/test.cpp' |
| ; ONE-NEXT: [0x000000004c][004] {Code} 'i32.const 7' |
| ; ONE-NEXT: [0x000000004e][004] {Code} 'local.set 10' |
| ; ONE-NEXT: [0x0000000050][004] {Code} 'local.get 5' |
| ; ONE-NEXT: [0x0000000052][004] {Code} 'local.get 10' |
| ; ONE-NEXT: [0x0000000054][004] {Code} 'i32.store 12' |
| ; ONE-NEXT: [0x0000000057][004] 6 {Line} {NewStatement} '{{.*}}/general/test.cpp' |
| ; ONE-NEXT: [0x0000000057][004] {Code} 'i32.const 7' |
| ; ONE-NEXT: [0x0000000059][004] {Code} 'local.set 11' |
| ; ONE-NEXT: [0x000000005b][004] {Code} 'local.get 5' |
| ; ONE-NEXT: [0x000000005d][004] {Code} 'local.get 11' |
| ; ONE-NEXT: [0x000000005f][004] {Code} 'i32.store 28' |
| ; ONE-NEXT: [0x0000000062][004] {Code} 'br 1' |
| ; ONE-NEXT: [0x0000000064][004] 0 {Line} '{{.*}}/general/test.cpp' |
| ; ONE-NEXT: [0x0000000064][004] {Code} 'end' |
| ; ONE-NEXT: [0x000000005e][003] 2 {Parameter} 'ParamBool' -> [0x00000000b3]'bool' |
| ; ONE-NEXT: [0x000000005e][004] {Coverage} 100.00% |
| ; ONE-NEXT: [0x000000005f][004] {Location} |
| ; ONE-NEXT: [0x000000005f][005] {Entry} fbreg 19 |
| ; ONE-NEXT: [0x0000000042][003] 2 {Parameter} 'ParamPtr' -> [0x0000000097]'INTPTR' |
| ; ONE-NEXT: [0x0000000042][004] {Coverage} 100.00% |
| ; ONE-NEXT: [0x0000000043][004] {Location} |
| ; ONE-NEXT: [0x0000000043][005] {Entry} fbreg 24 |
| ; ONE-NEXT: [0x0000000050][003] 2 {Parameter} 'ParamUnsigned' -> [0x00000000ac]'unsigned int' |
| ; ONE-NEXT: [0x0000000050][004] {Coverage} 100.00% |
| ; ONE-NEXT: [0x0000000051][004] {Location} |
| ; ONE-NEXT: [0x0000000051][005] {Entry} fbreg 20 |
| ; ONE-NEXT: [0x0000000084][003] 4 {TypeAlias} 'INTEGER' -> [0x0000000090]'int' |
| ; ONE-NEXT: [0x0000000002][003] 2 {Line} {NewStatement} '{{.*}}/general/test.cpp' |
| ; ONE-NEXT: [0x0000000002][003] {Code} 'nop' |
| ; ONE-NEXT: [0x0000000003][003] {Code} 'end' |
| ; ONE-NEXT: [0x0000000004][003] {Code} 'i64.div_s' |
| ; ONE-NEXT: [0x0000000005][003] {Code} 'global.get 0' |
| ; ONE-NEXT: [0x000000000b][003] {Code} 'local.set 3' |
| ; ONE-NEXT: [0x000000000d][003] {Code} 'i32.const 32' |
| ; ONE-NEXT: [0x000000000f][003] {Code} 'local.set 4' |
| ; ONE-NEXT: [0x0000000011][003] {Code} 'local.get 3' |
| ; ONE-NEXT: [0x0000000013][003] {Code} 'local.get 4' |
| ; ONE-NEXT: [0x0000000015][003] {Code} 'i32.sub' |
| ; ONE-NEXT: [0x0000000016][003] {Code} 'local.set 5' |
| ; ONE-NEXT: [0x0000000018][003] {Code} 'local.get 5' |
| ; ONE-NEXT: [0x000000001a][003] {Code} 'local.get 0' |
| ; ONE-NEXT: [0x000000001c][003] {Code} 'i32.store 24' |
| ; ONE-NEXT: [0x000000001f][003] {Code} 'local.get 5' |
| ; ONE-NEXT: [0x0000000021][003] {Code} 'local.get 1' |
| ; ONE-NEXT: [0x0000000023][003] {Code} 'i32.store 20' |
| ; ONE-NEXT: [0x0000000026][003] {Code} 'local.get 2' |
| ; ONE-NEXT: [0x0000000028][003] {Code} 'local.set 6' |
| ; ONE-NEXT: [0x000000002a][003] {Code} 'local.get 5' |
| ; ONE-NEXT: [0x000000002c][003] {Code} 'local.get 6' |
| ; ONE-NEXT: [0x000000002e][003] {Code} 'i32.store8 19' |
| ; ONE-NEXT: [0x0000000031][003] 3 {Line} {NewStatement} {PrologueEnd} '{{.*}}/general/test.cpp' |
| ; ONE-NEXT: [0x0000000031][003] {Code} 'local.get 5' |
| ; ONE-NEXT: [0x0000000033][003] {Code} 'i32.load8_u 19' |
| ; ONE-NEXT: [0x0000000036][003] {Code} 'local.set 7' |
| ; ONE-NEXT: [0x0000000038][003] 3 {Line} '{{.*}}/general/test.cpp' |
| ; ONE-NEXT: [0x0000000038][003] {Code} 'i32.const 1' |
| ; ONE-NEXT: [0x000000003a][003] {Code} 'local.set 8' |
| ; ONE-NEXT: [0x000000003c][003] {Code} 'local.get 7' |
| ; ONE-NEXT: [0x000000003e][003] {Code} 'local.get 8' |
| ; ONE-NEXT: [0x0000000040][003] {Code} 'i32.and' |
| ; ONE-NEXT: [0x0000000041][003] {Code} 'local.set 9' |
| ; ONE-NEXT: [0x0000000043][003] {Code} 'block' |
| ; ONE-NEXT: [0x0000000045][003] {Code} 'block' |
| ; ONE-NEXT: [0x0000000047][003] {Code} 'local.get 9' |
| ; ONE-NEXT: [0x0000000049][003] {Code} 'i32.eqz' |
| ; ONE-NEXT: [0x000000004a][003] {Code} 'br_if 0' |
| ; ONE-NEXT: [0x0000000065][003] 8 {Line} {NewStatement} '{{.*}}/general/test.cpp' |
| ; ONE-NEXT: [0x0000000065][003] {Code} 'local.get 5' |
| ; ONE-NEXT: [0x0000000067][003] {Code} 'i32.load 20' |
| ; ONE-NEXT: [0x000000006a][003] {Code} 'local.set 12' |
| ; ONE-NEXT: [0x000000006c][003] 8 {Line} '{{.*}}/general/test.cpp' |
| ; ONE-NEXT: [0x000000006c][003] {Code} 'local.get 5' |
| ; ONE-NEXT: [0x000000006e][003] {Code} 'local.get 12' |
| ; ONE-NEXT: [0x0000000070][003] {Code} 'i32.store 28' |
| ; ONE-NEXT: [0x0000000073][003] 0 {Line} '{{.*}}/general/test.cpp' |
| ; ONE-NEXT: [0x0000000073][003] {Code} 'end' |
| ; ONE-NEXT: [0x0000000074][003] 9 {Line} {NewStatement} '{{.*}}/general/test.cpp' |
| ; ONE-NEXT: [0x0000000074][003] {Code} 'local.get 5' |
| ; ONE-NEXT: [0x0000000076][003] {Code} 'i32.load 28' |
| ; ONE-NEXT: [0x0000000079][003] {Code} 'local.set 13' |
| ; ONE-NEXT: [0x000000007b][003] {Code} 'local.get 13' |
| ; ONE-NEXT: [0x000000007d][003] {Code} 'return' |
| ; ONE-NEXT: [0x000000007e][003] {Code} 'end' |
| ; ONE-NEXT: [0x000000007f][003] 9 {Line} {NewStatement} {EndSequence} '{{.*}}/general/test.cpp' |
| ; ONE-NEXT: [0x000000007f][003] {Code} 'unreachable' |
| ; ONE-EMPTY: |
| ; ONE-NEXT: ----------------------------- |
| ; ONE-NEXT: Element Total Printed |
| ; ONE-NEXT: ----------------------------- |
| ; ONE-NEXT: Scopes 3 3 |
| ; ONE-NEXT: Symbols 4 4 |
| ; ONE-NEXT: Types 5 5 |
| ; ONE-NEXT: Lines 73 73 |
| ; ONE-NEXT: ----------------------------- |
| ; ONE-NEXT: Total 85 85 |
| ; ONE-EMPTY: |
| ; ONE-NEXT: Scope Sizes: |
| ; ONE-NEXT: 180 (100.00%) : [0x000000000b][001] {CompileUnit} 'test.cpp' |
| ; ONE-NEXT: 105 ( 58.33%) : [0x0000000026][002] 2 {Function} extern not_inlined 'foo' -> [0x0000000090]'int' |
| ; ONE-NEXT: 23 ( 12.78%) : [0x000000006c][003] {Block} |
| ; ONE-EMPTY: |
| ; ONE-NEXT: Totals by lexical level: |
| ; ONE-NEXT: [001]: 180 (100.00%) |
| ; ONE-NEXT: [002]: 105 ( 58.33%) |
| ; ONE-NEXT: [003]: 23 ( 12.78%) |