[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

Chris Lattner lattner at cs.uiuc.edu
Tue Apr 4 23:54:55 PDT 2006



Changes in directory llvm/lib/CodeGen/SelectionDAG:

SelectionDAGISel.cpp updated: 1.217 -> 1.218
---
Log message:

Make a vector live across blocks have the correct Vec type.  This fixes
CodeGen/X86/2006-04-04-CrossBlockCrash.ll



---
Diffs of the changes:  (+9 -1)

 SelectionDAGISel.cpp |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.217 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.218
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.217	Sat Apr  1 21:41:14 2006
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp	Wed Apr  5 01:54:42 2006
@@ -648,7 +648,8 @@
     // Otherwise, if this is a vector, make it available as a generic vector
     // here.
     MVT::ValueType PTyElementVT, PTyLegalElementVT;
-    unsigned NE = TLI.getPackedTypeBreakdown(cast<PackedType>(VTy),PTyElementVT,
+    const PackedType *PTy = cast<PackedType>(VTy);
+    unsigned NE = TLI.getPackedTypeBreakdown(PTy, PTyElementVT,
                                              PTyLegalElementVT);
 
     // Build a VBUILD_VECTOR with the input registers.
@@ -684,6 +685,13 @@
     Ops.push_back(DAG.getConstant(NE, MVT::i32));
     Ops.push_back(DAG.getValueType(PTyLegalElementVT));
     N = DAG.getNode(ISD::VBUILD_VECTOR, MVT::Vector, Ops);
+    
+    // Finally, use a VBIT_CONVERT to make this available as the appropriate
+    // vector type.
+    N = DAG.getNode(ISD::VBIT_CONVERT, MVT::Vector, N, 
+                    DAG.getConstant(PTy->getNumElements(),
+                                    MVT::i32),
+                    DAG.getValueType(TLI.getValueType(PTy->getElementType())));
   }
   
   return N;






More information about the llvm-commits mailing list