brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.9 KiB · c18c9a3 Raw
197 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64-- | FileCheck %s3 4; https://bugs.llvm.org/show_bug.cgi?id=416685 6define double @constant_fold_fdiv_by_zero(ptr %p) {7; CHECK-LABEL: constant_fold_fdiv_by_zero:8; CHECK:       // %bb.0:9; CHECK-NEXT:    mov x8, #921886843722740531210; CHECK-NEXT:    fmov d0, x811; CHECK-NEXT:    ret12  %r = fdiv double 4.940660e-324, 0.013  ret double %r14}15 16; frem by 0.0 --> NaN17 18define double @constant_fold_frem_by_zero(ptr %p) {19; CHECK-LABEL: constant_fold_frem_by_zero:20; CHECK:       // %bb.0:21; CHECK-NEXT:    mov x8, #922112023704109056022; CHECK-NEXT:    fmov d0, x823; CHECK-NEXT:    ret24  %r = frem double 4.940660e-324, 0.025  ret double %r26}27 28; Inf * 0.0 --> NaN29 30define double @constant_fold_fmul_nan(ptr %p) {31; CHECK-LABEL: constant_fold_fmul_nan:32; CHECK:       // %bb.0:33; CHECK-NEXT:    mov x8, #922112023704109056034; CHECK-NEXT:    fmov d0, x835; CHECK-NEXT:    ret36  %r = fmul double 0x7ff0000000000000, 0.037  ret double %r38}39 40; Inf + -Inf --> NaN41 42define double @constant_fold_fadd_nan(ptr %p) {43; CHECK-LABEL: constant_fold_fadd_nan:44; CHECK:       // %bb.0:45; CHECK-NEXT:    mov x8, #922112023704109056046; CHECK-NEXT:    fmov d0, x847; CHECK-NEXT:    ret48  %r = fadd double 0x7ff0000000000000, 0xfff000000000000049  ret double %r50}51 52; Inf - Inf --> NaN53 54define double @constant_fold_fsub_nan(ptr %p) {55; CHECK-LABEL: constant_fold_fsub_nan:56; CHECK:       // %bb.0:57; CHECK-NEXT:    mov x8, #922112023704109056058; CHECK-NEXT:    fmov d0, x859; CHECK-NEXT:    ret60  %r = fsub double 0x7ff0000000000000, 0x7ff000000000000061  ret double %r62}63 64; Inf * 0.0 + ? --> NaN65 66define double @constant_fold_fma_nan(ptr %p) {67; CHECK-LABEL: constant_fold_fma_nan:68; CHECK:       // %bb.0:69; CHECK-NEXT:    mov x8, #922112023704109056070; CHECK-NEXT:    fmov d0, x871; CHECK-NEXT:    ret72  %r =  call double @llvm.fma.f64(double 0x7ff0000000000000, double 0.0, double 42.0)73  ret double %r74}75 76define double @fdiv_nnan_nan_op0(double %x) {77; CHECK-LABEL: fdiv_nnan_nan_op0:78; CHECK:       // %bb.0:79; CHECK-NEXT:    ret80  %r = fdiv nnan double 0xfff8000000000000, %x81  ret double %r82}83 84define double @fmul_nnan_nan_op1(double %x) {85; CHECK-LABEL: fmul_nnan_nan_op1:86; CHECK:       // %bb.0:87; CHECK-NEXT:    ret88  %r = fmul nnan double %x, 0x7ff800000000000089  ret double %r90}91 92; Negative test - nan is ok.93; TODO: Should simplify to nan.94 95define double @fdiv_ninf_nan_op0(double %x) {96; CHECK-LABEL: fdiv_ninf_nan_op0:97; CHECK:       // %bb.0:98; CHECK-NEXT:    mov x8, #-225179981368524899; CHECK-NEXT:    fmov d1, x8100; CHECK-NEXT:    fdiv d0, d1, d0101; CHECK-NEXT:    ret102  %r = fdiv ninf double 0xfff8000000000000, %x103  ret double %r104}105 106; Negative test - nan is ok.107; TODO: Should simplify to nan.108 109define double @fadd_ninf_nan_op1(double %x) {110; CHECK-LABEL: fadd_ninf_nan_op1:111; CHECK:       // %bb.0:112; CHECK-NEXT:    mov x8, #9221120237041090560113; CHECK-NEXT:    fmov d1, x8114; CHECK-NEXT:    fadd d0, d0, d1115; CHECK-NEXT:    ret116  %r = fadd ninf double %x, 0x7ff8000000000000117  ret double %r118}119 120define double @fdiv_ninf_inf_op0(double %x) {121; CHECK-LABEL: fdiv_ninf_inf_op0:122; CHECK:       // %bb.0:123; CHECK-NEXT:    ret124  %r = fdiv ninf double 0x7ff0000000000000, %x125  ret double %r126}127 128define double @fadd_ninf_inf_op1(double %x) {129; CHECK-LABEL: fadd_ninf_inf_op1:130; CHECK:       // %bb.0:131; CHECK-NEXT:    ret132  %r = fadd ninf double %x, 0xfff0000000000000133  ret double %r134}135 136; Negative test - inf is ok.137; TODO: Should simplify to inf.138 139define double @fsub_nnan_inf_op0(double %x) {140; CHECK-LABEL: fsub_nnan_inf_op0:141; CHECK:       // %bb.0:142; CHECK-NEXT:    mov x8, #9218868437227405312143; CHECK-NEXT:    fmov d1, x8144; CHECK-NEXT:    fsub d0, d1, d0145; CHECK-NEXT:    ret146  %r = fsub nnan double 0x7ff0000000000000, %x147  ret double %r148}149 150; Negative test - inf is ok.151; TODO: Should simplify to -inf.152 153define double @fmul_nnan_inf_op1(double %x) {154; CHECK-LABEL: fmul_nnan_inf_op1:155; CHECK:       // %bb.0:156; CHECK-NEXT:    mov x8, #-4503599627370496157; CHECK-NEXT:    fmov d1, x8158; CHECK-NEXT:    fmul d0, d0, d1159; CHECK-NEXT:    ret160  %r = fmul nnan double %x, 0xfff0000000000000161  ret double %r162}163 164define double @fdiv_nnan_undef_op0(double %x) {165; CHECK-LABEL: fdiv_nnan_undef_op0:166; CHECK:       // %bb.0:167; CHECK-NEXT:    ret168  %r = fdiv nnan double undef, %x169  ret double %r170}171 172define double @fdiv_nnan_undef_op1(double %x) {173; CHECK-LABEL: fdiv_nnan_undef_op1:174; CHECK:       // %bb.0:175; CHECK-NEXT:    ret176  %r = fdiv nnan double %x, undef177  ret double %r178}179 180define double @fdiv_ninf_undef_op0(double %x) {181; CHECK-LABEL: fdiv_ninf_undef_op0:182; CHECK:       // %bb.0:183; CHECK-NEXT:    ret184  %r = fdiv ninf double undef, %x185  ret double %r186}187 188define double @fdiv_ninf_undef_op1(double %x) {189; CHECK-LABEL: fdiv_ninf_undef_op1:190; CHECK:       // %bb.0:191; CHECK-NEXT:    ret192  %r = fdiv ninf double %x, undef193  ret double %r194}195 196declare double @llvm.fma.f64(double, double, double)197