forked from OSchip/llvm-project
Adjust ScheduleDAGSDNodes::RegDefIter for patchpoints
PATCHPOINT is a strange pseudo-instruction. Depending on how it is used, and whether or not the AnyReg calling convention is being used, it might or might not define a value. However, its TableGen definition says that it defines one value, and so when it doesn't, the code in ScheduleDAGSDNodes::RegDefIter becomes confused and the code that uses the RegDefIter will try to get the register class of the MVT::Other type associated with the PATCHPOINT's chain result (under certain circumstances). This will be covered by the PPC64 PatchPoint test cases once that support is re-committed. llvm-svn: 225907
This commit is contained in:
parent
637e765907
commit
665026838b
|
@ -551,6 +551,14 @@ void ScheduleDAGSDNodes::RegDefIter::InitNodeNumDefs() {
|
|||
NodeNumDefs = 0;
|
||||
return;
|
||||
}
|
||||
if (POpc == TargetOpcode::PATCHPOINT &&
|
||||
Node->getValueType(0) == MVT::Other) {
|
||||
// PATCHPOINT is defined to have one result, but it might really have none
|
||||
// if we're not using CallingConv::AnyReg. Don't mistake the chain for a
|
||||
// real definition.
|
||||
NodeNumDefs = 0;
|
||||
return;
|
||||
}
|
||||
unsigned NRegDefs = SchedDAG->TII->get(Node->getMachineOpcode()).getNumDefs();
|
||||
// Some instructions define regs that are not represented in the selection DAG
|
||||
// (e.g. unused flags). See tMOVi8. Make sure we don't access past NumValues.
|
||||
|
|
Loading…
Reference in New Issue