diff options
author | Evan Cheng <evan.cheng@apple.com> | 2012-10-09 23:48:33 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2012-10-09 23:48:33 +0000 |
commit | e61e516a51f1211c1385a3043523552f4e56003d (patch) | |
tree | a8b14ae39187d0deeaf199c9d149fd703dc89213 /test | |
parent | c0dfffa448ad7ab647779bc3e7f2aee5c76cb31b (diff) | |
download | external_llvm-e61e516a51f1211c1385a3043523552f4e56003d.zip external_llvm-e61e516a51f1211c1385a3043523552f4e56003d.tar.gz external_llvm-e61e516a51f1211c1385a3043523552f4e56003d.tar.bz2 |
When expanding atomic load arith instructions, do not lose target flags. rdar://12453106
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165568 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGen/X86/atomic-minmax-i6432.ll | 100 |
1 files changed, 58 insertions, 42 deletions
diff --git a/test/CodeGen/X86/atomic-minmax-i6432.ll b/test/CodeGen/X86/atomic-minmax-i6432.ll index 01a9264..e3ef605 100644 --- a/test/CodeGen/X86/atomic-minmax-i6432.ll +++ b/test/CodeGen/X86/atomic-minmax-i6432.ll @@ -1,51 +1,67 @@ -; RUN: llc -march=x86 -mattr=+cmov -mtriple=i386-pc-linux < %s | FileCheck %s +; RUN: llc -march=x86 -mattr=+cmov -mtriple=i386-pc-linux < %s | FileCheck %s -check-prefix=LINUX +; RUN: llc -march=x86 -mtriple=i386-macosx -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC + @sc64 = external global i64 define void @atomic_maxmin_i6432() { -; CHECK: atomic_maxmin_i6432 +; LINUX: atomic_maxmin_i6432 %1 = atomicrmw max i64* @sc64, i64 5 acquire -; CHECK: [[LABEL:.LBB[0-9]+_[0-9]+]] -; CHECK: cmpl -; CHECK: setl -; CHECK: cmpl -; CHECK: setl -; CHECK: cmovne -; CHECK: cmovne -; CHECK: lock -; CHECK-NEXT: cmpxchg8b -; CHECK: jne [[LABEL]] +; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]] +; LINUX: cmpl +; LINUX: setl +; LINUX: cmpl +; LINUX: setl +; LINUX: cmovne +; LINUX: cmovne +; LINUX: lock +; LINUX-NEXT: cmpxchg8b +; LINUX: jne [[LABEL]] %2 = atomicrmw min i64* @sc64, i64 6 acquire -; CHECK: [[LABEL:.LBB[0-9]+_[0-9]+]] -; CHECK: cmpl -; CHECK: setg -; CHECK: cmpl -; CHECK: setg -; CHECK: cmovne -; CHECK: cmovne -; CHECK: lock -; CHECK-NEXT: cmpxchg8b -; CHECK: jne [[LABEL]] +; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]] +; LINUX: cmpl +; LINUX: setg +; LINUX: cmpl +; LINUX: setg +; LINUX: cmovne +; LINUX: cmovne +; LINUX: lock +; LINUX-NEXT: cmpxchg8b +; LINUX: jne [[LABEL]] %3 = atomicrmw umax i64* @sc64, i64 7 acquire -; CHECK: [[LABEL:.LBB[0-9]+_[0-9]+]] -; CHECK: cmpl -; CHECK: setb -; CHECK: cmpl -; CHECK: setb -; CHECK: cmovne -; CHECK: cmovne -; CHECK: lock -; CHECK-NEXT: cmpxchg8b -; CHECK: jne [[LABEL]] +; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]] +; LINUX: cmpl +; LINUX: setb +; LINUX: cmpl +; LINUX: setb +; LINUX: cmovne +; LINUX: cmovne +; LINUX: lock +; LINUX-NEXT: cmpxchg8b +; LINUX: jne [[LABEL]] %4 = atomicrmw umin i64* @sc64, i64 8 acquire -; CHECK: [[LABEL:.LBB[0-9]+_[0-9]+]] -; CHECK: cmpl -; CHECK: seta -; CHECK: cmpl -; CHECK: seta -; CHECK: cmovne -; CHECK: cmovne -; CHECK: lock -; CHECK-NEXT: cmpxchg8b -; CHECK: jne [[LABEL]] +; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]] +; LINUX: cmpl +; LINUX: seta +; LINUX: cmpl +; LINUX: seta +; LINUX: cmovne +; LINUX: cmovne +; LINUX: lock +; LINUX-NEXT: cmpxchg8b +; LINUX: jne [[LABEL]] + ret void +} + +; rdar://12453106 +@id = internal global i64 0, align 8 + +define void @tf_bug(i8* %ptr) nounwind { +; PIC: tf_bug: +; PIC: movl _id-L1$pb( +; PIC: movl (_id-L1$pb)+4( + %tmp1 = atomicrmw add i64* @id, i64 1 seq_cst + %tmp2 = add i64 %tmp1, 1 + %tmp3 = bitcast i8* %ptr to i64* + store i64 %tmp2, i64* %tmp3, align 4 ret void } |