Make a vector live across blocks have the correct Vec type. This fixes

CodeGen/X86/2006-04-04-CrossBlockCrash.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27436 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2006-04-05 06:54:42 +00:00
parent 604fb320c3
commit 2e2ef95350

View File

@ -648,7 +648,8 @@ SDOperand SelectionDAGLowering::getValue(const Value *V) {
// Otherwise, if this is a vector, make it available as a generic vector // Otherwise, if this is a vector, make it available as a generic vector
// here. // here.
MVT::ValueType PTyElementVT, PTyLegalElementVT; 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); PTyLegalElementVT);
// Build a VBUILD_VECTOR with the input registers. // Build a VBUILD_VECTOR with the input registers.
@ -684,6 +685,13 @@ SDOperand SelectionDAGLowering::getValue(const Value *V) {
Ops.push_back(DAG.getConstant(NE, MVT::i32)); Ops.push_back(DAG.getConstant(NE, MVT::i32));
Ops.push_back(DAG.getValueType(PTyLegalElementVT)); Ops.push_back(DAG.getValueType(PTyLegalElementVT));
N = DAG.getNode(ISD::VBUILD_VECTOR, MVT::Vector, Ops); 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; return N;