From f9f8ba4f3b174948d33b2efd3901687a2a0e9723 Mon Sep 17 00:00:00 2001 From: Philip Reames Date: Fri, 15 Feb 2019 17:11:30 +0000 Subject: [PATCH] [Tests] Demonstrate more missing atomicrmw transforms git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@354146 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Transforms/InstCombine/atomicrmw.ll | 84 ++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/test/Transforms/InstCombine/atomicrmw.ll b/test/Transforms/InstCombine/atomicrmw.ll index 52ec929abb5..e8b0cf5686d 100644 --- a/test/Transforms/InstCombine/atomicrmw.ll +++ b/test/Transforms/InstCombine/atomicrmw.ll @@ -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 +} + + + + -- 2.50.1