]> granicus.if.org Git - llvm/commitdiff
[AArch64] add more tests for constant folding failures; NFC
authorSanjay Patel <spatel@rotateright.com>
Tue, 30 Apr 2019 18:15:18 +0000 (18:15 +0000)
committerSanjay Patel <spatel@rotateright.com>
Tue, 30 Apr 2019 18:15:18 +0000 (18:15 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@359592 91177308-0d34-0410-b5e6-96231b3b80d8

test/CodeGen/AArch64/fp-const-fold.ll

index 398671b79b52634bf218708c1eeeda6f59812b9f..5fa46aabbe05c5c4786e4650eb2f92fb0b076eea 100644 (file)
@@ -13,6 +13,8 @@ define double @constant_fold_fdiv_by_zero(double* %p) {
   ret double %r
 }
 
+; frem by 0.0 --> NaN
+
 define double @constant_fold_frem_by_zero(double* %p) {
 ; CHECK-LABEL: constant_fold_frem_by_zero:
 ; CHECK:       // %bb.0:
@@ -23,3 +25,63 @@ define double @constant_fold_frem_by_zero(double* %p) {
   %r = frem double 4.940660e-324, 0.0
   ret double %r
 }
+
+; Inf * 0.0 --> NaN
+
+define double @constant_fold_fmul_nan(double* %p) {
+; CHECK-LABEL: constant_fold_fmul_nan:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    mov x8, #9218868437227405312
+; CHECK-NEXT:    fmov d0, xzr
+; CHECK-NEXT:    fmov d1, x8
+; CHECK-NEXT:    fmul d0, d1, d0
+; CHECK-NEXT:    ret
+  %r = fmul double 0x7ff0000000000000, 0.0
+  ret double %r
+}
+
+; Inf + -Inf --> NaN
+
+define double @constant_fold_fadd_nan(double* %p) {
+; CHECK-LABEL: constant_fold_fadd_nan:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    mov x8, #-4503599627370496
+; CHECK-NEXT:    mov x9, #9218868437227405312
+; CHECK-NEXT:    fmov d0, x8
+; CHECK-NEXT:    fmov d1, x9
+; CHECK-NEXT:    fadd d0, d1, d0
+; CHECK-NEXT:    ret
+  %r = fadd double 0x7ff0000000000000, 0xfff0000000000000
+  ret double %r
+}
+
+; Inf - Inf --> NaN
+
+define double @constant_fold_fsub_nan(double* %p) {
+; CHECK-LABEL: constant_fold_fsub_nan:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    mov x8, #9218868437227405312
+; CHECK-NEXT:    fmov d0, x8
+; CHECK-NEXT:    fsub d0, d0, d0
+; CHECK-NEXT:    ret
+  %r = fsub double 0x7ff0000000000000, 0x7ff0000000000000
+  ret double %r
+}
+
+; Inf * 0.0 + ? --> NaN
+
+define double @constant_fold_fma_nan(double* %p) {
+; CHECK-LABEL: constant_fold_fma_nan:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    mov x8, #4631107791820423168
+; CHECK-NEXT:    mov x9, #9218868437227405312
+; CHECK-NEXT:    fmov d0, xzr
+; CHECK-NEXT:    fmov d1, x8
+; CHECK-NEXT:    fmov d2, x9
+; CHECK-NEXT:    fmadd d0, d2, d0, d1
+; CHECK-NEXT:    ret
+  %r =  call double @llvm.fma.f64(double 0x7ff0000000000000, double 0.0, double 42.0)
+  ret double %r
+}
+
+declare double @llvm.fma.f64(double, double, double)