summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKalle Raiskila <kalle.raiskila@nokia.com>2010-06-21 14:42:19 +0000
committerKalle Raiskila <kalle.raiskila@nokia.com>2010-06-21 14:42:19 +0000
commitd7f50c118ab3e16de75dd49559dc431ce46c48a5 (patch)
tree81cfbbad3d489f4317d76f8b9f68f7ffcd449e56
parent1e909fc0b6d15111e6bb6d680014115d6bcadd72 (diff)
downloadbcm5719-llvm-d7f50c118ab3e16de75dd49559dc431ce46c48a5.tar.gz
bcm5719-llvm-d7f50c118ab3e16de75dd49559dc431ce46c48a5.zip
Fix the lowering of VECTOR_SHUFFLE on SPU to handle splats.
llvm-svn: 106419
-rw-r--r--llvm/lib/Target/CellSPU/SPUISelLowering.cpp2
-rw-r--r--llvm/test/CodeGen/CellSPU/shuffles.ll7
2 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/Target/CellSPU/SPUISelLowering.cpp b/llvm/lib/Target/CellSPU/SPUISelLowering.cpp
index 148cb46c97f..ba281cd463c 100644
--- a/llvm/lib/Target/CellSPU/SPUISelLowering.cpp
+++ b/llvm/lib/Target/CellSPU/SPUISelLowering.cpp
@@ -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 {
diff --git a/llvm/test/CodeGen/CellSPU/shuffles.ll b/llvm/test/CodeGen/CellSPU/shuffles.ll
index 20ac5705586..85b16506e95 100644
--- a/llvm/test/CodeGen/CellSPU/shuffles.ll
+++ b/llvm/test/CodeGen/CellSPU/shuffles.ll
@@ -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
+}
+
OpenPOWER on IntegriCloud