From: Philip Reames Date: Fri, 1 Mar 2019 18:10:37 +0000 (+0000) Subject: [Tests] Add tests for missed optimizations of saturating and idempotent FP atomicrmws X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f87f27eb320190caa2134fab9ccdf99e371fb533;p=llvm [Tests] Add tests for missed optimizations of saturating and idempotent FP atomicrmws git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355212 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Transforms/InstCombine/atomicrmw.ll b/test/Transforms/InstCombine/atomicrmw.ll index 78c8ce1085a..0e6c2bb7b45 100644 --- a/test/Transforms/InstCombine/atomicrmw.ll +++ b/test/Transforms/InstCombine/atomicrmw.ll @@ -90,6 +90,13 @@ define float @atomic_fsub_canon(float* %addr) { %res = atomicrmw fsub float* %addr, float 0.0 release ret float %res } +; CHECK-LABEL: atomic_fadd_canon +; CHECK-NEXT: %res = atomicrmw fadd float* %addr, float -0.000000e+00 release +; CHECK-NEXT: ret float %res +define float @atomic_fadd_canon(float* %addr) { + %res = atomicrmw fadd float* %addr, float -0.0 release + ret float %res +} ; Can't replace a volatile w/a load; this would eliminate a volatile store. ; CHECK-LABEL: atomic_sub_zero_volatile @@ -206,6 +213,22 @@ define i8 @sat_max_smax_char(i8* %addr) { ret i8 %res } +; CHECK-LABEL: sat_fadd_nan +; CHECK-NEXT: %res = atomicrmw fadd double* %addr, double 0x7FF00000FFFFFFFF release +; CHECK-NEXT: ret double %res +define double @sat_fadd_nan(double* %addr) { + %res = atomicrmw fadd double* %addr, double 0x7FF00000FFFFFFFF release + ret double %res +} + +; CHECK-LABEL: sat_fsub_nan +; CHECK-NEXT: %res = atomicrmw fsub double* %addr, double 0x7FF00000FFFFFFFF release +; CHECK-NEXT: ret double %res +define double @sat_fsub_nan(double* %addr) { + %res = atomicrmw fsub double* %addr, double 0x7FF00000FFFFFFFF release + ret double %res +} + ; CHECK-LABEL: xchg_unused_monotonic ; CHECK-NEXT: store atomic i32 0, i32* %addr monotonic, align 4 ; CHECK-NEXT: ret void