summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2018-03-02 01:34:42 +0000
committerCraig Topper <craig.topper@intel.com>2018-03-02 01:34:42 +0000
commit8cb5fc15eed05fe430012e55b3ddc7777d0a7c9e (patch)
treea75d8b3601b9219e0b5736b92fabbd9f49ecc036
parent796d4a885d9ae896d92c838c5d49adc7ef645e62 (diff)
downloadbcm5719-llvm-8cb5fc15eed05fe430012e55b3ddc7777d0a7c9e.tar.gz
bcm5719-llvm-8cb5fc15eed05fe430012e55b3ddc7777d0a7c9e.zip
[InstCombine] Add more test case to fpextend.ll.
This includes the test cases from D43970 and additional tests for combining (fptrunc (binop (fpext), (fpext))) where the pre-extended types don't match the trunc and therefore can't be completely removed. llvm-svn: 326528
-rw-r--r--llvm/test/Transforms/InstCombine/fpextend.ll186
1 files changed, 186 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/fpextend.ll b/llvm/test/Transforms/InstCombine/fpextend.ll
index 215e36120ba..baac3ae457c 100644
--- a/llvm/test/Transforms/InstCombine/fpextend.ll
+++ b/llvm/test/Transforms/InstCombine/fpextend.ll
@@ -86,3 +86,189 @@ entry:
%tmp34 = fptrunc <2 x double> %tmp3 to <2 x float>
ret <2 x float> %tmp34
}
+
+define <2 x float> @not_half_shrinkable(<2 x float> %x) {
+; CHECK-LABEL: @not_half_shrinkable(
+; CHECK-NEXT: [[EXT:%.*]] = fpext <2 x float> [[X:%.*]] to <2 x double>
+; CHECK-NEXT: [[ADD:%.*]] = fadd <2 x double> [[EXT]], <double 0.000000e+00, double 2.049000e+03>
+; CHECK-NEXT: [[R:%.*]] = fptrunc <2 x double> [[ADD]] to <2 x float>
+; CHECK-NEXT: ret <2 x float> [[R]]
+;
+ %ext = fpext <2 x float> %x to <2 x double>
+ %add = fadd <2 x double> %ext, <double 0.0, double 2049.0>
+ %r = fptrunc <2 x double> %add to <2 x float>
+ ret <2 x float> %r
+}
+
+define half @test7(float %a) nounwind {
+; CHECK-LABEL: @test7(
+; CHECK-NEXT: [[Y:%.*]] = fpext float [[A:%.*]] to double
+; CHECK-NEXT: [[Z:%.*]] = fptrunc double [[Y]] to half
+; CHECK-NEXT: ret half [[Z]]
+;
+ %y = fpext float %a to double
+ %z = fptrunc double %y to half
+ ret half %z
+}
+
+define float @test8(half %a) nounwind {
+; CHECK-LABEL: @test8(
+; CHECK-NEXT: [[Y:%.*]] = fpext half [[A:%.*]] to double
+; CHECK-NEXT: [[Z:%.*]] = fptrunc double [[Y]] to float
+; CHECK-NEXT: ret float [[Z]]
+;
+ %y = fpext half %a to double
+ %z = fptrunc double %y to float
+ ret float %z
+}
+
+define float @test9(half %x, half %y) nounwind {
+; CHECK-LABEL: @test9(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = fpext half [[X:%.*]] to float
+; CHECK-NEXT: [[TMP1:%.*]] = fpext half [[Y:%.*]] to float
+; CHECK-NEXT: [[TMP56:%.*]] = fmul float [[TMP0]], [[TMP1]]
+; CHECK-NEXT: ret float [[TMP56]]
+;
+entry:
+ %tmp1 = fpext half %x to double
+ %tmp23 = fpext half %y to double
+ %tmp5 = fmul double %tmp1, %tmp23
+ %tmp56 = fptrunc double %tmp5 to float
+ ret float %tmp56
+}
+
+define float @test10(half %x, float %y) nounwind {
+; CHECK-LABEL: @test10(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = fpext half [[X:%.*]] to float
+; CHECK-NEXT: [[TMP56:%.*]] = fmul float [[TMP0]], [[Y:%.*]]
+; CHECK-NEXT: ret float [[TMP56]]
+;
+entry:
+ %tmp1 = fpext half %x to double
+ %tmp23 = fpext float %y to double
+ %tmp5 = fmul double %tmp1, %tmp23
+ %tmp56 = fptrunc double %tmp5 to float
+ ret float %tmp56
+}
+
+define float @test11(half %x) nounwind {
+; CHECK-LABEL: @test11(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = fpext half [[X:%.*]] to float
+; CHECK-NEXT: [[TMP34:%.*]] = fadd float [[TMP0]], 0.000000e+00
+; CHECK-NEXT: ret float [[TMP34]]
+;
+entry:
+ %tmp1 = fpext half %x to double
+ %tmp3 = fadd double %tmp1, 0.000000e+00
+ %tmp34 = fptrunc double %tmp3 to float
+ ret float %tmp34
+}
+
+define float @test12(float %x, half %y) nounwind {
+; CHECK-LABEL: @test12(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = fpext half [[Y:%.*]] to float
+; CHECK-NEXT: [[TMP34:%.*]] = fadd float [[TMP0]], [[X:%.*]]
+; CHECK-NEXT: ret float [[TMP34]]
+;
+entry:
+ %tmp1 = fpext float %x to double
+ %tmp2 = fpext half %y to double
+ %tmp3 = fadd double %tmp1, %tmp2
+ %tmp34 = fptrunc double %tmp3 to float
+ ret float %tmp34
+}
+
+define float @test13(half %x, float %y) nounwind {
+; CHECK-LABEL: @test13(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = fpext half [[X:%.*]] to float
+; CHECK-NEXT: [[TMP56:%.*]] = fdiv float [[TMP0]], [[Y:%.*]]
+; CHECK-NEXT: ret float [[TMP56]]
+;
+entry:
+ %tmp1 = fpext half %x to double
+ %tmp23 = fpext float %y to double
+ %tmp5 = fdiv double %tmp1, %tmp23
+ %tmp56 = fptrunc double %tmp5 to float
+ ret float %tmp56
+}
+
+define float @test14(float %x, half %y) nounwind {
+; CHECK-LABEL: @test14(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = fpext half [[Y:%.*]] to float
+; CHECK-NEXT: [[TMP56:%.*]] = fdiv float [[X:%.*]], [[TMP0]]
+; CHECK-NEXT: ret float [[TMP56]]
+;
+entry:
+ %tmp1 = fpext float %x to double
+ %tmp23 = fpext half %y to double
+ %tmp5 = fdiv double %tmp1, %tmp23
+ %tmp56 = fptrunc double %tmp5 to float
+ ret float %tmp56
+}
+
+define float @test15(half %x, half %y) nounwind {
+; CHECK-LABEL: @test15(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = fpext half [[X:%.*]] to float
+; CHECK-NEXT: [[TMP1:%.*]] = fpext half [[Y:%.*]] to float
+; CHECK-NEXT: [[TMP56:%.*]] = fdiv float [[TMP0]], [[TMP1]]
+; CHECK-NEXT: ret float [[TMP56]]
+;
+entry:
+ %tmp1 = fpext half %x to double
+ %tmp23 = fpext half %y to double
+ %tmp5 = fdiv double %tmp1, %tmp23
+ %tmp56 = fptrunc double %tmp5 to float
+ ret float %tmp56
+}
+
+define float @test16(half %x, float %y) nounwind {
+; CHECK-LABEL: @test16(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = fpext half [[X:%.*]] to float
+; CHECK-NEXT: [[TMP1:%.*]] = frem float [[TMP0]], [[Y:%.*]]
+; CHECK-NEXT: ret float [[TMP1]]
+;
+entry:
+ %tmp1 = fpext half %x to double
+ %tmp23 = fpext float %y to double
+ %tmp5 = frem double %tmp1, %tmp23
+ %tmp56 = fptrunc double %tmp5 to float
+ ret float %tmp56
+}
+
+define float @test17(float %x, half %y) nounwind {
+; CHECK-LABEL: @test17(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = fpext half [[Y:%.*]] to float
+; CHECK-NEXT: [[TMP1:%.*]] = frem float [[X:%.*]], [[TMP0]]
+; CHECK-NEXT: ret float [[TMP1]]
+;
+entry:
+ %tmp1 = fpext float %x to double
+ %tmp23 = fpext half %y to double
+ %tmp5 = frem double %tmp1, %tmp23
+ %tmp56 = fptrunc double %tmp5 to float
+ ret float %tmp56
+}
+
+define float @test18(half %x, half %y) nounwind {
+; CHECK-LABEL: @test18(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = frem half [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT: [[TMP56:%.*]] = fpext half [[TMP0]] to float
+; CHECK-NEXT: ret float [[TMP56]]
+;
+entry:
+ %tmp1 = fpext half %x to double
+ %tmp23 = fpext half %y to double
+ %tmp5 = frem double %tmp1, %tmp23
+ %tmp56 = fptrunc double %tmp5 to float
+ ret float %tmp56
+}
OpenPOWER on IntegriCloud