207 lines · plain
1; REQUIRES: x86-registered-target2 3; * Added incorrect logical instructions for: --print=lines,instructions4; 'bar' and 'foo' showing extra instruction from compiler generated functions:5; '_cxx_global_var_init' and '_GLOBAL_sub_l_suite_lexical_01.cpp'6;7; * Missing logical instructions for: --print=instructions8; Only 'foo' showing logical instructions.9 10; pr-incorrect-instructions-dwarf-clang.cpp11; 1 int ABCDE = 56; int XYZ = ABCDE * 65;12; 2 int bar(int Param) {13; 3 return Param + 999999 * Param - 66;14; 4 }15; 516; 6 int foo(int Param) {17; 7 return Param - bar(Param) / Param * 66 + ABCDE;18; 8 }19; 920; 10 int test(int P1) {21; 11 int Local_1 = P1 - ABCDE;22; 12 {23; 13 int Local_A = 0;24; 14 Local_A = P1 + foo(Local_1);25; 15 ++Local_1;26; 16 }27; 17 return Local_1;28; 18 }29; 1930; 20 int main() {31; 21 return 0;32; 22 }33 34; RUN: llvm-debuginfo-analyzer --attribute=level \35; RUN: --print=lines,instructions \36; RUN: %p/Inputs/pr-incorrect-instructions-dwarf-clang.o 2>&1 | \37; RUN: FileCheck --strict-whitespace -check-prefix=ONE %s38 39; ONE: Logical View:40; ONE-NEXT: [000] {File} 'pr-incorrect-instructions-dwarf-clang.o'41; ONE-EMPTY:42; ONE-NEXT: [001] {CompileUnit} 'pr-incorrect-instructions-dwarf-clang.cpp'43; ONE-NEXT: [002] 2 {Function} extern not_inlined 'bar' -> 'int'44; ONE-NEXT: [003] 2 {Line}45; ONE-NEXT: [003] {Code} 'pushq %rbp'46; ONE-NEXT: [003] {Code} 'movq %rsp, %rbp'47; ONE-NEXT: [003] {Code} 'movl %edi, -0x4(%rbp)'48; ONE-NEXT: [003] 3 {Line}49; ONE-NEXT: [003] {Code} 'movl -0x4(%rbp), %eax'50; ONE-NEXT: [003] 3 {Line}51; ONE-NEXT: [003] {Code} 'imull $0xf423f, -0x4(%rbp), %ecx'52; ONE-NEXT: [003] 3 {Line}53; ONE-NEXT: [003] {Code} 'addl %ecx, %eax'54; ONE-NEXT: [003] 3 {Line}55; ONE-NEXT: [003] {Code} 'subl $0x42, %eax'56; ONE-NEXT: [003] 3 {Line}57; ONE-NEXT: [003] {Code} 'popq %rbp'58; ONE-NEXT: [003] {Code} 'retq'59; ONE-NEXT: [002] 6 {Function} extern not_inlined 'foo' -> 'int'60; ONE-NEXT: [003] 6 {Line}61; ONE-NEXT: [003] {Code} 'pushq %rbp'62; ONE-NEXT: [003] {Code} 'movq %rsp, %rbp'63; ONE-NEXT: [003] {Code} 'subq $0x10, %rsp'64; ONE-NEXT: [003] {Code} 'movl %edi, -0x4(%rbp)'65; ONE-NEXT: [003] 7 {Line}66; ONE-NEXT: [003] {Code} 'movl -0x4(%rbp), %eax'67; ONE-NEXT: [003] {Code} 'movl %eax, -0x8(%rbp)'68; ONE-NEXT: [003] 7 {Line}69; ONE-NEXT: [003] {Code} 'movl -0x4(%rbp), %edi'70; ONE-NEXT: [003] 7 {Line}71; ONE-NEXT: [003] {Code} 'callq 0x0'72; ONE-NEXT: [003] 7 {Line}73; ONE-NEXT: [003] {Code} 'cltd'74; ONE-NEXT: [003] {Code} 'idivl -0x4(%rbp)'75; ONE-NEXT: [003] {Code} 'movl %eax, %ecx'76; ONE-NEXT: [003] {Code} 'movl -0x8(%rbp), %eax'77; ONE-NEXT: [003] 7 {Line}78; ONE-NEXT: [003] {Code} 'imull $0x42, %ecx, %ecx'79; ONE-NEXT: [003] 7 {Line}80; ONE-NEXT: [003] {Code} 'subl %ecx, %eax'81; ONE-NEXT: [003] 7 {Line}82; ONE-NEXT: [003] {Code} 'addl (%rip), %eax'83; ONE-NEXT: [003] 7 {Line}84; ONE-NEXT: [003] {Code} 'addq $0x10, %rsp'85; ONE-NEXT: [003] {Code} 'popq %rbp'86; ONE-NEXT: [003] {Code} 'retq'87; ONE-NEXT: [002] 10 {Function} extern not_inlined 'test' -> 'int'88; ONE-NEXT: [003] {Block}89; ONE-NEXT: [004] 13 {Line}90; ONE-NEXT: [004] {Code} 'movl $0x0, -0xc(%rbp)'91; ONE-NEXT: [004] 14 {Line}92; ONE-NEXT: [004] {Code} 'movl -0x4(%rbp), %eax'93; ONE-NEXT: [004] {Code} 'movl %eax, -0x10(%rbp)'94; ONE-NEXT: [004] 14 {Line}95; ONE-NEXT: [004] {Code} 'movl -0x8(%rbp), %edi'96; ONE-NEXT: [004] 14 {Line}97; ONE-NEXT: [004] {Code} 'callq 0x0'98; ONE-NEXT: [004] {Code} 'movl %eax, %ecx'99; ONE-NEXT: [004] {Code} 'movl -0x10(%rbp), %eax'100; ONE-NEXT: [004] 14 {Line}101; ONE-NEXT: [004] {Code} 'addl %ecx, %eax'102; ONE-NEXT: [004] 14 {Line}103; ONE-NEXT: [004] {Code} 'movl %eax, -0xc(%rbp)'104; ONE-NEXT: [004] 15 {Line}105; ONE-NEXT: [004] {Code} 'movl -0x8(%rbp), %eax'106; ONE-NEXT: [004] {Code} 'addl $0x1, %eax'107; ONE-NEXT: [004] {Code} 'movl %eax, -0x8(%rbp)'108; ONE-NEXT: [003] 10 {Line}109; ONE-NEXT: [003] {Code} 'pushq %rbp'110; ONE-NEXT: [003] {Code} 'movq %rsp, %rbp'111; ONE-NEXT: [003] {Code} 'subq $0x10, %rsp'112; ONE-NEXT: [003] {Code} 'movl %edi, -0x4(%rbp)'113; ONE-NEXT: [003] 11 {Line}114; ONE-NEXT: [003] {Code} 'movl -0x4(%rbp), %eax'115; ONE-NEXT: [003] 11 {Line}116; ONE-NEXT: [003] {Code} 'subl (%rip), %eax'117; ONE-NEXT: [003] 11 {Line}118; ONE-NEXT: [003] {Code} 'movl %eax, -0x8(%rbp)'119; ONE-NEXT: [003] 17 {Line}120; ONE-NEXT: [003] {Code} 'movl -0x8(%rbp), %eax'121; ONE-NEXT: [003] 17 {Line}122; ONE-NEXT: [003] {Code} 'addq $0x10, %rsp'123; ONE-NEXT: [003] {Code} 'popq %rbp'124; ONE-NEXT: [003] {Code} 'retq'125; ONE-NEXT: [002] 20 {Function} extern not_inlined 'main' -> 'int'126; ONE-NEXT: [003] 20 {Line}127; ONE-NEXT: [003] {Code} 'pushq %rbp'128; ONE-NEXT: [003] {Code} 'movq %rsp, %rbp'129; ONE-NEXT: [003] {Code} 'movl $0x0, -0x4(%rbp)'130; ONE-NEXT: [003] 21 {Line}131; ONE-NEXT: [003] {Code} 'xorl %eax, %eax'132; ONE-NEXT: [003] {Code} 'popq %rbp'133; ONE-NEXT: [003] {Code} 'retq'134; ONE-NEXT: [002] {Code} 'data16'135; ONE-NEXT: [002] 21 {Line}136 137; RUN: llvm-debuginfo-analyzer --attribute=level \138; RUN: --print=instructions \139; RUN: %p/Inputs/pr-incorrect-instructions-dwarf-clang.o 2>&1 | \140; RUN: FileCheck --strict-whitespace -check-prefix=TWO %s141 142; TWO: Logical View:143; TWO-NEXT: [000] {File} 'pr-incorrect-instructions-dwarf-clang.o'144; TWO-EMPTY:145; TWO-NEXT: [001] {CompileUnit} 'pr-incorrect-instructions-dwarf-clang.cpp'146; TWO-NEXT: [002] 2 {Function} extern not_inlined 'bar' -> 'int'147; TWO-NEXT: [003] {Code} 'pushq %rbp'148; TWO-NEXT: [003] {Code} 'movq %rsp, %rbp'149; TWO-NEXT: [003] {Code} 'movl %edi, -0x4(%rbp)'150; TWO-NEXT: [003] {Code} 'movl -0x4(%rbp), %eax'151; TWO-NEXT: [003] {Code} 'imull $0xf423f, -0x4(%rbp), %ecx'152; TWO-NEXT: [003] {Code} 'addl %ecx, %eax'153; TWO-NEXT: [003] {Code} 'subl $0x42, %eax'154; TWO-NEXT: [003] {Code} 'popq %rbp'155; TWO-NEXT: [003] {Code} 'retq'156; TWO-NEXT: [002] 6 {Function} extern not_inlined 'foo' -> 'int'157; TWO-NEXT: [003] {Code} 'pushq %rbp'158; TWO-NEXT: [003] {Code} 'movq %rsp, %rbp'159; TWO-NEXT: [003] {Code} 'subq $0x10, %rsp'160; TWO-NEXT: [003] {Code} 'movl %edi, -0x4(%rbp)'161; TWO-NEXT: [003] {Code} 'movl -0x4(%rbp), %eax'162; TWO-NEXT: [003] {Code} 'movl %eax, -0x8(%rbp)'163; TWO-NEXT: [003] {Code} 'movl -0x4(%rbp), %edi'164; TWO-NEXT: [003] {Code} 'callq 0x0'165; TWO-NEXT: [003] {Code} 'cltd'166; TWO-NEXT: [003] {Code} 'idivl -0x4(%rbp)'167; TWO-NEXT: [003] {Code} 'movl %eax, %ecx'168; TWO-NEXT: [003] {Code} 'movl -0x8(%rbp), %eax'169; TWO-NEXT: [003] {Code} 'imull $0x42, %ecx, %ecx'170; TWO-NEXT: [003] {Code} 'subl %ecx, %eax'171; TWO-NEXT: [003] {Code} 'addl (%rip), %eax'172; TWO-NEXT: [003] {Code} 'addq $0x10, %rsp'173; TWO-NEXT: [003] {Code} 'popq %rbp'174; TWO-NEXT: [003] {Code} 'retq'175; TWO-NEXT: [002] 10 {Function} extern not_inlined 'test' -> 'int'176; TWO-NEXT: [003] {Block}177; TWO-NEXT: [004] {Code} 'movl $0x0, -0xc(%rbp)'178; TWO-NEXT: [004] {Code} 'movl -0x4(%rbp), %eax'179; TWO-NEXT: [004] {Code} 'movl %eax, -0x10(%rbp)'180; TWO-NEXT: [004] {Code} 'movl -0x8(%rbp), %edi'181; TWO-NEXT: [004] {Code} 'callq 0x0'182; TWO-NEXT: [004] {Code} 'movl %eax, %ecx'183; TWO-NEXT: [004] {Code} 'movl -0x10(%rbp), %eax'184; TWO-NEXT: [004] {Code} 'addl %ecx, %eax'185; TWO-NEXT: [004] {Code} 'movl %eax, -0xc(%rbp)'186; TWO-NEXT: [004] {Code} 'movl -0x8(%rbp), %eax'187; TWO-NEXT: [004] {Code} 'addl $0x1, %eax'188; TWO-NEXT: [004] {Code} 'movl %eax, -0x8(%rbp)'189; TWO-NEXT: [003] {Code} 'pushq %rbp'190; TWO-NEXT: [003] {Code} 'movq %rsp, %rbp'191; TWO-NEXT: [003] {Code} 'subq $0x10, %rsp'192; TWO-NEXT: [003] {Code} 'movl %edi, -0x4(%rbp)'193; TWO-NEXT: [003] {Code} 'movl -0x4(%rbp), %eax'194; TWO-NEXT: [003] {Code} 'subl (%rip), %eax'195; TWO-NEXT: [003] {Code} 'movl %eax, -0x8(%rbp)'196; TWO-NEXT: [003] {Code} 'movl -0x8(%rbp), %eax'197; TWO-NEXT: [003] {Code} 'addq $0x10, %rsp'198; TWO-NEXT: [003] {Code} 'popq %rbp'199; TWO-NEXT: [003] {Code} 'retq'200; TWO-NEXT: [002] 20 {Function} extern not_inlined 'main' -> 'int'201; TWO-NEXT: [003] {Code} 'pushq %rbp'202; TWO-NEXT: [003] {Code} 'movq %rsp, %rbp'203; TWO-NEXT: [003] {Code} 'movl $0x0, -0x4(%rbp)'204; TWO-NEXT: [003] {Code} 'xorl %eax, %eax'205; TWO-NEXT: [003] {Code} 'popq %rbp'206; TWO-NEXT: [003] {Code} 'retq'207