mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
MI-Sched: Model "reserved" processor resources.
This allows a target to use MI-Sched as an in-order scheduler that will model strict resource conflicts without defining a processor itinerary. Instead, the target can now use the new per-operand machine model and define in-order resources with BufferSize=0. For example, this would allow restricting the type of operations that can be formed into a dispatch group. (Normally NumMicroOps is sufficient to enforce dispatch groups). If the intent is to model latency in in-order pipeline, as opposed to resource conflicts, then a resource with BufferSize=1 should be defined instead. This feature is only casually tested as there are no in-tree targets using it yet. However, Hal will be experimenting with POWER7. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196517 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -292,7 +292,8 @@ namespace llvm {
|
||||
bool isScheduleHigh : 1; // True if preferable to schedule high.
|
||||
bool isScheduleLow : 1; // True if preferable to schedule low.
|
||||
bool isCloned : 1; // True if this node has been cloned.
|
||||
bool isUnbuffered : 1; // Reads an unbuffered resource.
|
||||
bool isUnbuffered : 1; // Uses an unbuffered resource.
|
||||
bool hasReservedResource : 1; // Uses a reserved resource.
|
||||
Sched::Preference SchedulingPref; // Scheduling preference.
|
||||
|
||||
private:
|
||||
@@ -318,9 +319,9 @@ namespace llvm {
|
||||
hasPhysRegDefs(false), hasPhysRegClobbers(false), isPending(false),
|
||||
isAvailable(false), isScheduled(false), isScheduleHigh(false),
|
||||
isScheduleLow(false), isCloned(false), isUnbuffered(false),
|
||||
SchedulingPref(Sched::None), isDepthCurrent(false),
|
||||
isHeightCurrent(false), Depth(0), Height(0), TopReadyCycle(0),
|
||||
BotReadyCycle(0), CopyDstRC(NULL), CopySrcRC(NULL) {}
|
||||
hasReservedResource(false), SchedulingPref(Sched::None),
|
||||
isDepthCurrent(false), isHeightCurrent(false), Depth(0), Height(0),
|
||||
TopReadyCycle(0), BotReadyCycle(0), CopyDstRC(NULL), CopySrcRC(NULL) {}
|
||||
|
||||
/// SUnit - Construct an SUnit for post-regalloc scheduling to represent
|
||||
/// a MachineInstr.
|
||||
@@ -333,9 +334,9 @@ namespace llvm {
|
||||
hasPhysRegDefs(false), hasPhysRegClobbers(false), isPending(false),
|
||||
isAvailable(false), isScheduled(false), isScheduleHigh(false),
|
||||
isScheduleLow(false), isCloned(false), isUnbuffered(false),
|
||||
SchedulingPref(Sched::None), isDepthCurrent(false),
|
||||
isHeightCurrent(false), Depth(0), Height(0), TopReadyCycle(0),
|
||||
BotReadyCycle(0), CopyDstRC(NULL), CopySrcRC(NULL) {}
|
||||
hasReservedResource(false), SchedulingPref(Sched::None),
|
||||
isDepthCurrent(false), isHeightCurrent(false), Depth(0), Height(0),
|
||||
TopReadyCycle(0), BotReadyCycle(0), CopyDstRC(NULL), CopySrcRC(NULL) {}
|
||||
|
||||
/// SUnit - Construct a placeholder SUnit.
|
||||
SUnit()
|
||||
@@ -347,9 +348,9 @@ namespace llvm {
|
||||
hasPhysRegDefs(false), hasPhysRegClobbers(false), isPending(false),
|
||||
isAvailable(false), isScheduled(false), isScheduleHigh(false),
|
||||
isScheduleLow(false), isCloned(false), isUnbuffered(false),
|
||||
SchedulingPref(Sched::None), isDepthCurrent(false),
|
||||
isHeightCurrent(false), Depth(0), Height(0), TopReadyCycle(0),
|
||||
BotReadyCycle(0), CopyDstRC(NULL), CopySrcRC(NULL) {}
|
||||
hasReservedResource(false), SchedulingPref(Sched::None),
|
||||
isDepthCurrent(false), isHeightCurrent(false), Depth(0), Height(0),
|
||||
TopReadyCycle(0), BotReadyCycle(0), CopyDstRC(NULL), CopySrcRC(NULL) {}
|
||||
|
||||
/// \brief Boundary nodes are placeholders for the boundary of the
|
||||
/// scheduling region.
|
||||
|
Reference in New Issue
Block a user