From: Chris Lattner Date: Fri, 23 Jul 2004 18:13:24 +0000 (+0000) Subject: Instead of searching for a live interval pair, search for a location. This gives X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=ebd7e6c54dce754a88d8f38df4ac2f388f35435e;p=oota-llvm.git Instead of searching for a live interval pair, search for a location. This gives a very modest speedup of .3 seconds compiling 176.gcc (out of 20s). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15136 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/CodeGen/LiveInterval.h b/include/llvm/CodeGen/LiveInterval.h index 33bc036b66d..d25f7e31a34 100644 --- a/include/llvm/CodeGen/LiveInterval.h +++ b/include/llvm/CodeGen/LiveInterval.h @@ -47,6 +47,11 @@ namespace llvm { }; std::ostream& operator<<(std::ostream& os, const LiveRange &LR); + inline bool operator<(unsigned V, const LiveRange &LR) { + return V < LR.start; + } + + /// LiveInterval - This class represents some number of live ranges for a /// register or value. This class also contains a bit of register allocator /// state. diff --git a/lib/CodeGen/LiveInterval.cpp b/lib/CodeGen/LiveInterval.cpp index 5954b59f150..b0189daf83e 100644 --- a/lib/CodeGen/LiveInterval.cpp +++ b/lib/CodeGen/LiveInterval.cpp @@ -30,16 +30,14 @@ using namespace llvm; // definition of the variable it represents. This is because slot 1 is // used (def slot) and spans up to slot 3 (store slot). // -bool LiveInterval::liveAt(unsigned index) const { - LiveRange dummy(index, index+1); - Ranges::const_iterator r = std::upper_bound(ranges.begin(), - ranges.end(), - dummy); +bool LiveInterval::liveAt(unsigned I) const { + Ranges::const_iterator r = std::upper_bound(ranges.begin(), ranges.end(), I); + if (r == ranges.begin()) return false; --r; - return index >= r->start && index < r->end; + return I >= r->start && I < r->end; } // An example for overlaps(): diff --git a/lib/CodeGen/LiveInterval.h b/lib/CodeGen/LiveInterval.h index 33bc036b66d..d25f7e31a34 100644 --- a/lib/CodeGen/LiveInterval.h +++ b/lib/CodeGen/LiveInterval.h @@ -47,6 +47,11 @@ namespace llvm { }; std::ostream& operator<<(std::ostream& os, const LiveRange &LR); + inline bool operator<(unsigned V, const LiveRange &LR) { + return V < LR.start; + } + + /// LiveInterval - This class represents some number of live ranges for a /// register or value. This class also contains a bit of register allocator /// state.