More SPU v2f32 stuff added: insertelement and shuffle.
authorKalle Raiskila <kalle.raiskila@nokia.com>
Mon, 2 Aug 2010 11:22:10 +0000 (11:22 +0000)
committerKalle Raiskila <kalle.raiskila@nokia.com>
Mon, 2 Aug 2010 11:22:10 +0000 (11:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110038 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/CellSPU/SPUISelLowering.cpp
lib/Target/CellSPU/SPUInstrInfo.td
test/CodeGen/CellSPU/v2f32.ll

index 83726f2ea540e2cd8406cce41c6904d18f4eaf90..3a945ceedbf7ef8d1950d72c01b61acf93ecb5f9 100644 (file)
@@ -1624,6 +1624,7 @@ LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) {
     SDValue T = DAG.getConstant(unsigned(SplatBits), VT.getVectorElementType());
     return DAG.getNode(ISD::BUILD_VECTOR, dl, VT, T, T, T, T);
   }
+  case MVT::v2f32:
   case MVT::v2i32: {
     return SDValue();
   }
index 96b0d5070b0c19e8f0ded4ea123c221b7408107a..803ce567dc46f818529c7227da6323cb0070c40c 100644 (file)
@@ -1584,6 +1584,9 @@ def : Pat<(v2i64 (SPUprefslot2vec R64C:$rA)),
 def : Pat<(v4f32 (SPUprefslot2vec R32FP:$rA)),
           (ORv4f32_f32 R32FP:$rA)>;
 
+def : Pat<(v2f32 (SPUprefslot2vec R32FP:$rA)),
+          (ORv4f32_f32 R32FP:$rA)>;
+
 def : Pat<(v2f64 (SPUprefslot2vec R64FP:$rA)),
           (ORv2f64_f64 R64FP:$rA)>;
 
@@ -1608,6 +1611,9 @@ def : Pat<(SPUvec2prefslot (v2i64 VECREG:$rA)),
 def : Pat<(SPUvec2prefslot (v4f32 VECREG:$rA)),
           (ORf32_v4f32 VECREG:$rA)>;
 
+def : Pat<(SPUvec2prefslot (v2f32 VECREG:$rA)),
+          (ORf32_v4f32 VECREG:$rA)>;
+
 def : Pat<(SPUvec2prefslot (v2f64 VECREG:$rA)),
           (ORf64_v2f64 VECREG:$rA)>;
 
@@ -2150,6 +2156,8 @@ multiclass ShuffleBytes
 
   def v4f32     : SHUFBVecInst<v4f32, v16i8>;
   def v4f32_m32 : SHUFBVecInst<v4f32, v4i32>;
+  def v2f32     : SHUFBVecInst<v2f32, v16i8>;
+  def v2f32_m32 : SHUFBVecInst<v2f32, v4i32>;
 
   def v2f64     : SHUFBVecInst<v2f64, v16i8>;
   def v2f64_m32 : SHUFBVecInst<v2f64, v4i32>;
index 2631777511dbce6b8c27ad3fe51beeb86d94f42d..004463a86d306a8bd0f294659c57b428cfc1cc46 100644 (file)
@@ -33,3 +33,13 @@ define %vec @test_mul(%vec %param)
  ret %vec %1
 }
 
+define %vec @test_splat(float %param ) {
+;CHECK: lqa
+;CHECK: shufb
+  %sv = insertelement <1 x float> undef, float %param, i32 0 
+  %rv = shufflevector <1 x float> %sv, <1 x float> undef, <2 x i32> zeroinitializer 
+;CHECK: bi $lr
+  ret %vec %rv
+}
+
+