mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-29 13:32:33 +00:00
misched: Added CanHandleTerminators.
This is a special flag for targets that really want their block terminators in the DAG. The default scheduler cannot handle this correctly, so it becomes the specialized scheduler's responsibility to schedule terminators. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154712 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6335e41d38
commit
0070792012
@ -181,6 +181,13 @@ namespace llvm {
|
||||
/// the def-side latency only.
|
||||
bool UnitLatencies;
|
||||
|
||||
/// The standard DAG builder does not normally include terminators as DAG
|
||||
/// nodes because it does not create the necessary dependencies to prevent
|
||||
/// reordering. A specialized scheduler can overide
|
||||
/// TargetInstrInfo::isSchedulingBoundary then enable this flag to indicate
|
||||
/// it has taken responsibility for scheduling the terminator correctly.
|
||||
bool CanHandleTerminators;
|
||||
|
||||
/// State specific to the current scheduling region.
|
||||
/// ------------------------------------------------
|
||||
|
||||
|
@ -39,8 +39,8 @@ ScheduleDAGInstrs::ScheduleDAGInstrs(MachineFunction &mf,
|
||||
LiveIntervals *lis)
|
||||
: ScheduleDAG(mf), MLI(mli), MDT(mdt), MFI(mf.getFrameInfo()),
|
||||
InstrItins(mf.getTarget().getInstrItineraryData()), LIS(lis),
|
||||
IsPostRA(IsPostRAFlag), UnitLatencies(false), LoopRegs(MLI, MDT),
|
||||
FirstDbgValue(0) {
|
||||
IsPostRA(IsPostRAFlag), UnitLatencies(false), CanHandleTerminators(false),
|
||||
LoopRegs(MLI, MDT), FirstDbgValue(0) {
|
||||
assert((IsPostRA || LIS) && "PreRA scheduling requires LiveIntervals");
|
||||
DbgValues.clear();
|
||||
assert(!(IsPostRA && MRI.getNumVirtRegs()) &&
|
||||
@ -554,7 +554,7 @@ void ScheduleDAGInstrs::buildSchedGraph(AliasAnalysis *AA) {
|
||||
continue;
|
||||
}
|
||||
|
||||
assert(!MI->isTerminator() && !MI->isLabel() &&
|
||||
assert((!MI->isTerminator() || CanHandleTerminators) && !MI->isLabel() &&
|
||||
"Cannot schedule terminators or labels!");
|
||||
|
||||
SUnit *SU = MISUnitMap[MI];
|
||||
|
Loading…
x
Reference in New Issue
Block a user