mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
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:
parent
604fb320c3
commit
2e2ef95350
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user