diff options
| author | Sanjay Patel <spatel@rotateright.com> | 2019-04-30 18:15:18 +0000 | 
|---|---|---|
| committer | Sanjay Patel <spatel@rotateright.com> | 2019-04-30 18:15:18 +0000 | 
| commit | 3ec1c517164917e60ced8651b1de8d5690cc1cb3 (patch) | |
| tree | 29592b789953383ed4e61c43de7ec6f59fcdbfb0 /llvm | |
| parent | 999bb5ac27af6a1c44612903cd533e5b4484d5ce (diff) | |
| download | bcm5719-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.ll | 62 | 
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)  | 

