[Reland][Runtimes] Merge 'compile_commands.json' files from runtimes build (#116303)
[llvm-project.git] / llvm / test / CodeGen / X86 / pr38795-verifier-error-pr38788.mir
blob28f0b42d26735010f3cbc3e483c2257dbbe1ea42
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2
2 # RUN: llc -mtriple=i386-unknown-linux-gnu -verify-coalescing -run-pass=register-coalescer -o - %s | FileCheck %s
4 # Make sure no verifier error is produced from coalescing the identity
5 # copy in bb.3 with live out implicit_defs. The value is live out of
6 # the block, and the incoming value is a phi def.
8 ---
9 name:            pr38795_verifier_error_reduced_1
10 tracksRegLiveness: true
11 body:             |
12   ; CHECK-LABEL: name: pr38795_verifier_error_reduced_1
13   ; CHECK: bb.0:
14   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
15   ; CHECK-NEXT:   liveins: $eax
16   ; CHECK-NEXT: {{  $}}
17   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr32 = COPY $eax
18   ; CHECK-NEXT: {{  $}}
19   ; CHECK-NEXT: bb.1:
20   ; CHECK-NEXT:   successors: %bb.3(0x40000000), %bb.2(0x40000000)
21   ; CHECK-NEXT: {{  $}}
22   ; CHECK-NEXT:   [[DEF:%[0-9]+]]:gr32 = IMPLICIT_DEF
23   ; CHECK-NEXT:   JCC_1 %bb.3, 4, implicit undef $eflags
24   ; CHECK-NEXT: {{  $}}
25   ; CHECK-NEXT: bb.2:
26   ; CHECK-NEXT:   successors: %bb.3(0x80000000)
27   ; CHECK-NEXT: {{  $}}
28   ; CHECK-NEXT:   [[MOV32r0_:%[0-9]+]]:gr32 = MOV32r0 implicit-def dead $eflags
29   ; CHECK-NEXT: {{  $}}
30   ; CHECK-NEXT: bb.3:
31   ; CHECK-NEXT:   successors: %bb.5(0x40000000), %bb.4(0x40000000)
32   ; CHECK-NEXT: {{  $}}
33   ; CHECK-NEXT:   JCC_1 %bb.5, 4, implicit undef $eflags
34   ; CHECK-NEXT: {{  $}}
35   ; CHECK-NEXT: bb.4:
36   ; CHECK-NEXT:   successors: %bb.5(0x80000000)
37   ; CHECK-NEXT: {{  $}}
38   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr32 = COPY [[MOV32r0_]]
39   ; CHECK-NEXT: {{  $}}
40   ; CHECK-NEXT: bb.5:
41   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
42   ; CHECK-NEXT: {{  $}}
43   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gr32 = COPY [[COPY]]
44   ; CHECK-NEXT:   JMP_1 %bb.1
45   bb.0:
46     liveins: $eax
47     %0:gr32 = COPY $eax
49   bb.1:
50     %1:gr32 = IMPLICIT_DEF
51     JCC_1 %bb.3, 4, implicit undef $eflags
53   bb.2:
54     %0:gr32 = MOV32r0 implicit-def dead $eflags
56   bb.3:
57     %0:gr32 = COPY %0
58     JCC_1 %bb.5, 4, implicit undef $eflags
60   bb.4:
61     %1:gr32 = COPY %0
63   bb.5:
64     %0:gr32 = COPY killed %1
65     JMP_1 %bb.1
67 ...
69 # Check for "Instruction ending live segment doesn't read the
70 # register" verifier error after coalescing
71 # This still failed with a similar error after a preliminary fix was
72 # attempted for pr38795_verifier_error_reduced_1
74 ---
75 name:            pr38795_verifier_error_reduced_2
76 tracksRegLiveness: true
77 body:             |
78   ; CHECK-LABEL: name: pr38795_verifier_error_reduced_2
79   ; CHECK: bb.0:
80   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
81   ; CHECK-NEXT: {{  $}}
82   ; CHECK-NEXT:   [[DEF:%[0-9]+]]:gr32 = IMPLICIT_DEF
83   ; CHECK-NEXT: {{  $}}
84   ; CHECK-NEXT: bb.1:
85   ; CHECK-NEXT:   successors: %bb.3(0x40000000), %bb.2(0x40000000)
86   ; CHECK-NEXT: {{  $}}
87   ; CHECK-NEXT:   [[DEF1:%[0-9]+]]:gr32 = IMPLICIT_DEF
88   ; CHECK-NEXT:   JCC_1 %bb.3, 4, implicit killed undef $eflags
89   ; CHECK-NEXT: {{  $}}
90   ; CHECK-NEXT: bb.2:
91   ; CHECK-NEXT:   successors: %bb.9(0x80000000)
92   ; CHECK-NEXT: {{  $}}
93   ; CHECK-NEXT:   JMP_1 %bb.9
94   ; CHECK-NEXT: {{  $}}
95   ; CHECK-NEXT: bb.3:
96   ; CHECK-NEXT:   successors: %bb.5(0x40000000), %bb.4(0x40000000)
97   ; CHECK-NEXT: {{  $}}
98   ; CHECK-NEXT:   JCC_1 %bb.5, 5, implicit killed undef $eflags
99   ; CHECK-NEXT: {{  $}}
100   ; CHECK-NEXT: bb.4:
101   ; CHECK-NEXT:   successors: %bb.6(0x80000000)
102   ; CHECK-NEXT: {{  $}}
103   ; CHECK-NEXT:   [[MOV32r0_:%[0-9]+]]:gr32 = MOV32r0 implicit-def dead $eflags
104   ; CHECK-NEXT:   JMP_1 %bb.6
105   ; CHECK-NEXT: {{  $}}
106   ; CHECK-NEXT: bb.5:
107   ; CHECK-NEXT:   successors: %bb.9(0x80000000)
108   ; CHECK-NEXT: {{  $}}
109   ; CHECK-NEXT:   [[DEF1:%[0-9]+]]:gr32 = IMPLICIT_DEF
110   ; CHECK-NEXT:   JMP_1 %bb.9
111   ; CHECK-NEXT: {{  $}}
112   ; CHECK-NEXT: bb.6:
113   ; CHECK-NEXT:   successors: %bb.8(0x40000000), %bb.7(0x40000000)
114   ; CHECK-NEXT: {{  $}}
115   ; CHECK-NEXT:   JCC_1 %bb.8, 4, implicit killed undef $eflags
116   ; CHECK-NEXT: {{  $}}
117   ; CHECK-NEXT: bb.7:
118   ; CHECK-NEXT:   successors: %bb.8(0x80000000)
119   ; CHECK-NEXT: {{  $}}
120   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr32 = COPY [[DEF1]]
121   ; CHECK-NEXT: {{  $}}
122   ; CHECK-NEXT: bb.8:
123   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
124   ; CHECK-NEXT: {{  $}}
125   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gr32 = COPY [[COPY]]
126   ; CHECK-NEXT:   JMP_1 %bb.1
127   ; CHECK-NEXT: {{  $}}
128   ; CHECK-NEXT: bb.9:
129   ; CHECK-NEXT:   successors: %bb.6(0x80000000)
130   ; CHECK-NEXT: {{  $}}
131   ; CHECK-NEXT:   JMP_1 %bb.6
132   bb.0:
133     %0:gr32 = IMPLICIT_DEF
135   bb.1:
136     %1:gr32 = IMPLICIT_DEF
137     JCC_1 %bb.3, 4, implicit killed undef $eflags
139   bb.2:
140     %2:gr32 = COPY killed %0
141     JMP_1 %bb.9
143   bb.3:
144     JCC_1 %bb.5, 5, implicit killed undef $eflags
146   bb.4:
147     %3:gr32 = MOV32r0 implicit-def dead $eflags
148     JMP_1 %bb.6
150   bb.5:
151     %2:gr32 = IMPLICIT_DEF
152     JMP_1 %bb.9
154   bb.6:
155     JCC_1 %bb.8, 4, implicit killed undef $eflags
157   bb.7:
158     %1:gr32 = COPY killed %3
160   bb.8:
161     %4:gr32 = COPY killed %1
162     %0:gr32 = COPY killed %4
163     JMP_1 %bb.1
165   bb.9:
166     %3:gr32 = COPY killed %2
167     JMP_1 %bb.6
171 # Still failed after patch for first 2 failures
174 name:            pr38795_verifier_error_reduced_3
175 tracksRegLiveness: true
176 body:             |
177   ; CHECK-LABEL: name: pr38795_verifier_error_reduced_3
178   ; CHECK: bb.0:
179   ; CHECK-NEXT:   successors: %bb.5(0x40000000), %bb.1(0x40000000)
180   ; CHECK-NEXT: {{  $}}
181   ; CHECK-NEXT:   [[DEF:%[0-9]+]]:gr32 = IMPLICIT_DEF
182   ; CHECK-NEXT:   [[DEF1:%[0-9]+]]:gr32 = IMPLICIT_DEF
183   ; CHECK-NEXT:   JCC_1 %bb.5, 4, implicit killed undef $eflags
184   ; CHECK-NEXT: {{  $}}
185   ; CHECK-NEXT: bb.1:
186   ; CHECK-NEXT:   successors: %bb.4(0x40000000), %bb.5(0x40000000)
187   ; CHECK-NEXT: {{  $}}
188   ; CHECK-NEXT:   [[DEF2:%[0-9]+]]:gr32 = IMPLICIT_DEF
189   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr32 = COPY [[DEF]]
190   ; CHECK-NEXT:   [[MOV32r0_:%[0-9]+]]:gr32 = MOV32r0 implicit-def dead $eflags
191   ; CHECK-NEXT:   JCC_1 %bb.4, 5, implicit killed undef $eflags
192   ; CHECK-NEXT:   JMP_1 %bb.5
193   ; CHECK-NEXT: {{  $}}
194   ; CHECK-NEXT: bb.2:
195   ; CHECK-NEXT:   successors: %bb.4(0x40000000), %bb.3(0x40000000)
196   ; CHECK-NEXT: {{  $}}
197   ; CHECK-NEXT:   TEST32rr undef [[COPY]], [[COPY]], implicit-def $eflags
198   ; CHECK-NEXT:   [[DEF1:%[0-9]+]]:gr32 = IMPLICIT_DEF
199   ; CHECK-NEXT:   JCC_1 %bb.4, 4, implicit killed undef $eflags
200   ; CHECK-NEXT: {{  $}}
201   ; CHECK-NEXT: bb.3:
202   ; CHECK-NEXT:   successors: %bb.4(0x80000000)
203   ; CHECK-NEXT: {{  $}}
204   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gr32 = COPY [[MOV32r0_]]
205   ; CHECK-NEXT: {{  $}}
206   ; CHECK-NEXT: bb.4:
207   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
208   ; CHECK-NEXT: {{  $}}
209   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gr32 = COPY [[COPY1]]
210   ; CHECK-NEXT:   JMP_1 %bb.1
211   ; CHECK-NEXT: {{  $}}
212   ; CHECK-NEXT: bb.5:
213   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
214   ; CHECK-NEXT: {{  $}}
215   ; CHECK-NEXT:   JMP_1 %bb.2
216   bb.0:
217     %0:gr32 = IMPLICIT_DEF
218     %1:gr32 = IMPLICIT_DEF
219     JCC_1 %bb.5, 4, implicit killed undef $eflags
221   bb.1:
222     %2:gr32 = IMPLICIT_DEF
223     %1:gr32 = COPY killed %0
224     %0:gr32 = MOV32r0 implicit-def dead $eflags
225     JCC_1 %bb.4, 5, implicit killed undef $eflags
226     JMP_1 %bb.5
228   bb.2:
229     TEST32rr undef %1, %1, implicit-def $eflags
230     %2:gr32 = IMPLICIT_DEF
231     JCC_1 %bb.4, 4, implicit killed undef $eflags
233   bb.3:
234     %2:gr32 = COPY killed %0
236   bb.4:
237     %0:gr32 = COPY killed %2
238     JMP_1 %bb.1
240   bb.5:
241     JMP_1 %bb.2