[llvm] r354146 - [Tests] Demonstrate more missing atomicrmw transforms

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 15 09:11:31 PST 2019


Author: reames
Date: Fri Feb 15 09:11:30 2019
New Revision: 354146

URL: http://llvm.org/viewvc/llvm-project?rev=354146&view=rev
Log:
[Tests] Demonstrate more missing atomicrmw transforms


Modified:
    llvm/trunk/test/Transforms/InstCombine/atomicrmw.ll

Modified: llvm/trunk/test/Transforms/InstCombine/atomicrmw.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/atomicrmw.ll?rev=354146&r1=354145&r2=354146&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/atomicrmw.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/atomicrmw.ll Fri Feb 15 09:11:30 2019
@@ -134,3 +134,87 @@ define i16 @atomic_acq_rel(i16* %addr) {
   %res = atomicrmw xor i16* %addr, i16 0 acq_rel
   ret i16 %res
 }
+
+
+; CHECK-LABEL: sat_or_allones
+; CHECK-NEXT: %res = atomicrmw add i32* %addr, i32 -1 monotonic
+; CHECK-NEXT: ret i32 %res
+define i32 @sat_or_allones(i32* %addr) {
+  %res = atomicrmw add i32* %addr, i32 -1 monotonic
+  ret i32 %res
+}
+
+; CHECK-LABEL: sat_and_zero
+; CHECK-NEXT: %res = atomicrmw and i32* %addr, i32 0 monotonic
+; CHECK-NEXT: ret i32 %res
+define i32 @sat_and_zero(i32* %addr) {
+  %res = atomicrmw and i32* %addr, i32 0 monotonic
+  ret i32 %res
+}
+; CHECK-LABEL: sat_umin_uint_min
+; CHECK-NEXT: %res = atomicrmw umin i32* %addr, i32 0 monotonic
+; CHECK-NEXT: ret i32 %res
+define i32 @sat_umin_uint_min(i32* %addr) {
+  %res = atomicrmw umin i32* %addr, i32 0 monotonic
+  ret i32 %res
+}
+
+; CHECK-LABEL: sat_umax_uint_max
+; CHECK-NEXT: %res = atomicrmw umax i32* %addr, i32 -1 monotonic
+; CHECK-NEXT: ret i32 %res
+define i32 @sat_umax_uint_max(i32* %addr) {
+  %res = atomicrmw umax i32* %addr, i32 -1 monotonic
+  ret i32 %res
+}
+
+; CHECK-LABEL: sat_min_smin_char
+; CHECK-NEXT: %res = atomicrmw min i8* %addr, i8 -128 monotonic
+; CHECK-NEXT: ret i8 %res
+define i8 @sat_min_smin_char(i8* %addr) {
+  %res = atomicrmw min i8* %addr, i8 -128 monotonic
+  ret i8 %res
+}
+
+; CHECK-LABEL: sat_max_smax_char
+; CHECK-NEXT: %res = atomicrmw max i8* %addr, i8 127 monotonic
+; CHECK-NEXT: ret i8 %res
+define i8 @sat_max_smax_char(i8* %addr) {
+  %res = atomicrmw max i8* %addr, i8 127 monotonic
+  ret i8 %res
+}
+
+; CHECK-LABEL: xchg_unused_monotonic
+; CHECK-NEXT: atomicrmw xchg i32* %addr, i32 0 monotonic
+; CHECK-NEXT: ret void
+define void @xchg_unused_monotonic(i32* %addr) {
+  atomicrmw xchg i32* %addr, i32 0 monotonic
+  ret void
+}
+
+; CHECK-LABEL: xchg_unused_release
+; CHECK-NEXT: atomicrmw xchg i32* %addr, i32 -1 release
+; CHECK-NEXT: ret void
+define void @xchg_unused_release(i32* %addr) {
+  atomicrmw xchg i32* %addr, i32 -1 release
+  ret void
+}
+
+; CHECK-LABEL: xchg_unused_seq_cst
+; CHECK-NEXT: atomicrmw xchg i32* %addr, i32 0 seq_cst
+; CHECK-NEXT: ret void
+define void @xchg_unused_seq_cst(i32* %addr) {
+  atomicrmw xchg i32* %addr, i32 0 seq_cst
+  ret void
+}
+
+; CHECK-LABEL: xchg_unused_volatile
+; CHECK-NEXT: atomicrmw volatile xchg i32* %addr, i32 0 monotonic
+; CHECK-NEXT: ret void
+define void @xchg_unused_volatile(i32* %addr) {
+  atomicrmw volatile xchg i32* %addr, i32 0 monotonic
+  ret void
+}
+
+
+
+




More information about the llvm-commits mailing list