]> granicus.if.org Git - llvm/commitdiff
[Tests] Add tests for missed optimizations of saturating and idempotent FP atomicrmws
authorPhilip Reames <listmail@philipreames.com>
Fri, 1 Mar 2019 18:10:37 +0000 (18:10 +0000)
committerPhilip Reames <listmail@philipreames.com>
Fri, 1 Mar 2019 18:10:37 +0000 (18:10 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355212 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/InstCombine/atomicrmw.ll

index 78c8ce1085a2f7e9a8d04ff5824d263a893fff9c..0e6c2bb7b45f6fb46da0f8cb17c47746ff79e785 100644 (file)
@@ -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