diff options
-rw-r--r-- | llvm/test/Transforms/InstCombine/fpextend.ll | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/fpextend.ll b/llvm/test/Transforms/InstCombine/fpextend.ll index 4f5e8e121a3..30930ff71c2 100644 --- a/llvm/test/Transforms/InstCombine/fpextend.ll +++ b/llvm/test/Transforms/InstCombine/fpextend.ll @@ -3,6 +3,7 @@ @X = external global float @Y = external global float +@Z = external global <2 x float> define void @test() nounwind { ; CHECK-LABEL: @test( @@ -77,3 +78,43 @@ entry: store float %tmp34, float* @X, align 4 ret void } + +; Test with vector splat constant +define void @test5() nounwind { +; CHECK-LABEL: @test5( +; CHECK-NEXT: entry: +; CHECK-NEXT: [[TMP:%.*]] = load <2 x float>, <2 x float>* @Z, align 8 +; CHECK-NEXT: [[TMP1:%.*]] = fpext <2 x float> [[TMP]] to <2 x double> +; CHECK-NEXT: [[TMP3:%.*]] = fadd <2 x double> [[TMP1]], zeroinitializer +; CHECK-NEXT: [[TMP34:%.*]] = fptrunc <2 x double> [[TMP3]] to <2 x float> +; CHECK-NEXT: store <2 x float> [[TMP34]], <2 x float>* @Z, align 8 +; CHECK-NEXT: ret void +; +entry: + %tmp = load <2 x float>, <2 x float>* @Z, align 4 + %tmp1 = fpext <2 x float> %tmp to <2 x double> + %tmp3 = fadd <2 x double> %tmp1, <double 0.000000e+00, double 0.000000e+00> + %tmp34 = fptrunc <2 x double> %tmp3 to <2 x float> + store <2 x float> %tmp34, <2 x float>* @Z, align 4 + ret void +} + +; Test with a non-splat constant +define void @test6() nounwind { +; CHECK-LABEL: @test6( +; CHECK-NEXT: entry: +; CHECK-NEXT: [[TMP:%.*]] = load <2 x float>, <2 x float>* @Z, align 8 +; CHECK-NEXT: [[TMP1:%.*]] = fpext <2 x float> [[TMP]] to <2 x double> +; CHECK-NEXT: [[TMP3:%.*]] = fadd <2 x double> [[TMP1]], <double 0.000000e+00, double -0.000000e+00> +; CHECK-NEXT: [[TMP34:%.*]] = fptrunc <2 x double> [[TMP3]] to <2 x float> +; CHECK-NEXT: store <2 x float> [[TMP34]], <2 x float>* @Z, align 8 +; CHECK-NEXT: ret void +; +entry: + %tmp = load <2 x float>, <2 x float>* @Z, align 4 + %tmp1 = fpext <2 x float> %tmp to <2 x double> + %tmp3 = fadd <2 x double> %tmp1, <double 0.000000e+00, double -0.000000e+00> + %tmp34 = fptrunc <2 x double> %tmp3 to <2 x float> + store <2 x float> %tmp34, <2 x float>* @Z, align 4 + ret void +} |