diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2015-06-16 14:57:29 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2015-06-16 14:57:29 +0000 |
commit | 1ee59cba5d90841a615d95195a972b3c24c7dc2b (patch) | |
tree | f2b74d31f940323d066c194663d9e756a617c9a1 /llvm/test/Transforms/InstSimplify/fast-math.ll | |
parent | 302275a938141ab1af7b7d73007ae2ad3bc802bc (diff) | |
download | bcm5719-llvm-1ee59cba5d90841a615d95195a972b3c24c7dc2b.tar.gz bcm5719-llvm-1ee59cba5d90841a615d95195a972b3c24c7dc2b.zip |
[InstSimplify] Allow folding of fdiv X, X with just NaNs ignored
Any combination of +-inf/+-inf is NaN so it's already ignored with
nnan and we can skip checking for ninf. Also rephrase logic in comments
a bit.
llvm-svn: 239821
Diffstat (limited to 'llvm/test/Transforms/InstSimplify/fast-math.ll')
-rw-r--r-- | llvm/test/Transforms/InstSimplify/fast-math.ll | 68 |
1 files changed, 24 insertions, 44 deletions
diff --git a/llvm/test/Transforms/InstSimplify/fast-math.ll b/llvm/test/Transforms/InstSimplify/fast-math.ll index c9ae7ef0f09..90532fa5db8 100644 --- a/llvm/test/Transforms/InstSimplify/fast-math.ll +++ b/llvm/test/Transforms/InstSimplify/fast-math.ll @@ -115,79 +115,59 @@ define double @fdiv_zero_by_x(double %X) { ; CHECK: ret double 0 } -define float @fdiv_self(float %f) { - %div = fdiv nnan ninf float %f, %f +define float @fdiv_self(float %f) { + %div = fdiv nnan float %f, %f ret float %div ; CHECK-LABEL: fdiv_self ; CHECK: ret float 1.000000e+00 } -define float @fdiv_self_invalid1(float %f) { - %div = fdiv ninf float %f, %f - ret float %div -; CHECK-LABEL: fdiv_self_invalid1 -; CHECK: %div = fdiv ninf float %f, %f -; CHECK-NEXT: ret float %div -} - -define float @fdiv_self_invalid2(float %f) { - %div = fdiv nnan float %f, %f - ret float %div -; CHECK-LABEL: fdiv_self_invalid2 -; CHECK: %div = fdiv nnan float %f, %f -; CHECK-NEXT: ret float %div -} - -define float @fdiv_self_invalid3(float %f) { +define float @fdiv_self_invalid(float %f) { %div = fdiv float %f, %f ret float %div -; CHECK-LABEL: fdiv_self_invalid3 +; CHECK-LABEL: fdiv_self_invalid ; CHECK: %div = fdiv float %f, %f ; CHECK-NEXT: ret float %div } -define float @fdiv_neg(float %f) { +define float @fdiv_neg1(float %f) { %neg = fsub fast float -0.000000e+00, %f - %div = fdiv nnan ninf float %neg, %f + %div = fdiv nnan float %neg, %f ret float %div -; CHECK-LABEL: fdiv_neg +; CHECK-LABEL: fdiv_neg1 ; CHECK: ret float -1.000000e+00 } -define float @fdiv_neg_invalid1(float %f) { - %neg = fsub fast float -0.000000e+00, %f - %div = fdiv ninf float %neg, %f - ret float %div -; CHECK-LABEL: fdiv_neg_invalid1 -; CHECK: %neg = fsub fast float -0.000000e+00, %f -; CHECK-NEXT: %div = fdiv ninf float %neg, %f -; CHECK-NEXT: ret float %div -} - -define float @fdiv_neg_invalid2(float %f) { - %neg = fsub fast float -0.000000e+00, %f +define float @fdiv_neg2(float %f) { + %neg = fsub fast float 0.000000e+00, %f %div = fdiv nnan float %neg, %f ret float %div -; CHECK-LABEL: fdiv_neg_invalid2 -; CHECK: %neg = fsub fast float -0.000000e+00, %f -; CHECK-NEXT: %div = fdiv nnan float %neg, %f -; CHECK-NEXT: ret float %div +; CHECK-LABEL: fdiv_neg2 +; CHECK: ret float -1.000000e+00 } -define float @fdiv_neg_invalid3(float %f) { +define float @fdiv_neg_invalid(float %f) { %neg = fsub fast float -0.000000e+00, %f %div = fdiv float %neg, %f ret float %div -; CHECK-LABEL: fdiv_neg_invalid3 +; CHECK-LABEL: fdiv_neg_invalid ; CHECK: %neg = fsub fast float -0.000000e+00, %f ; CHECK-NEXT: %div = fdiv float %neg, %f ; CHECK-NEXT: ret float %div } -define float @fdiv_neg_swapped(float %f) { +define float @fdiv_neg_swapped1(float %f) { + %neg = fsub float -0.000000e+00, %f + %div = fdiv nnan float %f, %neg + ret float %div +; CHECK-LABEL: fdiv_neg_swapped1 +; CHECK: ret float -1.000000e+00 +} + +define float @fdiv_neg_swapped2(float %f) { %neg = fsub float 0.000000e+00, %f - %div = fdiv nnan ninf float %f, %neg + %div = fdiv nnan float %f, %neg ret float %div -; CHECK-LABEL: fdiv_neg_swapped +; CHECK-LABEL: fdiv_neg_swapped2 ; CHECK: ret float -1.000000e+00 } |