summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2019-04-30 18:15:18 +0000
committerSanjay Patel <spatel@rotateright.com>2019-04-30 18:15:18 +0000
commit3ec1c517164917e60ced8651b1de8d5690cc1cb3 (patch)
tree29592b789953383ed4e61c43de7ec6f59fcdbfb0 /llvm
parent999bb5ac27af6a1c44612903cd533e5b4484d5ce (diff)
downloadbcm5719-llvm-3ec1c517164917e60ced8651b1de8d5690cc1cb3.tar.gz
bcm5719-llvm-3ec1c517164917e60ced8651b1de8d5690cc1cb3.zip
[AArch64] add more tests for constant folding failures; NFC
llvm-svn: 359592
Diffstat (limited to 'llvm')
-rw-r--r--llvm/test/CodeGen/AArch64/fp-const-fold.ll62
1 files changed, 62 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/AArch64/fp-const-fold.ll b/llvm/test/CodeGen/AArch64/fp-const-fold.ll
index 398671b79b5..5fa46aabbe0 100644
--- a/llvm/test/CodeGen/AArch64/fp-const-fold.ll
+++ b/llvm/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)
OpenPOWER on IntegriCloud