brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.3 KiB · b38db28 Raw
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