Skip to content

Commit 698058f

Browse files
committed
[X86][test] Update tests for flag copy lowering, NFCI
1. Merge apx/ccmp-flags-copy-lowering.mir into apx/flags-copy-lowering.mir 2. Update check lines for flags-copy-lowering.mir by script This is for the coming NF (no flags update) support in flag copy lowering.
1 parent 2b21c68 commit 698058f

File tree

3 files changed

+563
-381
lines changed

3 files changed

+563
-381
lines changed

llvm/test/CodeGen/X86/apx/ccmp-flags-copy-lowering.mir

Lines changed: 0 additions & 51 deletions
This file was deleted.
Lines changed: 146 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,139 +1,177 @@
1-
# RUN: llc -run-pass x86-flags-copy-lowering -mattr=+ndd -verify-machineinstrs -o - %s | FileCheck %s
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
2+
# RUN: llc -mtriple=x86_64 -run-pass x86-flags-copy-lowering -mattr=+ndd -verify-machineinstrs -o - %s | FileCheck %s
23
# Lower various interesting copy patterns of EFLAGS without using LAHF/SAHF.
34

45
...
56
---
67
name: test_adc
7-
# CHECK-LABEL: name: test_adc
88
body: |
99
bb.0:
1010
liveins: $rdi, $rsi
1111
12+
; CHECK-LABEL: name: test_adc
13+
; CHECK: liveins: $rdi, $rsi
14+
; CHECK-NEXT: {{ $}}
15+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
16+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rsi
17+
; CHECK-NEXT: [[ADD64rr_ND:%[0-9]+]]:gr64 = ADD64rr_ND [[COPY]], [[COPY1]], implicit-def $eflags
18+
; CHECK-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 2, implicit $eflags
19+
; CHECK-NEXT: INLINEASM &nop, 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def dead $eflags
20+
; CHECK-NEXT: dead [[ADD8ri_ND:%[0-9]+]]:gr8 = ADD8ri_ND [[SETCCr]], 255, implicit-def $eflags
21+
; CHECK-NEXT: [[ADC64ri32_ND:%[0-9]+]]:gr64 = ADC64ri32_ND [[ADD64rr_ND]], 42, implicit-def $eflags, implicit killed $eflags
22+
; CHECK-NEXT: [[ADC64ri32_ND1:%[0-9]+]]:gr64 = ADC64ri32_ND [[ADC64ri32_ND]], 42, implicit-def $eflags, implicit $eflags
23+
; CHECK-NEXT: MOV64mr $rsp, 1, $noreg, -16, $noreg, killed [[ADC64ri32_ND1]]
24+
; CHECK-NEXT: RET 0
1225
%0:gr64 = COPY $rdi
1326
%1:gr64 = COPY $rsi
1427
%2:gr64 = ADD64rr_ND %0, %1, implicit-def $eflags
1528
%3:gr64 = COPY $eflags
16-
; CHECK-NOT: COPY{{( killed)?}} $eflags
17-
; CHECK: %[[CF_REG:[^:]*]]:gr8 = SETCCr 2, implicit $eflags
18-
; CHECK-NOT: COPY{{( killed)?}} $eflags
1929
2030
INLINEASM &nop, 1, 12, implicit-def dead $eflags
2131
2232
$eflags = COPY %3
2333
%4:gr64 = ADC64ri32_ND %2:gr64, 42, implicit-def $eflags, implicit $eflags
2434
%5:gr64 = ADC64ri32_ND %4:gr64, 42, implicit-def $eflags, implicit $eflags
25-
; CHECK-NOT: $eflags =
26-
; CHECK: dead %{{[^:]*}}:gr8 = ADD8ri_ND %[[CF_REG]], 255, implicit-def $eflags
27-
; CHECK-NEXT: %4:gr64 = ADC64ri32_ND %2, 42, implicit-def $eflags, implicit killed $eflags
28-
; CHECK-NEXT: %5:gr64 = ADC64ri32_ND %4, 42, implicit-def{{( dead)?}} $eflags, implicit{{( killed)?}} $eflags
2935
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %5
3036
3137
RET 0
3238
3339
...
3440
---
3541
name: test_sbb
36-
# CHECK-LABEL: name: test_sbb
3742
body: |
3843
bb.0:
3944
liveins: $rdi, $rsi
4045
46+
; CHECK-LABEL: name: test_sbb
47+
; CHECK: liveins: $rdi, $rsi
48+
; CHECK-NEXT: {{ $}}
49+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
50+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rsi
51+
; CHECK-NEXT: [[SUB64rr_ND:%[0-9]+]]:gr64 = SUB64rr_ND [[COPY]], [[COPY1]], implicit-def $eflags
52+
; CHECK-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 2, implicit $eflags
53+
; CHECK-NEXT: INLINEASM &nop, 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def dead $eflags
54+
; CHECK-NEXT: dead [[ADD8ri_ND:%[0-9]+]]:gr8 = ADD8ri_ND [[SETCCr]], 255, implicit-def $eflags
55+
; CHECK-NEXT: [[SBB64ri32_ND:%[0-9]+]]:gr64 = SBB64ri32_ND [[SUB64rr_ND]], 42, implicit-def $eflags, implicit killed $eflags
56+
; CHECK-NEXT: [[SBB64ri32_ND1:%[0-9]+]]:gr64 = SBB64ri32_ND [[SBB64ri32_ND]], 42, implicit-def dead $eflags, implicit killed $eflags
57+
; CHECK-NEXT: MOV64mr $rsp, 1, $noreg, -16, $noreg, killed [[SBB64ri32_ND1]]
58+
; CHECK-NEXT: RET 0
4159
%0:gr64 = COPY $rdi
4260
%1:gr64 = COPY $rsi
4361
%2:gr64 = SUB64rr_ND %0, %1, implicit-def $eflags
4462
%3:gr64 = COPY killed $eflags
45-
; CHECK-NOT: COPY{{( killed)?}} $eflags
46-
; CHECK: %[[CF_REG:[^:]*]]:gr8 = SETCCr 2, implicit $eflags
47-
; CHECK-NOT: COPY{{( killed)?}} $eflags
4863
4964
INLINEASM &nop, 1, 12, implicit-def dead $eflags
5065
5166
$eflags = COPY %3
5267
%4:gr64 = SBB64ri32_ND %2:gr64, 42, implicit-def $eflags, implicit killed $eflags
5368
%5:gr64 = SBB64ri32_ND %4:gr64, 42, implicit-def dead $eflags, implicit killed $eflags
54-
; CHECK-NOT: $eflags =
55-
; CHECK: dead %{{[^:]*}}:gr8 = ADD8ri_ND %[[CF_REG]], 255, implicit-def $eflags
56-
; CHECK-NEXT: %4:gr64 = SBB64ri32_ND %2, 42, implicit-def $eflags, implicit killed $eflags
57-
; CHECK-NEXT: %5:gr64 = SBB64ri32_ND %4, 42, implicit-def{{( dead)?}} $eflags, implicit{{( killed)?}} $eflags
5869
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %5
5970
6071
RET 0
6172
6273
...
6374
---
6475
name: test_rcl
65-
# CHECK-LABEL: name: test_rcl
6676
body: |
6777
bb.0:
6878
liveins: $rdi, $rsi
6979
80+
; CHECK-LABEL: name: test_rcl
81+
; CHECK: liveins: $rdi, $rsi
82+
; CHECK-NEXT: {{ $}}
83+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
84+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rsi
85+
; CHECK-NEXT: [[ADD64rr_ND:%[0-9]+]]:gr64 = ADD64rr_ND [[COPY]], [[COPY1]], implicit-def $eflags
86+
; CHECK-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 2, implicit $eflags
87+
; CHECK-NEXT: INLINEASM &nop, 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def dead $eflags
88+
; CHECK-NEXT: dead [[ADD8ri_ND:%[0-9]+]]:gr8 = ADD8ri_ND [[SETCCr]], 255, implicit-def $eflags
89+
; CHECK-NEXT: [[RCL64r1_ND:%[0-9]+]]:gr64 = RCL64r1_ND [[ADD64rr_ND]], implicit-def $eflags, implicit killed $eflags
90+
; CHECK-NEXT: [[RCL64r1_ND1:%[0-9]+]]:gr64 = RCL64r1_ND [[RCL64r1_ND]], implicit-def $eflags, implicit $eflags
91+
; CHECK-NEXT: MOV64mr $rsp, 1, $noreg, -16, $noreg, killed [[RCL64r1_ND1]]
92+
; CHECK-NEXT: RET 0
7093
%0:gr64 = COPY $rdi
7194
%1:gr64 = COPY $rsi
7295
%2:gr64 = ADD64rr_ND %0, %1, implicit-def $eflags
7396
%3:gr64 = COPY $eflags
74-
; CHECK-NOT: COPY{{( killed)?}} $eflags
75-
; CHECK: %[[CF_REG:[^:]*]]:gr8 = SETCCr 2, implicit $eflags
76-
; CHECK-NOT: COPY{{( killed)?}} $eflags
7797
7898
INLINEASM &nop, 1, 12, implicit-def dead $eflags
7999
80100
$eflags = COPY %3
81101
%4:gr64 = RCL64r1_ND %2:gr64, implicit-def $eflags, implicit $eflags
82102
%5:gr64 = RCL64r1_ND %4:gr64, implicit-def $eflags, implicit $eflags
83-
; CHECK-NOT: $eflags =
84-
; CHECK: dead %{{[^:]*}}:gr8 = ADD8ri_ND %[[CF_REG]], 255, implicit-def $eflags
85-
; CHECK-NEXT: %4:gr64 = RCL64r1_ND %2, implicit-def $eflags, implicit killed $eflags
86-
; CHECK-NEXT: %5:gr64 = RCL64r1_ND %4, implicit-def{{( dead)?}} $eflags, implicit{{( killed)?}} $eflags
87103
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %5
88104
89105
RET 0
90106
91107
...
92108
---
93109
name: test_rcr
94-
# CHECK-LABEL: name: test_rcr
95110
body: |
96111
bb.0:
97112
liveins: $rdi, $rsi
98113
114+
; CHECK-LABEL: name: test_rcr
115+
; CHECK: liveins: $rdi, $rsi
116+
; CHECK-NEXT: {{ $}}
117+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
118+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rsi
119+
; CHECK-NEXT: [[ADD64rr_ND:%[0-9]+]]:gr64 = ADD64rr_ND [[COPY]], [[COPY1]], implicit-def $eflags
120+
; CHECK-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 2, implicit $eflags
121+
; CHECK-NEXT: INLINEASM &nop, 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def dead $eflags
122+
; CHECK-NEXT: dead [[ADD8ri_ND:%[0-9]+]]:gr8 = ADD8ri_ND [[SETCCr]], 255, implicit-def $eflags
123+
; CHECK-NEXT: [[RCR64r1_ND:%[0-9]+]]:gr64 = RCR64r1_ND [[ADD64rr_ND]], implicit-def $eflags, implicit killed $eflags
124+
; CHECK-NEXT: [[RCR64r1_ND1:%[0-9]+]]:gr64 = RCR64r1_ND [[RCR64r1_ND]], implicit-def $eflags, implicit $eflags
125+
; CHECK-NEXT: MOV64mr $rsp, 1, $noreg, -16, $noreg, killed [[RCR64r1_ND1]]
126+
; CHECK-NEXT: RET 0
99127
%0:gr64 = COPY $rdi
100128
%1:gr64 = COPY $rsi
101129
%2:gr64 = ADD64rr_ND %0, %1, implicit-def $eflags
102130
%3:gr64 = COPY $eflags
103-
; CHECK-NOT: COPY{{( killed)?}} $eflags
104-
; CHECK: %[[CF_REG:[^:]*]]:gr8 = SETCCr 2, implicit $eflags
105-
; CHECK-NOT: COPY{{( killed)?}} $eflags
106131
107132
INLINEASM &nop, 1, 12, implicit-def dead $eflags
108133
109134
$eflags = COPY %3
110135
%4:gr64 = RCR64r1_ND %2:gr64, implicit-def $eflags, implicit $eflags
111136
%5:gr64 = RCR64r1_ND %4:gr64, implicit-def $eflags, implicit $eflags
112-
; CHECK-NOT: $eflags =
113-
; CHECK: dead %{{[^:]*}}:gr8 = ADD8ri_ND %[[CF_REG]], 255, implicit-def $eflags
114-
; CHECK-NEXT: %4:gr64 = RCR64r1_ND %2, implicit-def $eflags, implicit killed $eflags
115-
; CHECK-NEXT: %5:gr64 = RCR64r1_ND %4, implicit-def{{( dead)?}} $eflags, implicit{{( killed)?}} $eflags
116137
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %5
117138
118139
RET 0
119140
120141
...
121142
---
122143
name: test_cmov
123-
# CHECK-LABEL: name: test_cmov
124144
body: |
125145
bb.0:
126146
liveins: $rdi, $rsi
127147
148+
; CHECK-LABEL: name: test_cmov
149+
; CHECK: liveins: $rdi, $rsi
150+
; CHECK-NEXT: {{ $}}
151+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
152+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rsi
153+
; CHECK-NEXT: CMP64rr [[COPY]], [[COPY1]], implicit-def $eflags
154+
; CHECK-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 7, implicit $eflags
155+
; CHECK-NEXT: [[SETCCr1:%[0-9]+]]:gr8 = SETCCr 2, implicit $eflags
156+
; CHECK-NEXT: [[SETCCr2:%[0-9]+]]:gr8 = SETCCr 4, implicit $eflags
157+
; CHECK-NEXT: INLINEASM &nop, 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def dead $eflags
158+
; CHECK-NEXT: TEST8rr [[SETCCr]], [[SETCCr]], implicit-def $eflags
159+
; CHECK-NEXT: [[CMOV64rr_ND:%[0-9]+]]:gr64 = CMOV64rr_ND [[COPY]], [[COPY1]], 5, implicit killed $eflags
160+
; CHECK-NEXT: TEST8rr [[SETCCr1]], [[SETCCr1]], implicit-def $eflags
161+
; CHECK-NEXT: [[CMOV64rr_ND1:%[0-9]+]]:gr64 = CMOV64rr_ND [[COPY]], [[COPY1]], 5, implicit killed $eflags
162+
; CHECK-NEXT: TEST8rr [[SETCCr2]], [[SETCCr2]], implicit-def $eflags
163+
; CHECK-NEXT: [[CMOV64rr_ND2:%[0-9]+]]:gr64 = CMOV64rr_ND [[COPY]], [[COPY1]], 5, implicit killed $eflags
164+
; CHECK-NEXT: TEST8rr [[SETCCr2]], [[SETCCr2]], implicit-def $eflags
165+
; CHECK-NEXT: [[CMOV64rr_ND3:%[0-9]+]]:gr64 = CMOV64rr_ND [[COPY]], [[COPY1]], 4, implicit killed $eflags
166+
; CHECK-NEXT: MOV64mr $rsp, 1, $noreg, -16, $noreg, killed [[CMOV64rr_ND]]
167+
; CHECK-NEXT: MOV64mr $rsp, 1, $noreg, -16, $noreg, killed [[CMOV64rr_ND1]]
168+
; CHECK-NEXT: MOV64mr $rsp, 1, $noreg, -16, $noreg, killed [[CMOV64rr_ND2]]
169+
; CHECK-NEXT: MOV64mr $rsp, 1, $noreg, -16, $noreg, killed [[CMOV64rr_ND3]]
170+
; CHECK-NEXT: RET 0
128171
%0:gr64 = COPY $rdi
129172
%1:gr64 = COPY $rsi
130173
CMP64rr %0, %1, implicit-def $eflags
131174
%2:gr64 = COPY $eflags
132-
; CHECK-NOT: COPY{{( killed)?}} $eflags
133-
; CHECK: %[[A_REG:[^:]*]]:gr8 = SETCCr 7, implicit $eflags
134-
; CHECK-NEXT: %[[B_REG:[^:]*]]:gr8 = SETCCr 2, implicit $eflags
135-
; CHECK-NEXT: %[[E_REG:[^:]*]]:gr8 = SETCCr 4, implicit $eflags
136-
; CHECK-NOT: COPY{{( killed)?}} $eflags
137175
138176
INLINEASM &nop, 1, 12, implicit-def dead $eflags
139177
@@ -142,15 +180,6 @@ body: |
142180
%4:gr64 = CMOV64rr_ND %0, %1, 2, implicit $eflags
143181
%5:gr64 = CMOV64rr_ND %0, %1, 4, implicit $eflags
144182
%6:gr64 = CMOV64rr_ND %0, %1, 5, implicit killed $eflags
145-
; CHECK-NOT: $eflags =
146-
; CHECK: TEST8rr %[[A_REG]], %[[A_REG]], implicit-def $eflags
147-
; CHECK-NEXT: %3:gr64 = CMOV64rr_ND %0, %1, 5, implicit killed $eflags
148-
; CHECK-NEXT: TEST8rr %[[B_REG]], %[[B_REG]], implicit-def $eflags
149-
; CHECK-NEXT: %4:gr64 = CMOV64rr_ND %0, %1, 5, implicit killed $eflags
150-
; CHECK-NEXT: TEST8rr %[[E_REG]], %[[E_REG]], implicit-def $eflags
151-
; CHECK-NEXT: %5:gr64 = CMOV64rr_ND %0, %1, 5, implicit killed $eflags
152-
; CHECK-NEXT: TEST8rr %[[E_REG]], %[[E_REG]], implicit-def $eflags
153-
; CHECK-NEXT: %6:gr64 = CMOV64rr_ND %0, %1, 4, implicit killed $eflags
154183
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %3
155184
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %4
156185
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %5
@@ -160,20 +189,37 @@ body: |
160189
...
161190
---
162191
name: test_cfcmov
163-
# CHECK-LABEL: name: test_cfcmov
164192
body: |
165193
bb.0:
166194
liveins: $rdi, $rsi
167195
196+
; CHECK-LABEL: name: test_cfcmov
197+
; CHECK: liveins: $rdi, $rsi
198+
; CHECK-NEXT: {{ $}}
199+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
200+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rsi
201+
; CHECK-NEXT: CMP64rr [[COPY]], [[COPY1]], implicit-def $eflags
202+
; CHECK-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 7, implicit $eflags
203+
; CHECK-NEXT: [[SETCCr1:%[0-9]+]]:gr8 = SETCCr 2, implicit $eflags
204+
; CHECK-NEXT: [[SETCCr2:%[0-9]+]]:gr8 = SETCCr 4, implicit $eflags
205+
; CHECK-NEXT: INLINEASM &nop, 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def dead $eflags
206+
; CHECK-NEXT: TEST8rr [[SETCCr]], [[SETCCr]], implicit-def $eflags
207+
; CHECK-NEXT: [[CFCMOV64rr:%[0-9]+]]:gr64 = CFCMOV64rr [[COPY1]], 5, implicit killed $eflags
208+
; CHECK-NEXT: TEST8rr [[SETCCr1]], [[SETCCr1]], implicit-def $eflags
209+
; CHECK-NEXT: [[CFCMOV64rr1:%[0-9]+]]:gr64 = CFCMOV64rr [[COPY1]], 5, implicit killed $eflags
210+
; CHECK-NEXT: TEST8rr [[SETCCr2]], [[SETCCr2]], implicit-def $eflags
211+
; CHECK-NEXT: [[CFCMOV64rr_ND:%[0-9]+]]:gr64 = CFCMOV64rr_ND [[COPY]], [[COPY1]], 5, implicit killed $eflags
212+
; CHECK-NEXT: TEST8rr [[SETCCr2]], [[SETCCr2]], implicit-def $eflags
213+
; CHECK-NEXT: [[CFCMOV64rr_ND1:%[0-9]+]]:gr64 = CFCMOV64rr_ND [[COPY]], [[COPY1]], 4, implicit killed $eflags
214+
; CHECK-NEXT: MOV64mr $rsp, 1, $noreg, -16, $noreg, killed [[CFCMOV64rr]]
215+
; CHECK-NEXT: MOV64mr $rsp, 1, $noreg, -16, $noreg, killed [[CFCMOV64rr1]]
216+
; CHECK-NEXT: MOV64mr $rsp, 1, $noreg, -16, $noreg, killed [[CFCMOV64rr_ND]]
217+
; CHECK-NEXT: MOV64mr $rsp, 1, $noreg, -16, $noreg, killed [[CFCMOV64rr_ND1]]
218+
; CHECK-NEXT: RET 0
168219
%0:gr64 = COPY $rdi
169220
%1:gr64 = COPY $rsi
170221
CMP64rr %0, %1, implicit-def $eflags
171222
%2:gr64 = COPY $eflags
172-
; CHECK-NOT: COPY{{( killed)?}} $eflags
173-
; CHECK: %[[A_REG:[^:]*]]:gr8 = SETCCr 7, implicit $eflags
174-
; CHECK-NEXT: %[[B_REG:[^:]*]]:gr8 = SETCCr 2, implicit $eflags
175-
; CHECK-NEXT: %[[E_REG:[^:]*]]:gr8 = SETCCr 4, implicit $eflags
176-
; CHECK-NOT: COPY{{( killed)?}} $eflags
177223
178224
INLINEASM &nop, 1, 12, implicit-def dead $eflags
179225
@@ -182,19 +228,56 @@ body: |
182228
%4:gr64 = CFCMOV64rr %1, 2, implicit $eflags
183229
%5:gr64 = CFCMOV64rr_ND %0, %1, 4, implicit $eflags
184230
%6:gr64 = CFCMOV64rr_ND %0, %1, 5, implicit killed $eflags
185-
; CHECK-NOT: $eflags =
186-
; CHECK: TEST8rr %[[A_REG]], %[[A_REG]], implicit-def $eflags
187-
; CHECK-NEXT: %3:gr64 = CFCMOV64rr %1, 5, implicit killed $eflags
188-
; CHECK-NEXT: TEST8rr %[[B_REG]], %[[B_REG]], implicit-def $eflags
189-
; CHECK-NEXT: %4:gr64 = CFCMOV64rr %1, 5, implicit killed $eflags
190-
; CHECK-NEXT: TEST8rr %[[E_REG]], %[[E_REG]], implicit-def $eflags
191-
; CHECK-NEXT: %5:gr64 = CFCMOV64rr_ND %0, %1, 5, implicit killed $eflags
192-
; CHECK-NEXT: TEST8rr %[[E_REG]], %[[E_REG]], implicit-def $eflags
193-
; CHECK-NEXT: %6:gr64 = CFCMOV64rr_ND %0, %1, 4, implicit killed $eflags
194231
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %3
195232
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %4
196233
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %5
197234
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %6
198235
199236
RET 0
200237
...
238+
---
239+
name: test_ccmp
240+
body: |
241+
bb.0:
242+
liveins: $edi
243+
244+
; CHECK-LABEL: name: test_ccmp
245+
; CHECK: liveins: $edi
246+
; CHECK-NEXT: {{ $}}
247+
; CHECK-NEXT: MUL32r $edi, implicit-def $eax, implicit-def dead $edx, implicit-def $eflags, implicit $eax
248+
; CHECK-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 1, implicit $eflags
249+
; CHECK-NEXT: [[ADD32rr:%[0-9]+]]:gr32 = ADD32rr $edi, $edi, implicit-def dead $eflags
250+
; CHECK-NEXT: TEST8rr [[SETCCr]], [[SETCCr]], implicit-def $eflags
251+
; CHECK-NEXT: CCMP32rr [[ADD32rr]], [[ADD32rr]], 0, 5, implicit-def $eflags, implicit killed $eflags
252+
; CHECK-NEXT: RET 0, $al
253+
MUL32r $edi, implicit-def $eax, implicit-def dead $edx, implicit-def $eflags, implicit $eax
254+
%1:gr64 = COPY $eflags
255+
%2:gr32 = ADD32rr $edi, $edi, implicit-def dead $eflags
256+
$eflags = COPY %1
257+
CCMP32rr %2, %2, 0, 1, implicit-def $eflags, implicit $eflags
258+
RET 0, $al
259+
260+
...
261+
---
262+
name: test_ctest
263+
body: |
264+
bb.0:
265+
liveins: $edi
266+
267+
; CHECK-LABEL: name: test_ctest
268+
; CHECK: liveins: $edi
269+
; CHECK-NEXT: {{ $}}
270+
; CHECK-NEXT: MUL32r $edi, implicit-def $eax, implicit-def dead $edx, implicit-def $eflags, implicit $eax
271+
; CHECK-NEXT: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 1, implicit $eflags
272+
; CHECK-NEXT: [[ADD32rr:%[0-9]+]]:gr32 = ADD32rr $edi, $edi, implicit-def dead $eflags
273+
; CHECK-NEXT: TEST8rr [[SETCCr]], [[SETCCr]], implicit-def $eflags
274+
; CHECK-NEXT: CTEST32rr [[ADD32rr]], [[ADD32rr]], 0, 5, implicit-def $eflags, implicit killed $eflags
275+
; CHECK-NEXT: RET 0, $al
276+
MUL32r $edi, implicit-def $eax, implicit-def dead $edx, implicit-def $eflags, implicit $eax
277+
%1:gr64 = COPY $eflags
278+
%2:gr32 = ADD32rr $edi, $edi, implicit-def dead $eflags
279+
$eflags = COPY %1
280+
CTEST32rr %2, %2, 0, 1, implicit-def $eflags, implicit $eflags
281+
RET 0, $al
282+
283+
...

0 commit comments

Comments
 (0)