11; 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
34
45define 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
1119entry:
1220 %tmp0 = atomicrmw add i64* %p , i64 1 seq_cst
1321 %tmp1 = icmp slt i64 %tmp0 , 0
@@ -16,12 +24,19 @@ entry:
1624}
1725
1826define 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
2540entry:
2641 %tmp0 = atomicrmw add i64* %p , i64 1 seq_cst
2742 %tmp1 = icmp sge i64 %tmp0 , 0
@@ -87,16 +102,27 @@ entry:
87102}
88103
89104define 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
100126entry:
101127 %tmp0 = atomicrmw add i64* %p , i64 1 seq_cst
102128 %tmp1 = icmp sge i64 %tmp0 , 0
@@ -193,11 +219,17 @@ entry:
193219}
194220
195221define 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
201233entry:
202234 %tmp0 = atomicrmw sub i64* %p , i64 1 seq_cst
203235 %tmp1 = icmp eq i64 %tmp0 , 1
@@ -206,11 +238,17 @@ entry:
206238}
207239
208240define 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
214252entry:
215253 %tmp0 = atomicrmw sub i64* %p , i64 1 seq_cst
216254 %tmp1 = icmp ne i64 %tmp0 , 1
@@ -219,11 +257,17 @@ entry:
219257}
220258
221259define 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
227271entry:
228272 %tmp0 = atomicrmw sub i64* %p , i64 1 seq_cst
229273 %tmp1 = icmp ugt i64 %tmp0 , 1
0 commit comments