mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-12 07:37:34 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225907 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
73f9065770
commit
7a4708e0eb
@ -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…
x
Reference in New Issue
Block a user