diff options
| author | Sanjay Patel <spatel@rotateright.com> | 2019-09-11 14:18:48 +0000 | 
|---|---|---|
| committer | Sanjay Patel <spatel@rotateright.com> | 2019-09-11 14:18:48 +0000 | 
| commit | ede0905c1fb2f70abfba593a3a51e7dfae7cca88 (patch) | |
| tree | cb5ccde4cfda1c824062c6faa5933a64dc29c34f /llvm | |
| parent | f054067f276d8951e5a0a8dbd009a16fa666d736 (diff) | |
| download | bcm5719-llvm-ede0905c1fb2f70abfba593a3a51e7dfae7cca88.tar.gz bcm5719-llvm-ede0905c1fb2f70abfba593a3a51e7dfae7cca88.zip  | |
[ConstProp] add tests for fma that produce NaN; NFC
llvm-svn: 371621
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/test/Transforms/ConstProp/fma.ll | 133 | 
1 files changed, 133 insertions, 0 deletions
diff --git a/llvm/test/Transforms/ConstProp/fma.ll b/llvm/test/Transforms/ConstProp/fma.ll index f7d172fc482..7428676ac8d 100644 --- a/llvm/test/Transforms/ConstProp/fma.ll +++ b/llvm/test/Transforms/ConstProp/fma.ll @@ -124,3 +124,136 @@ define double @test_Inf_4()  {    %1 = call double @llvm.fma.f64(double 7.0, double 0xFFF0000000000000, double 0.0)    ret double %1  } + +; -inf + inf --> NaN + +define double @inf_product_opposite_inf_addend_1()  { +; CHECK-LABEL: @inf_product_opposite_inf_addend_1( +; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.fma.f64(double 7.000000e+00, double 0xFFF0000000000000, double 0x7FF0000000000000) +; CHECK-NEXT:    ret double [[TMP1]] +; +  %1 = call double @llvm.fma.f64(double 7.0, double 0xFFF0000000000000, double 0x7FF0000000000000) +  ret double %1 +} + +; inf + -inf --> NaN + +define double @inf_product_opposite_inf_addend_2()  { +; CHECK-LABEL: @inf_product_opposite_inf_addend_2( +; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.fma.f64(double 7.000000e+00, double 0x7FF0000000000000, double 0xFFF0000000000000) +; CHECK-NEXT:    ret double [[TMP1]] +; +  %1 = call double @llvm.fma.f64(double 7.0, double 0x7FF0000000000000, double 0xFFF0000000000000) +  ret double %1 +} + +; -inf + inf --> NaN + +define double @inf_product_opposite_inf_addend_3()  { +; CHECK-LABEL: @inf_product_opposite_inf_addend_3( +; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.fma.f64(double 0xFFF0000000000000, double 4.200000e+01, double 0x7FF0000000000000) +; CHECK-NEXT:    ret double [[TMP1]] +; +  %1 = call double @llvm.fma.f64(double 0xFFF0000000000000, double 42.0, double 0x7FF0000000000000) +  ret double %1 +} + +; inf + -inf --> NaN + +define double @inf_product_opposite_inf_addend_4()  { +; CHECK-LABEL: @inf_product_opposite_inf_addend_4( +; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.fma.f64(double 0x7FF0000000000000, double 4.200000e+01, double 0xFFF0000000000000) +; CHECK-NEXT:    ret double [[TMP1]] +; +  %1 = call double @llvm.fma.f64(double 0x7FF0000000000000, double 42.0, double 0xFFF0000000000000) +  ret double %1 +} + +; 0 * -inf --> NaN + +define double @inf_times_zero_1()  { +; CHECK-LABEL: @inf_times_zero_1( +; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.fma.f64(double 0.000000e+00, double 0xFFF0000000000000, double 4.200000e+01) +; CHECK-NEXT:    ret double [[TMP1]] +; +  %1 = call double @llvm.fma.f64(double 0.0, double 0xFFF0000000000000, double 42.0) +  ret double %1 +} + +; 0 * inf --> NaN + +define double @inf_times_zero_2()  { +; CHECK-LABEL: @inf_times_zero_2( +; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.fma.f64(double 0.000000e+00, double 0x7FF0000000000000, double 4.200000e+01) +; CHECK-NEXT:    ret double [[TMP1]] +; +  %1 = call double @llvm.fma.f64(double 0.0, double 0x7FF0000000000000, double 42.0) +  ret double %1 +} + +; -inf * 0 --> NaN + +define double @inf_times_zero_3()  { +; CHECK-LABEL: @inf_times_zero_3( +; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.fma.f64(double 0xFFF0000000000000, double 0.000000e+00, double 4.200000e+01) +; CHECK-NEXT:    ret double [[TMP1]] +; +  %1 = call double @llvm.fma.f64(double 0xFFF0000000000000, double 0.0, double 42.0) +  ret double %1 +} + +; inf * 0 --> NaN + +define double @inf_times_zero_4()  { +; CHECK-LABEL: @inf_times_zero_4( +; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.fma.f64(double 0x7FF0000000000000, double 0.000000e+00, double 4.200000e+01) +; CHECK-NEXT:    ret double [[TMP1]] +; +  %1 = call double @llvm.fma.f64(double 0x7FF0000000000000, double 0.0, double 42.0) +  ret double %1 +} + +; -0 * -inf --> NaN + +define double @inf_times_zero_5()  { +; CHECK-LABEL: @inf_times_zero_5( +; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.fma.f64(double -0.000000e+00, double 0xFFF0000000000000, double 4.200000e+01) +; CHECK-NEXT:    ret double [[TMP1]] +; +  %1 = call double @llvm.fma.f64(double -0.0, double 0xFFF0000000000000, double 42.0) +  ret double %1 +} + +; -0 * inf --> NaN + +define double @inf_times_zero_6()  { +; CHECK-LABEL: @inf_times_zero_6( +; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.fma.f64(double -0.000000e+00, double 0x7FF0000000000000, double 4.200000e+01) +; CHECK-NEXT:    ret double [[TMP1]] +; +  %1 = call double @llvm.fma.f64(double -0.0, double 0x7FF0000000000000, double 42.0) +  ret double %1 +} + +; -inf * -0 --> NaN + +define double @inf_times_zero_7()  { +; CHECK-LABEL: @inf_times_zero_7( +; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.fma.f64(double 0xFFF0000000000000, double -0.000000e+00, double 4.200000e+01) +; CHECK-NEXT:    ret double [[TMP1]] +; +  %1 = call double @llvm.fma.f64(double 0xFFF0000000000000, double -0.0, double 42.0) +  ret double %1 +} + +; inf * -0 --> NaN + +define double @inf_times_zero_8()  { +; CHECK-LABEL: @inf_times_zero_8( +; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.fma.f64(double 0x7FF0000000000000, double -0.000000e+00, double 4.200000e+01) +; CHECK-NEXT:    ret double [[TMP1]] +; +  %1 = call double @llvm.fma.f64(double 0x7FF0000000000000, double -0.0, double 42.0) +  ret double %1 +} +  | 

