Fix a bug in LowerV2I64Splat, which generated a BUILD_VECTOR for which there was
authorNadav Rotem <nadav.rotem@intel.com>
Sun, 16 Oct 2011 10:02:06 +0000 (10:02 +0000)
committerNadav Rotem <nadav.rotem@intel.com>
Sun, 16 Oct 2011 10:02:06 +0000 (10:02 +0000)
no pattern.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142130 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 19327d8acf46b741b02223901722c1c687ec2d75..08ebb9291e448cff1ca9aa136cb2c6a3f9bcd27d 100644 (file)
@@ -1752,9 +1752,11 @@ SPU::LowerV2I64Splat(EVT OpVT, SelectionDAG& DAG, uint64_t SplatVal,
 
     // Both upper and lower are special, lower to a constant pool load:
     if (lower_special && upper_special) {
-      SDValue SplatValCN = DAG.getConstant(SplatVal, MVT::i64);
-      return DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v2i64,
-                         SplatValCN, SplatValCN);
+      SDValue UpperVal = DAG.getConstant(upper, MVT::i32);
+      SDValue LowerVal = DAG.getConstant(lower, MVT::i32);
+      SDValue BV = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32,
+                         UpperVal, LowerVal, UpperVal, LowerVal);
+      return DAG.getNode(ISD::BITCAST, dl, OpVT, BV);
     }
 
     SDValue LO32;
index 3252c776ecbfe56e770dd90c7c2d3ca6c7b11906..8ecf15432d5c96ddc2f84a7b52c163cc0c62bff1 100644 (file)
@@ -342,3 +342,7 @@ define <8 x i16> @ashr_v8i16(<8 x i16> %val, <8 x i16> %sh) {
        %rv = ashr <8 x i16> %val, %sh
        ret <8 x i16> %rv
 }
+
+define <2 x i64> @special_const() {
+  ret <2 x i64> <i64 4294967295, i64 4294967295>
+}