workflows/scorecard: Run this job once per day instead of for every push
[llvm-project.git] / llvm / test / tools / llvm-debuginfo-analyzer / DWARF / pr-incorrect-logical-instructions.test
bloba99eae2aa2933a2acdb4c7d8bf6bd71f56d69ee1
1 ; REQUIRES: x86-registered-target
3 ; * Added incorrect logical instructions for: --print=lines,instructions
4 ;   'bar' and 'foo' showing extra instruction from compiler generated functions:
5 ;   '_cxx_global_var_init' and '_GLOBAL_sub_l_suite_lexical_01.cpp'
7 ; * Missing logical instructions for: --print=instructions
8 ;   Only 'foo' showing logical instructions.
10 ; pr-incorrect-instructions-dwarf-clang.cpp
11 ;  1 int ABCDE = 56; int XYZ = ABCDE * 65;
12 ;  2 int bar(int Param) {
13 ;  3   return Param + 999999 * Param - 66;
14 ;  4 }
15 ;  5
16 ;  6 int foo(int Param) {
17 ;  7   return Param - bar(Param) / Param * 66 + ABCDE;
18 ;  8 }
19 ;  9
20 ; 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 ; 19
30 ; 20 int main() {
31 ; 21  return 0;
32 ; 22 }
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 %s
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: [003]                 {Code} 'data16'
88 ; ONE-NEXT: [002]    10         {Function} extern not_inlined 'test' -> 'int'
89 ; ONE-NEXT: [003]                 {Block}
90 ; ONE-NEXT: [004]    13             {Line}
91 ; ONE-NEXT: [004]                   {Code} 'movl        $0x0, -0xc(%rbp)'
92 ; ONE-NEXT: [004]    14             {Line}
93 ; ONE-NEXT: [004]                   {Code} 'movl        -0x4(%rbp), %eax'
94 ; ONE-NEXT: [004]                   {Code} 'movl        %eax, -0x10(%rbp)'
95 ; ONE-NEXT: [004]    14             {Line}
96 ; ONE-NEXT: [004]                   {Code} 'movl        -0x8(%rbp), %edi'
97 ; ONE-NEXT: [004]    14             {Line}
98 ; ONE-NEXT: [004]                   {Code} 'callq       0x0'
99 ; ONE-NEXT: [004]                   {Code} 'movl        %eax, %ecx'
100 ; ONE-NEXT: [004]                   {Code} 'movl        -0x10(%rbp), %eax'
101 ; ONE-NEXT: [004]    14             {Line}
102 ; ONE-NEXT: [004]                   {Code} 'addl        %ecx, %eax'
103 ; ONE-NEXT: [004]    14             {Line}
104 ; ONE-NEXT: [004]                   {Code} 'movl        %eax, -0xc(%rbp)'
105 ; ONE-NEXT: [004]    15             {Line}
106 ; ONE-NEXT: [004]                   {Code} 'movl        -0x8(%rbp), %eax'
107 ; ONE-NEXT: [004]                   {Code} 'addl        $0x1, %eax'
108 ; ONE-NEXT: [004]                   {Code} 'movl        %eax, -0x8(%rbp)'
109 ; ONE-NEXT: [004]    17             {Line}
110 ; ONE-NEXT: [004]                   {Code} 'movl        -0x8(%rbp), %eax'
111 ; ONE-NEXT: [003]    10           {Line}
112 ; ONE-NEXT: [003]                 {Code} 'pushq %rbp'
113 ; ONE-NEXT: [003]                 {Code} 'movq  %rsp, %rbp'
114 ; ONE-NEXT: [003]                 {Code} 'subq  $0x10, %rsp'
115 ; ONE-NEXT: [003]                 {Code} 'movl  %edi, -0x4(%rbp)'
116 ; ONE-NEXT: [003]    11           {Line}
117 ; ONE-NEXT: [003]                 {Code} 'movl  -0x4(%rbp), %eax'
118 ; ONE-NEXT: [003]    11           {Line}
119 ; ONE-NEXT: [003]                 {Code} 'subl  (%rip), %eax'
120 ; ONE-NEXT: [003]    11           {Line}
121 ; ONE-NEXT: [003]                 {Code} 'movl  %eax, -0x8(%rbp)'
122 ; ONE-NEXT: [003]    17           {Line}
123 ; ONE-NEXT: [003]                 {Code} 'addq  $0x10, %rsp'
124 ; ONE-NEXT: [003]                 {Code} 'popq  %rbp'
125 ; ONE-NEXT: [003]                 {Code} 'retq'
126 ; ONE-NEXT: [002]    20         {Function} extern not_inlined 'main' -> 'int'
127 ; ONE-NEXT: [003]    20           {Line}
128 ; ONE-NEXT: [003]                 {Code} 'pushq %rbp'
129 ; ONE-NEXT: [003]                 {Code} 'movq  %rsp, %rbp'
130 ; ONE-NEXT: [003]                 {Code} 'movl  $0x0, -0x4(%rbp)'
131 ; ONE-NEXT: [003]    21           {Line}
132 ; ONE-NEXT: [003]                 {Code} 'xorl  %eax, %eax'
133 ; ONE-NEXT: [003]                 {Code} 'popq  %rbp'
134 ; ONE-NEXT: [003]                 {Code} 'retq'
135 ; ONE-NEXT: [003]    21           {Line}
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 %s
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: [003]                 {Code} 'data16'
176 ; TWO-NEXT: [002]    10         {Function} extern not_inlined 'test' -> 'int'
177 ; TWO-NEXT: [003]                 {Block}
178 ; TWO-NEXT: [004]                   {Code} 'movl        $0x0, -0xc(%rbp)'
179 ; TWO-NEXT: [004]                   {Code} 'movl        -0x4(%rbp), %eax'
180 ; TWO-NEXT: [004]                   {Code} 'movl        %eax, -0x10(%rbp)'
181 ; TWO-NEXT: [004]                   {Code} 'movl        -0x8(%rbp), %edi'
182 ; TWO-NEXT: [004]                   {Code} 'callq       0x0'
183 ; TWO-NEXT: [004]                   {Code} 'movl        %eax, %ecx'
184 ; TWO-NEXT: [004]                   {Code} 'movl        -0x10(%rbp), %eax'
185 ; TWO-NEXT: [004]                   {Code} 'addl        %ecx, %eax'
186 ; TWO-NEXT: [004]                   {Code} 'movl        %eax, -0xc(%rbp)'
187 ; TWO-NEXT: [004]                   {Code} 'movl        -0x8(%rbp), %eax'
188 ; TWO-NEXT: [004]                   {Code} 'addl        $0x1, %eax'
189 ; TWO-NEXT: [004]                   {Code} 'movl        %eax, -0x8(%rbp)'
190 ; TWO-NEXT: [004]                   {Code} 'movl        -0x8(%rbp), %eax'
191 ; TWO-NEXT: [003]                 {Code} 'pushq %rbp'
192 ; TWO-NEXT: [003]                 {Code} 'movq  %rsp, %rbp'
193 ; TWO-NEXT: [003]                 {Code} 'subq  $0x10, %rsp'
194 ; TWO-NEXT: [003]                 {Code} 'movl  %edi, -0x4(%rbp)'
195 ; TWO-NEXT: [003]                 {Code} 'movl  -0x4(%rbp), %eax'
196 ; TWO-NEXT: [003]                 {Code} 'subl  (%rip), %eax'
197 ; TWO-NEXT: [003]                 {Code} 'movl  %eax, -0x8(%rbp)'
198 ; TWO-NEXT: [003]                 {Code} 'addq  $0x10, %rsp'
199 ; TWO-NEXT: [003]                 {Code} 'popq  %rbp'
200 ; TWO-NEXT: [003]                 {Code} 'retq'
201 ; TWO-NEXT: [002]    20         {Function} extern not_inlined 'main' -> 'int'
202 ; TWO-NEXT: [003]                 {Code} 'pushq %rbp'
203 ; TWO-NEXT: [003]                 {Code} 'movq  %rsp, %rbp'
204 ; TWO-NEXT: [003]                 {Code} 'movl  $0x0, -0x4(%rbp)'
205 ; TWO-NEXT: [003]                 {Code} 'xorl  %eax, %eax'
206 ; TWO-NEXT: [003]                 {Code} 'popq  %rbp'
207 ; TWO-NEXT: [003]                 {Code} 'retq'