1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s
2
+ ; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s --check-prefix=CHECK --check-prefix=FASTINCDEC
3
+ ; RUN: llc < %s -mtriple=x86_64-- -mattr=slow-incdec | FileCheck %s --check-prefix=CHECK --check-prefix=SLOWINCDEC
3
4
4
5
define i32 @test_add_1_cmov_slt (i64* %p , i32 %a0 , i32 %a1 ) #0 {
5
- ; CHECK-LABEL: test_add_1_cmov_slt:
6
- ; CHECK: # BB#0: # %entry
7
- ; CHECK-NEXT: lock incq (%rdi)
8
- ; CHECK-NEXT: cmovgl %edx, %esi
9
- ; CHECK-NEXT: movl %esi, %eax
10
- ; CHECK-NEXT: retq
6
+ ; FASTINCDEC-LABEL: test_add_1_cmov_slt:
7
+ ; FASTINCDEC: # BB#0: # %entry
8
+ ; FASTINCDEC-NEXT: lock incq (%rdi)
9
+ ; FASTINCDEC-NEXT: cmovgl %edx, %esi
10
+ ; FASTINCDEC-NEXT: movl %esi, %eax
11
+ ; FASTINCDEC-NEXT: retq
12
+ ;
13
+ ; SLOWINCDEC-LABEL: test_add_1_cmov_slt:
14
+ ; SLOWINCDEC: # BB#0: # %entry
15
+ ; SLOWINCDEC-NEXT: lock addq $1, (%rdi)
16
+ ; SLOWINCDEC-NEXT: cmovgl %edx, %esi
17
+ ; SLOWINCDEC-NEXT: movl %esi, %eax
18
+ ; SLOWINCDEC-NEXT: retq
11
19
entry:
12
20
%tmp0 = atomicrmw add i64* %p , i64 1 seq_cst
13
21
%tmp1 = icmp slt i64 %tmp0 , 0
@@ -16,12 +24,19 @@ entry:
16
24
}
17
25
18
26
define i32 @test_add_1_cmov_sge (i64* %p , i32 %a0 , i32 %a1 ) #0 {
19
- ; CHECK-LABEL: test_add_1_cmov_sge:
20
- ; CHECK: # BB#0: # %entry
21
- ; CHECK-NEXT: lock incq (%rdi)
22
- ; CHECK-NEXT: cmovlel %edx, %esi
23
- ; CHECK-NEXT: movl %esi, %eax
24
- ; CHECK-NEXT: retq
27
+ ; FASTINCDEC-LABEL: test_add_1_cmov_sge:
28
+ ; FASTINCDEC: # BB#0: # %entry
29
+ ; FASTINCDEC-NEXT: lock incq (%rdi)
30
+ ; FASTINCDEC-NEXT: cmovlel %edx, %esi
31
+ ; FASTINCDEC-NEXT: movl %esi, %eax
32
+ ; FASTINCDEC-NEXT: retq
33
+ ;
34
+ ; SLOWINCDEC-LABEL: test_add_1_cmov_sge:
35
+ ; SLOWINCDEC: # BB#0: # %entry
36
+ ; SLOWINCDEC-NEXT: lock addq $1, (%rdi)
37
+ ; SLOWINCDEC-NEXT: cmovlel %edx, %esi
38
+ ; SLOWINCDEC-NEXT: movl %esi, %eax
39
+ ; SLOWINCDEC-NEXT: retq
25
40
entry:
26
41
%tmp0 = atomicrmw add i64* %p , i64 1 seq_cst
27
42
%tmp1 = icmp sge i64 %tmp0 , 0
@@ -87,16 +102,27 @@ entry:
87
102
}
88
103
89
104
define i32 @test_add_1_brcond_sge (i64* %p , i32 %a0 , i32 %a1 ) #0 {
90
- ; CHECK-LABEL: test_add_1_brcond_sge:
91
- ; CHECK: # BB#0: # %entry
92
- ; CHECK-NEXT: lock incq (%rdi)
93
- ; CHECK-NEXT: jle .LBB6_2
94
- ; CHECK-NEXT: # BB#1: # %t
95
- ; CHECK-NEXT: movl %esi, %eax
96
- ; CHECK-NEXT: retq
97
- ; CHECK-NEXT: .LBB6_2: # %f
98
- ; CHECK-NEXT: movl %edx, %eax
99
- ; CHECK-NEXT: retq
105
+ ; FASTINCDEC-LABEL: test_add_1_brcond_sge:
106
+ ; FASTINCDEC: # BB#0: # %entry
107
+ ; FASTINCDEC-NEXT: lock incq (%rdi)
108
+ ; FASTINCDEC-NEXT: jle .LBB6_2
109
+ ; FASTINCDEC-NEXT: # BB#1: # %t
110
+ ; FASTINCDEC-NEXT: movl %esi, %eax
111
+ ; FASTINCDEC-NEXT: retq
112
+ ; FASTINCDEC-NEXT: .LBB6_2: # %f
113
+ ; FASTINCDEC-NEXT: movl %edx, %eax
114
+ ; FASTINCDEC-NEXT: retq
115
+ ;
116
+ ; SLOWINCDEC-LABEL: test_add_1_brcond_sge:
117
+ ; SLOWINCDEC: # BB#0: # %entry
118
+ ; SLOWINCDEC-NEXT: lock addq $1, (%rdi)
119
+ ; SLOWINCDEC-NEXT: jle .LBB6_2
120
+ ; SLOWINCDEC-NEXT: # BB#1: # %t
121
+ ; SLOWINCDEC-NEXT: movl %esi, %eax
122
+ ; SLOWINCDEC-NEXT: retq
123
+ ; SLOWINCDEC-NEXT: .LBB6_2: # %f
124
+ ; SLOWINCDEC-NEXT: movl %edx, %eax
125
+ ; SLOWINCDEC-NEXT: retq
100
126
entry:
101
127
%tmp0 = atomicrmw add i64* %p , i64 1 seq_cst
102
128
%tmp1 = icmp sge i64 %tmp0 , 0
@@ -193,11 +219,17 @@ entry:
193
219
}
194
220
195
221
define i8 @test_sub_1_cmp_1_setcc_eq (i64* %p ) #0 {
196
- ; CHECK-LABEL: test_sub_1_cmp_1_setcc_eq:
197
- ; CHECK: # BB#0: # %entry
198
- ; CHECK-NEXT: lock decq (%rdi)
199
- ; CHECK-NEXT: sete %al
200
- ; CHECK-NEXT: retq
222
+ ; FASTINCDEC-LABEL: test_sub_1_cmp_1_setcc_eq:
223
+ ; FASTINCDEC: # BB#0: # %entry
224
+ ; FASTINCDEC-NEXT: lock decq (%rdi)
225
+ ; FASTINCDEC-NEXT: sete %al
226
+ ; FASTINCDEC-NEXT: retq
227
+ ;
228
+ ; SLOWINCDEC-LABEL: test_sub_1_cmp_1_setcc_eq:
229
+ ; SLOWINCDEC: # BB#0: # %entry
230
+ ; SLOWINCDEC-NEXT: lock subq $1, (%rdi)
231
+ ; SLOWINCDEC-NEXT: sete %al
232
+ ; SLOWINCDEC-NEXT: retq
201
233
entry:
202
234
%tmp0 = atomicrmw sub i64* %p , i64 1 seq_cst
203
235
%tmp1 = icmp eq i64 %tmp0 , 1
@@ -206,11 +238,17 @@ entry:
206
238
}
207
239
208
240
define i8 @test_sub_1_cmp_1_setcc_ne (i64* %p ) #0 {
209
- ; CHECK-LABEL: test_sub_1_cmp_1_setcc_ne:
210
- ; CHECK: # BB#0: # %entry
211
- ; CHECK-NEXT: lock decq (%rdi)
212
- ; CHECK-NEXT: setne %al
213
- ; CHECK-NEXT: retq
241
+ ; FASTINCDEC-LABEL: test_sub_1_cmp_1_setcc_ne:
242
+ ; FASTINCDEC: # BB#0: # %entry
243
+ ; FASTINCDEC-NEXT: lock decq (%rdi)
244
+ ; FASTINCDEC-NEXT: setne %al
245
+ ; FASTINCDEC-NEXT: retq
246
+ ;
247
+ ; SLOWINCDEC-LABEL: test_sub_1_cmp_1_setcc_ne:
248
+ ; SLOWINCDEC: # BB#0: # %entry
249
+ ; SLOWINCDEC-NEXT: lock subq $1, (%rdi)
250
+ ; SLOWINCDEC-NEXT: setne %al
251
+ ; SLOWINCDEC-NEXT: retq
214
252
entry:
215
253
%tmp0 = atomicrmw sub i64* %p , i64 1 seq_cst
216
254
%tmp1 = icmp ne i64 %tmp0 , 1
@@ -219,11 +257,17 @@ entry:
219
257
}
220
258
221
259
define i8 @test_sub_1_cmp_1_setcc_ugt (i64* %p ) #0 {
222
- ; CHECK-LABEL: test_sub_1_cmp_1_setcc_ugt:
223
- ; CHECK: # BB#0: # %entry
224
- ; CHECK-NEXT: lock decq (%rdi)
225
- ; CHECK-NEXT: seta %al
226
- ; CHECK-NEXT: retq
260
+ ; FASTINCDEC-LABEL: test_sub_1_cmp_1_setcc_ugt:
261
+ ; FASTINCDEC: # BB#0: # %entry
262
+ ; FASTINCDEC-NEXT: lock decq (%rdi)
263
+ ; FASTINCDEC-NEXT: seta %al
264
+ ; FASTINCDEC-NEXT: retq
265
+ ;
266
+ ; SLOWINCDEC-LABEL: test_sub_1_cmp_1_setcc_ugt:
267
+ ; SLOWINCDEC: # BB#0: # %entry
268
+ ; SLOWINCDEC-NEXT: lock subq $1, (%rdi)
269
+ ; SLOWINCDEC-NEXT: seta %al
270
+ ; SLOWINCDEC-NEXT: retq
227
271
entry:
228
272
%tmp0 = atomicrmw sub i64* %p , i64 1 seq_cst
229
273
%tmp1 = icmp ugt i64 %tmp0 , 1
0 commit comments