mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-13 14:35:54 +00:00
Complex pattern's custom matcher should not call Select() on any operands.
Select them afterwards if it returns true. llvm-svn: 25968
This commit is contained in:
parent
0ddab3fc99
commit
6a366c5eda
@ -369,17 +369,11 @@ bool X86DAGToDAGISel::SelectAddr(SDOperand N, SDOperand &Base, SDOperand &Scale,
|
||||
return false;
|
||||
|
||||
if (AM.BaseType == X86ISelAddressMode::RegBase) {
|
||||
if (AM.Base.Reg.Val) {
|
||||
if (AM.Base.Reg.getOpcode() != ISD::Register)
|
||||
AM.Base.Reg = Select(AM.Base.Reg);
|
||||
} else {
|
||||
if (!AM.Base.Reg.Val)
|
||||
AM.Base.Reg = CurDAG->getRegister(0, MVT::i32);
|
||||
}
|
||||
}
|
||||
|
||||
if (AM.IndexReg.Val)
|
||||
AM.IndexReg = Select(AM.IndexReg);
|
||||
else
|
||||
if (!AM.IndexReg.Val)
|
||||
AM.IndexReg = CurDAG->getRegister(0, MVT::i32);
|
||||
|
||||
getAddressOperands(AM, Base, Scale, Index, Disp);
|
||||
@ -441,11 +435,6 @@ bool X86DAGToDAGISel::SelectLEAAddr(SDOperand N, SDOperand &Base,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (SelectBase)
|
||||
AM.Base.Reg = Select(AM.Base.Reg);
|
||||
if (SelectIndex)
|
||||
AM.IndexReg = Select(AM.IndexReg);
|
||||
|
||||
getAddressOperands(AM, Base, Scale, Index, Disp);
|
||||
return true;
|
||||
}
|
||||
@ -461,6 +450,11 @@ SDOperand X86DAGToDAGISel::Select(SDOperand N) {
|
||||
if (Opcode >= ISD::BUILTIN_OP_END && Opcode < X86ISD::FIRST_NUMBER)
|
||||
return N; // Already selected.
|
||||
|
||||
// These are probably emitted by SelectAddr().
|
||||
if (Opcode == ISD::TargetConstant || Opcode == ISD::TargetConstantPool ||
|
||||
Opcode == ISD::TargetFrameIndex || Opcode == ISD::TargetGlobalAddress)
|
||||
return N;
|
||||
|
||||
std::map<SDOperand, SDOperand>::iterator CGMI = CodeGenMap.find(N);
|
||||
if (CGMI != CodeGenMap.end()) return CGMI->second;
|
||||
|
||||
|
@ -2136,6 +2136,11 @@ public:
|
||||
for (unsigned i = 0; i < NumRes; i++)
|
||||
Code += ", Tmp" + utostr(i + ResNo);
|
||||
emitCheck(Code + ")");
|
||||
|
||||
for (unsigned i = 0; i < NumRes; ++i)
|
||||
emitCode("Tmp" + utostr(i+ResNo) + " = Select(Tmp" +
|
||||
utostr(i+ResNo) + ");");
|
||||
|
||||
TmpNo = ResNo + NumRes;
|
||||
} else {
|
||||
emitCode("SDOperand Tmp" + utostr(ResNo) + " = Select(" + Val + ");");
|
||||
|
Loading…
Reference in New Issue
Block a user