From feb34713d531d1f48c37116e8cab84814202d057 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Mon, 12 Aug 2013 07:26:09 +0000 Subject: Fix big-endian handling of integer-to-vector bitcasts in InstCombine These functions used to assume that the lsb of an integer corresponds to vector element 0, whereas for big-endian it's the other way around: the msb is in the first element and the lsb is in the last element. Fixes MultiSource/Benchmarks/mediabench/gsm/toast for z. llvm-svn: 188155 --- .../Transforms/InstCombine/bitcast-bigendian.ll | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'llvm/test/Transforms') diff --git a/llvm/test/Transforms/InstCombine/bitcast-bigendian.ll b/llvm/test/Transforms/InstCombine/bitcast-bigendian.ll index 28b0e9ae3fa..ed812e15f38 100644 --- a/llvm/test/Transforms/InstCombine/bitcast-bigendian.ll +++ b/llvm/test/Transforms/InstCombine/bitcast-bigendian.ll @@ -48,3 +48,44 @@ define float @test3(<2 x float> %A, <2 x i64> %B) { ; CHECK-NEXT: ret float %add } +define <2 x i32> @test4(i32 %A, i32 %B){ + %tmp38 = zext i32 %A to i64 + %tmp32 = zext i32 %B to i64 + %tmp33 = shl i64 %tmp32, 32 + %ins35 = or i64 %tmp33, %tmp38 + %tmp43 = bitcast i64 %ins35 to <2 x i32> + ret <2 x i32> %tmp43 + ; CHECK-LABEL: @test4( + ; CHECK-NEXT: insertelement <2 x i32> undef, i32 %B, i32 0 + ; CHECK-NEXT: insertelement <2 x i32> {{.*}}, i32 %A, i32 1 + ; CHECK-NEXT: ret <2 x i32> + +} + +define <2 x float> @test5(float %A, float %B) { + %tmp37 = bitcast float %A to i32 + %tmp38 = zext i32 %tmp37 to i64 + %tmp31 = bitcast float %B to i32 + %tmp32 = zext i32 %tmp31 to i64 + %tmp33 = shl i64 %tmp32, 32 + %ins35 = or i64 %tmp33, %tmp38 + %tmp43 = bitcast i64 %ins35 to <2 x float> + ret <2 x float> %tmp43 + ; CHECK-LABEL: @test5( + ; CHECK-NEXT: insertelement <2 x float> undef, float %B, i32 0 + ; CHECK-NEXT: insertelement <2 x float> {{.*}}, float %A, i32 1 + ; CHECK-NEXT: ret <2 x float> +} + +define <2 x float> @test6(float %A){ + %tmp23 = bitcast float %A to i32 ; [#uses=1] + %tmp24 = zext i32 %tmp23 to i64 ; [#uses=1] + %tmp25 = shl i64 %tmp24, 32 ; [#uses=1] + %mask20 = or i64 %tmp25, 1109917696 ; [#uses=1] + %tmp35 = bitcast i64 %mask20 to <2 x float> ; <<2 x float>> [#uses=1] + ret <2 x float> %tmp35 +; CHECK-LABEL: @test6( +; CHECK-NEXT: insertelement <2 x float> undef, float %A, i32 0 +; CHECK-NEXT: insertelement <2 x float> {{.*}}, float 4.200000e+01, i32 1 +; CHECK: ret +} -- cgit v1.2.3