summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2019-09-11 14:18:48 +0000
committerSanjay Patel <spatel@rotateright.com>2019-09-11 14:18:48 +0000
commitede0905c1fb2f70abfba593a3a51e7dfae7cca88 (patch)
treecb5ccde4cfda1c824062c6faa5933a64dc29c34f /llvm
parentf054067f276d8951e5a0a8dbd009a16fa666d736 (diff)
downloadbcm5719-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.ll133
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
+}
+
OpenPOWER on IntegriCloud