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);
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;
}
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;
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 + ");");