Fix the lowering of VECTOR_SHUFFLE on SPU to handle splats.
authorKalle Raiskila <kalle.raiskila@nokia.com>
Mon, 21 Jun 2010 14:42:19 +0000 (14:42 +0000)
committerKalle Raiskila <kalle.raiskila@nokia.com>
Mon, 21 Jun 2010 14:42:19 +0000 (14:42 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106419 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/CellSPU/SPUISelLowering.cpp
test/CodeGen/CellSPU/shuffles.ll

index 148cb46c97f4a4d0643a22c8addfe17a81269ce8..ba281cd463ccbdab76398b4ab52ca07dcba5504c 100644 (file)
@@ -1791,7 +1791,7 @@ static SDValue LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG) {
         } else {
           rotate = false;
         }
-      } else if (PrevElt == 0) {
+      } else if (i == 0) {
         // First time through, need to keep track of previous element
         PrevElt = SrcElt;
       } else {
index 20ac57055865db69d64370636e4f620122291499..85b16506e9594615f0941498ade0525f205327ba 100644 (file)
@@ -5,6 +5,11 @@ define <4 x float> @shuffle(<4 x float> %param1, <4 x float> %param2) {
   ; CHECK: shufb {{\$., \$4, \$3, \$.}}
   %val= shufflevector <4 x float> %param1, <4 x float> %param2, <4 x i32> <i32 4,i32 1,i32 2,i32 3>
   ret <4 x float> %val
-  
 }
  
+define <4 x float> @splat(float %param1) {
+  %vec = insertelement <1 x float> undef, float %param1, i32 0
+  %val= shufflevector <1 x float> %vec, <1 x float> undef, <4 x i32> <i32 0,i32 0,i32 0,i32 0>
+  ret <4 x float> %val  
+}
+