From a5e3bec5e4af64fd708b86bd7b23f098fb4216b6 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Tue, 30 Apr 2019 18:15:18 +0000 Subject: [PATCH] [AArch64] add more tests for constant folding failures; NFC git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@359592 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/AArch64/fp-const-fold.ll | 62 +++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/test/CodeGen/AArch64/fp-const-fold.ll b/test/CodeGen/AArch64/fp-const-fold.ll index 398671b79b5..5fa46aabbe0 100644 --- a/test/CodeGen/AArch64/fp-const-fold.ll +++ b/test/CodeGen/AArch64/fp-const-fold.ll @@ -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) -- 2.50.1