Skip to content
This repository was archived by the owner on Apr 23, 2020. It is now read-only.

Commit d23b241

Browse files
committed
[X86] Add a slow-incdec command line to atomic-eflags-reuse.ll
I believe the test_sub_1_cmp_1_setcc_ugt test case is being miscompiled in the fast inc/dec case. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316864 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 06ded73 commit d23b241

File tree

1 file changed

+82
-38
lines changed

1 file changed

+82
-38
lines changed

test/CodeGen/X86/atomic-eflags-reuse.ll

Lines changed: 82 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,21 @@
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

45
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
1119
entry:
1220
%tmp0 = atomicrmw add i64* %p, i64 1 seq_cst
1321
%tmp1 = icmp slt i64 %tmp0, 0
@@ -16,12 +24,19 @@ entry:
1624
}
1725

1826
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
2540
entry:
2641
%tmp0 = atomicrmw add i64* %p, i64 1 seq_cst
2742
%tmp1 = icmp sge i64 %tmp0, 0
@@ -87,16 +102,27 @@ entry:
87102
}
88103

89104
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
100126
entry:
101127
%tmp0 = atomicrmw add i64* %p, i64 1 seq_cst
102128
%tmp1 = icmp sge i64 %tmp0, 0
@@ -193,11 +219,17 @@ entry:
193219
}
194220

195221
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
201233
entry:
202234
%tmp0 = atomicrmw sub i64* %p, i64 1 seq_cst
203235
%tmp1 = icmp eq i64 %tmp0, 1
@@ -206,11 +238,17 @@ entry:
206238
}
207239

208240
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
214252
entry:
215253
%tmp0 = atomicrmw sub i64* %p, i64 1 seq_cst
216254
%tmp1 = icmp ne i64 %tmp0, 1
@@ -219,11 +257,17 @@ entry:
219257
}
220258

221259
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
227271
entry:
228272
%tmp0 = atomicrmw sub i64* %p, i64 1 seq_cst
229273
%tmp1 = icmp ugt i64 %tmp0, 1

0 commit comments

Comments
 (0)