1; REQUIRES: webassembly-registered-target 2 3; Test case 2 - Assembler instructions. 4 5; hello-world.cpp 6; 1 extern int printf(const char * format, ... ); 7; 2 8; 3 int main() 9; 4 { 10; 5 printf("Hello, World\n"); 11; 6 return 0; 12; 7 } 13 14; Logical lines. 15; The logical views shows the intermixed lines and assembler instructions, 16; allowing to compare the code generated by the different toolchains. 17 18; RUN: llvm-mc -arch=wasm32 -filetype=obj \ 19; RUN: %p/Inputs/hello-world-clang.s -o %t.hello-world-clang.o 20 21; RUN: llvm-debuginfo-analyzer --attribute=level,format,producer \ 22; RUN: --print=lines,instructions \ 23; RUN: %t.hello-world-clang.o 2>&1 | \ 24; RUN: FileCheck --strict-whitespace -check-prefix=ONE %s 25 26; ONE: Logical View: 27; ONE-NEXT: [000] {File} '{{.*}}hello-world-clang.o' -> WASM 28; ONE-EMPTY: 29; ONE-NEXT: [001] {CompileUnit} 'hello-world.cpp' 30; ONE-NEXT: [002] {Producer} 'clang version 19{{.*}}' 31; ONE-NEXT: [002] 3 {Function} extern not_inlined 'main' -> 'int' 32; ONE-NEXT: [003] 4 {Line} 33; ONE-NEXT: [003] {Code} 'nop' 34; ONE-NEXT: [003] {Code} 'rethrow 127' 35; ONE-NEXT: [003] {Code} 'global.get 0' 36; ONE-NEXT: [003] {Code} 'local.set 0' 37; ONE-NEXT: [003] {Code} 'i32.const 16' 38; ONE-NEXT: [003] {Code} 'local.set 1' 39; ONE-NEXT: [003] {Code} 'local.get 0' 40; ONE-NEXT: [003] {Code} 'local.get 1' 41; ONE-NEXT: [003] {Code} 'i32.sub' 42; ONE-NEXT: [003] {Code} 'local.set 2' 43; ONE-NEXT: [003] {Code} 'local.get 2' 44; ONE-NEXT: [003] {Code} 'global.set 0' 45; ONE-NEXT: [003] {Code} 'i32.const 0' 46; ONE-NEXT: [003] {Code} 'local.set 3' 47; ONE-NEXT: [003] {Code} 'local.get 2' 48; ONE-NEXT: [003] {Code} 'local.get 3' 49; ONE-NEXT: [003] {Code} 'i32.store 12' 50; ONE-NEXT: [003] 5 {Line} 51; ONE-NEXT: [003] {Code} 'i32.const 0' 52; ONE-NEXT: [003] {Code} 'local.set 4' 53; ONE-NEXT: [003] {Code} 'i32.const 0' 54; ONE-NEXT: [003] {Code} 'local.set 5' 55; ONE-NEXT: [003] {Code} 'local.get 4' 56; ONE-NEXT: [003] {Code} 'local.get 5' 57; ONE-NEXT: [003] {Code} 'call 0' 58; ONE-NEXT: [003] {Code} 'drop' 59; ONE-NEXT: [003] 6 {Line} 60; ONE-NEXT: [003] {Code} 'i32.const 0' 61; ONE-NEXT: [003] {Code} 'local.set 6' 62; ONE-NEXT: [003] {Code} 'i32.const 16' 63; ONE-NEXT: [003] {Code} 'local.set 7' 64; ONE-NEXT: [003] {Code} 'local.get 2' 65; ONE-NEXT: [003] {Code} 'local.get 7' 66; ONE-NEXT: [003] {Code} 'i32.add' 67; ONE-NEXT: [003] {Code} 'local.set 8' 68; ONE-NEXT: [003] {Code} 'local.get 8' 69; ONE-NEXT: [003] {Code} 'global.set 0' 70; ONE-NEXT: [003] {Code} 'local.get 6' 71; ONE-NEXT: [003] {Code} 'return' 72; ONE-NEXT: [003] {Code} 'end' 73; ONE-NEXT: [003] 6 {Line} 74; ONE-NEXT: [003] {Code} 'return' 75