Insert a VBIT_CONVERT between a FORMAL_ARGUMENT node and its vector uses

(VAND, VADD, etc.). Legalizer will assert otherwise.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27991 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng 2006-04-27 08:29:42 +00:00
parent f9b458c88b
commit f7179bb56e

View File

@ -2988,6 +2988,19 @@ LowerArguments(BasicBlock *BB, SelectionDAGLowering &SDL,
if (!AI->use_empty()) {
SDL.setValue(AI, Args[a]);
MVT::ValueType VT = TLI.getValueType(AI->getType());
if (VT == MVT::Vector) {
// Insert a VBIT_CONVERT between the FORMAL_ARGUMENT node and its uses.
// Or else legalizer will balk.
BasicBlock::iterator InsertPt = BB->begin();
Value *NewVal = new CastInst(AI, AI->getType(), AI->getName(), InsertPt);
for (Value::use_iterator UI = AI->use_begin(), E = AI->use_end();
UI != E; ++UI) {
Instruction *User = cast<Instruction>(*UI);
if (User != NewVal)
User->replaceUsesOfWith(AI, NewVal);
}
}
// If this argument is live outside of the entry block, insert a copy from
// whereever we got it to the vreg that other BB's will reference it as.
if (FuncInfo.ValueMap.count(AI)) {