1
1
# RUN: llc -run-pass x86-flags-copy-lowering -mattr=+ndd -verify-machineinstrs -o - %s | FileCheck %s
2
2
# Lower various interesting copy patterns of EFLAGS without using LAHF/SAHF.
3
3
4
- --- |
5
- target triple = "x86_64-unknown-unknown"
6
-
7
- declare void @foo()
8
-
9
- define void @test_adc(i64 %a, i64 %b) {
10
- entry :
11
- call void @foo()
12
- ret void
13
- }
14
-
15
- define void @test_sbb(i64 %a, i64 %b) {
16
- entry :
17
- call void @foo()
18
- ret void
19
- }
20
-
21
- define void @test_rcl(i64 %a, i64 %b) {
22
- entry :
23
- call void @foo()
24
- ret void
25
- }
26
-
27
- define void @test_rcr(i64 %a, i64 %b) {
28
- entry :
29
- call void @foo()
30
- ret void
31
- }
32
-
33
- define void @test_cmov(i64 %a, i64 %b) {
34
- entry :
35
- call void @foo()
36
- ret void
37
- }
38
-
39
- define void @test_cfcmov(i64 %a, i64 %b) {
40
- entry :
41
- call void @foo()
42
- ret void
43
- }
44
4
...
45
5
---
46
6
name : test_adc
47
7
# CHECK-LABEL: name: test_adc
48
- liveins :
49
- - { reg: '$rdi', virtual-reg: '%0' }
50
- - { reg: '$rsi', virtual-reg: '%1' }
51
8
body : |
52
9
bb.0:
53
10
liveins: $rdi, $rsi
@@ -60,9 +17,7 @@ body: |
60
17
; CHECK: %[[CF_REG:[^:]*]]:gr8 = SETCCr 2, implicit $eflags
61
18
; CHECK-NOT: COPY{{( killed)?}} $eflags
62
19
63
- ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
64
- CALL64pcrel32 @foo, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit-def $rsp, implicit-def $ssp, implicit-def $eax
65
- ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
20
+ INLINEASM &nop, 1, 12, implicit-def dead $eflags
66
21
67
22
$eflags = COPY %3
68
23
%4:gr64 = ADC64ri32_ND %2:gr64, 42, implicit-def $eflags, implicit $eflags
@@ -79,9 +34,6 @@ body: |
79
34
---
80
35
name : test_sbb
81
36
# CHECK-LABEL: name: test_sbb
82
- liveins :
83
- - { reg: '$rdi', virtual-reg: '%0' }
84
- - { reg: '$rsi', virtual-reg: '%1' }
85
37
body : |
86
38
bb.0:
87
39
liveins: $rdi, $rsi
@@ -94,9 +46,7 @@ body: |
94
46
; CHECK: %[[CF_REG:[^:]*]]:gr8 = SETCCr 2, implicit $eflags
95
47
; CHECK-NOT: COPY{{( killed)?}} $eflags
96
48
97
- ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
98
- CALL64pcrel32 @foo, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit-def $rsp, implicit-def $ssp, implicit-def $eax
99
- ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
49
+ INLINEASM &nop, 1, 12, implicit-def dead $eflags
100
50
101
51
$eflags = COPY %3
102
52
%4:gr64 = SBB64ri32_ND %2:gr64, 42, implicit-def $eflags, implicit killed $eflags
@@ -113,9 +63,6 @@ body: |
113
63
---
114
64
name : test_rcl
115
65
# CHECK-LABEL: name: test_rcl
116
- liveins :
117
- - { reg: '$rdi', virtual-reg: '%0' }
118
- - { reg: '$rsi', virtual-reg: '%1' }
119
66
body : |
120
67
bb.0:
121
68
liveins: $rdi, $rsi
@@ -128,9 +75,7 @@ body: |
128
75
; CHECK: %[[CF_REG:[^:]*]]:gr8 = SETCCr 2, implicit $eflags
129
76
; CHECK-NOT: COPY{{( killed)?}} $eflags
130
77
131
- ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
132
- CALL64pcrel32 @foo, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit-def $rsp, implicit-def $ssp, implicit-def $eax
133
- ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
78
+ INLINEASM &nop, 1, 12, implicit-def dead $eflags
134
79
135
80
$eflags = COPY %3
136
81
%4:gr64 = RCL64r1_ND %2:gr64, implicit-def $eflags, implicit $eflags
@@ -147,9 +92,6 @@ body: |
147
92
---
148
93
name : test_rcr
149
94
# CHECK-LABEL: name: test_rcr
150
- liveins :
151
- - { reg: '$rdi', virtual-reg: '%0' }
152
- - { reg: '$rsi', virtual-reg: '%1' }
153
95
body : |
154
96
bb.0:
155
97
liveins: $rdi, $rsi
@@ -162,9 +104,7 @@ body: |
162
104
; CHECK: %[[CF_REG:[^:]*]]:gr8 = SETCCr 2, implicit $eflags
163
105
; CHECK-NOT: COPY{{( killed)?}} $eflags
164
106
165
- ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
166
- CALL64pcrel32 @foo, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit-def $rsp, implicit-def $ssp, implicit-def $eax
167
- ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
107
+ INLINEASM &nop, 1, 12, implicit-def dead $eflags
168
108
169
109
$eflags = COPY %3
170
110
%4:gr64 = RCR64r1_ND %2:gr64, implicit-def $eflags, implicit $eflags
@@ -181,9 +121,6 @@ body: |
181
121
---
182
122
name : test_cmov
183
123
# CHECK-LABEL: name: test_cmov
184
- liveins :
185
- - { reg: '$rdi', virtual-reg: '%0' }
186
- - { reg: '$rsi', virtual-reg: '%1' }
187
124
body : |
188
125
bb.0:
189
126
liveins: $rdi, $rsi
@@ -198,9 +135,7 @@ body: |
198
135
; CHECK-NEXT: %[[E_REG:[^:]*]]:gr8 = SETCCr 4, implicit $eflags
199
136
; CHECK-NOT: COPY{{( killed)?}} $eflags
200
137
201
- ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
202
- CALL64pcrel32 @foo, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit-def $rsp, implicit-def $ssp, implicit-def $eax
203
- ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
138
+ INLINEASM &nop, 1, 12, implicit-def dead $eflags
204
139
205
140
$eflags = COPY %2
206
141
%3:gr64 = CMOV64rr_ND %0, %1, 7, implicit $eflags
@@ -226,9 +161,6 @@ body: |
226
161
---
227
162
name : test_cfcmov
228
163
# CHECK-LABEL: name: test_cfcmov
229
- liveins :
230
- - { reg: '$rdi', virtual-reg: '%0' }
231
- - { reg: '$rsi', virtual-reg: '%1' }
232
164
body : |
233
165
bb.0:
234
166
liveins: $rdi, $rsi
@@ -243,9 +175,7 @@ body: |
243
175
; CHECK-NEXT: %[[E_REG:[^:]*]]:gr8 = SETCCr 4, implicit $eflags
244
176
; CHECK-NOT: COPY{{( killed)?}} $eflags
245
177
246
- ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
247
- CALL64pcrel32 @foo, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit-def $rsp, implicit-def $ssp, implicit-def $eax
248
- ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
178
+ INLINEASM &nop, 1, 12, implicit-def dead $eflags
249
179
250
180
$eflags = COPY %2
251
181
%3:gr64 = CFCMOV64rr %1, 7, implicit $eflags
0 commit comments