summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2013-12-11 03:40:15 +0000
committerAndrew Trick <atrick@apple.com>2013-12-11 03:40:15 +0000
commit2e3f799f014c978486b9569237d97d6cdd1b8937 (patch)
treed555eb228147158b850d2c5d4b34a946923b9bb9 /include
parentd194a4ae67ed47d128a08ebca2448e154c1367ea (diff)
downloadllvm-2e3f799f014c978486b9569237d97d6cdd1b8937.tar.gz
llvm-2e3f799f014c978486b9569237d97d6cdd1b8937.tar.bz2
llvm-2e3f799f014c978486b9569237d97d6cdd1b8937.tar.xz
Add TargetRegisterInfo::reverseLocalAssignment hook.
This hook reverses the order of assignment for local live ranges. This will generally allocate shorter local live ranges first. For targets with many registers, this could reduce regalloc compile time by a large factor. It should still achieve optimal coloring; however, it can change register eviction decisions. It is disabled by default for two reasons: (1) Top-down allocation is simpler and easier to debug for targets that don't benefit from reversing the order. (2) Bottom-up allocation could result in poor evicition decisions on some targets affecting the performance of compiled code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197001 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/Target/TargetRegisterInfo.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/include/llvm/Target/TargetRegisterInfo.h b/include/llvm/Target/TargetRegisterInfo.h
index 958bea6f2b..5f50e402b9 100644
--- a/include/llvm/Target/TargetRegisterInfo.h
+++ b/include/llvm/Target/TargetRegisterInfo.h
@@ -672,6 +672,17 @@ public:
// Do nothing.
}
+ /// Allow the target to reverse allocation order of local live ranges. This
+ /// will generally allocate shorter local live ranges first. For targets with
+ /// many registers, this could reduce regalloc compile time by a large
+ /// factor. It should still achieve optimal coloring; however, it can change
+ /// register eviction decisions. It is disabled by default for two reasons:
+ /// (1) Top-down allocation is simpler and easier to debug for targets that
+ /// don't benefit from reversing the order.
+ /// (2) Bottom-up allocation could result in poor evicition decisions on some
+ /// targets affecting the performance of compiled code.
+ virtual bool reverseLocalAssignment() const { return false; }
+
/// requiresRegisterScavenging - returns true if the target requires (and can
/// make use of) the register scavenger.
virtual bool requiresRegisterScavenging(const MachineFunction &MF) const {