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
2
3
# Lower various interesting copy patterns of EFLAGS without using LAHF/SAHF.
3
4
4
5
...
5
6
---
6
7
name : test_adc
7
- # CHECK-LABEL: name: test_adc
8
8
body : |
9
9
bb.0:
10
10
liveins: $rdi, $rsi
11
11
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
12
25
%0:gr64 = COPY $rdi
13
26
%1:gr64 = COPY $rsi
14
27
%2:gr64 = ADD64rr_ND %0, %1, implicit-def $eflags
15
28
%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
19
29
20
30
INLINEASM &nop, 1, 12, implicit-def dead $eflags
21
31
22
32
$eflags = COPY %3
23
33
%4:gr64 = ADC64ri32_ND %2:gr64, 42, implicit-def $eflags, implicit $eflags
24
34
%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
29
35
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %5
30
36
31
37
RET 0
32
38
33
39
...
34
40
---
35
41
name : test_sbb
36
- # CHECK-LABEL: name: test_sbb
37
42
body : |
38
43
bb.0:
39
44
liveins: $rdi, $rsi
40
45
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
41
59
%0:gr64 = COPY $rdi
42
60
%1:gr64 = COPY $rsi
43
61
%2:gr64 = SUB64rr_ND %0, %1, implicit-def $eflags
44
62
%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
48
63
49
64
INLINEASM &nop, 1, 12, implicit-def dead $eflags
50
65
51
66
$eflags = COPY %3
52
67
%4:gr64 = SBB64ri32_ND %2:gr64, 42, implicit-def $eflags, implicit killed $eflags
53
68
%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
58
69
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %5
59
70
60
71
RET 0
61
72
62
73
...
63
74
---
64
75
name : test_rcl
65
- # CHECK-LABEL: name: test_rcl
66
76
body : |
67
77
bb.0:
68
78
liveins: $rdi, $rsi
69
79
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
70
93
%0:gr64 = COPY $rdi
71
94
%1:gr64 = COPY $rsi
72
95
%2:gr64 = ADD64rr_ND %0, %1, implicit-def $eflags
73
96
%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
77
97
78
98
INLINEASM &nop, 1, 12, implicit-def dead $eflags
79
99
80
100
$eflags = COPY %3
81
101
%4:gr64 = RCL64r1_ND %2:gr64, implicit-def $eflags, implicit $eflags
82
102
%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
87
103
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %5
88
104
89
105
RET 0
90
106
91
107
...
92
108
---
93
109
name : test_rcr
94
- # CHECK-LABEL: name: test_rcr
95
110
body : |
96
111
bb.0:
97
112
liveins: $rdi, $rsi
98
113
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
99
127
%0:gr64 = COPY $rdi
100
128
%1:gr64 = COPY $rsi
101
129
%2:gr64 = ADD64rr_ND %0, %1, implicit-def $eflags
102
130
%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
106
131
107
132
INLINEASM &nop, 1, 12, implicit-def dead $eflags
108
133
109
134
$eflags = COPY %3
110
135
%4:gr64 = RCR64r1_ND %2:gr64, implicit-def $eflags, implicit $eflags
111
136
%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
116
137
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %5
117
138
118
139
RET 0
119
140
120
141
...
121
142
---
122
143
name : test_cmov
123
- # CHECK-LABEL: name: test_cmov
124
144
body : |
125
145
bb.0:
126
146
liveins: $rdi, $rsi
127
147
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
128
171
%0:gr64 = COPY $rdi
129
172
%1:gr64 = COPY $rsi
130
173
CMP64rr %0, %1, implicit-def $eflags
131
174
%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
137
175
138
176
INLINEASM &nop, 1, 12, implicit-def dead $eflags
139
177
@@ -142,15 +180,6 @@ body: |
142
180
%4:gr64 = CMOV64rr_ND %0, %1, 2, implicit $eflags
143
181
%5:gr64 = CMOV64rr_ND %0, %1, 4, implicit $eflags
144
182
%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
154
183
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %3
155
184
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %4
156
185
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %5
@@ -160,20 +189,37 @@ body: |
160
189
...
161
190
---
162
191
name : test_cfcmov
163
- # CHECK-LABEL: name: test_cfcmov
164
192
body : |
165
193
bb.0:
166
194
liveins: $rdi, $rsi
167
195
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
168
219
%0:gr64 = COPY $rdi
169
220
%1:gr64 = COPY $rsi
170
221
CMP64rr %0, %1, implicit-def $eflags
171
222
%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
177
223
178
224
INLINEASM &nop, 1, 12, implicit-def dead $eflags
179
225
@@ -182,19 +228,56 @@ body: |
182
228
%4:gr64 = CFCMOV64rr %1, 2, implicit $eflags
183
229
%5:gr64 = CFCMOV64rr_ND %0, %1, 4, implicit $eflags
184
230
%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
194
231
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %3
195
232
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %4
196
233
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %5
197
234
MOV64mr $rsp, 1, $noreg, -16, $noreg, killed %6
198
235
199
236
RET 0
200
237
...
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