summaryrefslogtreecommitdiffstats
path: root/include/llvm/CodeGen
diff options
context:
space:
mode:
authorDale Johannesen <dalej@apple.com>2008-09-19 01:02:35 +0000
committerDale Johannesen <dalej@apple.com>2008-09-19 01:02:35 +0000
commitfa48f941304f29f967e0a7fc6807d7026ba99b7b (patch)
treea8f9875394aebdba26f7d1b2f886ead96f181e1f /include/llvm/CodeGen
parent4fe0fe8b493437e91f8510b81462ff39f0d889ca (diff)
downloadexternal_llvm-fa48f941304f29f967e0a7fc6807d7026ba99b7b.zip
external_llvm-fa48f941304f29f967e0a7fc6807d7026ba99b7b.tar.gz
external_llvm-fa48f941304f29f967e0a7fc6807d7026ba99b7b.tar.bz2
Remove AsmThatEarlyClobber etc. from LiveIntervalAnalysis
and redo as linked list walk. Logic moved into RA. Per review feedback. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56326 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/CodeGen')
-rw-r--r--include/llvm/CodeGen/LiveInterval.h9
-rw-r--r--include/llvm/CodeGen/LiveIntervalAnalysis.h21
2 files changed, 7 insertions, 23 deletions
diff --git a/include/llvm/CodeGen/LiveInterval.h b/include/llvm/CodeGen/LiveInterval.h
index 5e5e4b1..8b9eb53 100644
--- a/include/llvm/CodeGen/LiveInterval.h
+++ b/include/llvm/CodeGen/LiveInterval.h
@@ -105,12 +105,17 @@ namespace llvm {
// if the top bits is set, it represents a stack slot.
unsigned preference; // preferred register to allocate for this interval
float weight; // weight of this interval
+ bool isEarlyClobber;
+ bool overlapsEarlyClobber;
Ranges ranges; // the ranges in which this register is live
VNInfoList valnos; // value#'s
public:
- LiveInterval(unsigned Reg, float Weight, bool IsSS = false)
- : reg(Reg), preference(0), weight(Weight) {
+ LiveInterval(unsigned Reg, float Weight, bool IsSS = false,
+ bool IsEarlyClobber = false, bool OverlapsEarlyClobber = false)
+ : reg(Reg), preference(0), weight(Weight),
+ isEarlyClobber(IsEarlyClobber),
+ overlapsEarlyClobber(OverlapsEarlyClobber) {
if (IsSS)
reg = reg | (1U << (sizeof(unsigned)*8-1));
}
diff --git a/include/llvm/CodeGen/LiveIntervalAnalysis.h b/include/llvm/CodeGen/LiveIntervalAnalysis.h
index 31eadcf..1910649 100644
--- a/include/llvm/CodeGen/LiveIntervalAnalysis.h
+++ b/include/llvm/CodeGen/LiveIntervalAnalysis.h
@@ -65,22 +65,6 @@ namespace llvm {
AliasAnalysis *aa_;
LiveVariables* lv_;
- /// AsmsWithEarlyClobber - maps a virtual register number to all the
- /// inline asm's that have the register marked earlyclobber.
- ///
- std::multimap<unsigned, MachineInstr*> AsmsThatEarlyClobber;
-
- /// AsmsWithEarlyClobberConflict - maps a virtual register number
- /// to all the inline asm's that have earlyclobber operands elsewhere
- /// and use the register as a (non-earlyclobber) input.
- ///
- /// Note: earlyclobber operands may not be assigned the same register as
- /// each other, or as earlyclobber-conflict operands. However two
- /// earlyclobber-conflict operands may be assigned the same register if
- /// they happen to contain the same value.
- ///
- std::multimap<unsigned, MachineInstr*> AsmsWithEarlyClobberConflict;
-
/// Special pool allocator for VNInfo's (LiveInterval val#).
///
BumpPtrAllocator VNInfoAllocator;
@@ -353,11 +337,6 @@ namespace llvm {
unsigned getNumConflictsWithPhysReg(const LiveInterval &li,
unsigned PhysReg) const;
- /// noEarlyclobberConflict - see whether virtual reg VReg has a conflict
- /// with hard reg HReg because HReg is used as an earlyclobber register in
- /// asm that also has VReg live into or across it.
- bool noEarlyclobberConflict(unsigned VReg, VirtRegMap &vrm, unsigned HReg);
-
/// computeNumbering - Compute the index numbering.
void computeNumbering();