If a node that defines a physical register that is expensive to copy. The

scheduler will try a number of tricks in order to avoid generating the
copies. This may not be possible in case the node produces a chain value
that prevent movement. Try unfolding the load from the node before to allow
it to be moved / cloned.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42625 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng
2007-10-05 01:39:18 +00:00
parent 75b4e46b8a
commit f10c973797
3 changed files with 177 additions and 55 deletions

View File

@@ -115,7 +115,7 @@ namespace llvm {
short NumSuccsLeft; // # of succs not scheduled.
bool isTwoAddress : 1; // Is a two-address instruction.
bool isCommutable : 1; // Is a commutable instruction.
bool hasPhysRegDefs : 1; // Has physreg defs that are being used.
bool hasPhysRegDefs : 1; // Has physreg defs that are being used.
bool isPending : 1; // True once pending.
bool isAvailable : 1; // True once available.
bool isScheduled : 1; // True once scheduled.
@@ -297,6 +297,10 @@ namespace llvm {
/// together nodes with a single SUnit.
void BuildSchedUnits();
/// ComputeLatency - Compute node latency.
///
void ComputeLatency(SUnit *SU);
/// CalculateDepths, CalculateHeights - Calculate node depth / height.
///
void CalculateDepths();