[llvm-commits] [llvm] r52818 - in /llvm/trunk: include/llvm/Target/TargetRegisterInfo.h lib/Target/TargetRegisterInfo.cpp
Owen Anderson
resistor at mac.com
Thu Jun 26 23:56:04 PDT 2008
Author: resistor
Date: Fri Jun 27 01:56:04 2008
New Revision: 52818
URL: http://llvm.org/viewvc/llvm-project?rev=52818&view=rev
Log:
Cache subregister relationships in a set in TargetRegisterInfo to allow faster lookups.
This speeds up LiveVariables from 0.6279s to 0.6165s on kimwitu++.
Modified:
llvm/trunk/include/llvm/Target/TargetRegisterInfo.h
llvm/trunk/lib/Target/TargetRegisterInfo.cpp
Modified: llvm/trunk/include/llvm/Target/TargetRegisterInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetRegisterInfo.h?rev=52818&r1=52817&r2=52818&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Target/TargetRegisterInfo.h (original)
+++ llvm/trunk/include/llvm/Target/TargetRegisterInfo.h Fri Jun 27 01:56:04 2008
@@ -21,6 +21,7 @@
#include "llvm/CodeGen/ValueTypes.h"
#include <cassert>
#include <functional>
+#include <set>
namespace llvm {
@@ -285,6 +286,7 @@
regclass_iterator RegClassBegin, RegClassEnd; // List of regclasses
int CallFrameSetupOpcode, CallFrameDestroyOpcode;
+ std::set<std::pair<unsigned, unsigned> > Subregs;
protected:
TargetRegisterInfo(const TargetRegisterDesc *D, unsigned NR,
regclass_iterator RegClassBegin,
@@ -419,9 +421,7 @@
/// isSubRegister - Returns true if regB is a sub-register of regA.
///
bool isSubRegister(unsigned regA, unsigned regB) const {
- for (const unsigned *SR = getSubRegisters(regA); *SR; ++SR)
- if (*SR == regB) return true;
- return false;
+ return Subregs.count(std::make_pair(regA, regB));
}
/// isSuperRegister - Returns true if regB is a super-register of regA.
Modified: llvm/trunk/lib/Target/TargetRegisterInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetRegisterInfo.cpp?rev=52818&r1=52817&r2=52818&view=diff
==============================================================================
--- llvm/trunk/lib/Target/TargetRegisterInfo.cpp (original)
+++ llvm/trunk/lib/Target/TargetRegisterInfo.cpp Fri Jun 27 01:56:04 2008
@@ -29,6 +29,16 @@
CallFrameSetupOpcode = CFSO;
CallFrameDestroyOpcode = CFDO;
+
+ for (unsigned i = 0; i < NumRegs; ++i) {
+ const TargetRegisterDesc* CurrReg = Desc + i;
+
+ // Initialize the Subregs set, which stores pairs (a, b) where
+ // b is a subreg of a.
+ if (CurrReg->SubRegs)
+ for (const unsigned* CurrSR = CurrReg->SubRegs; *CurrSR; ++CurrSR)
+ Subregs.insert(std::make_pair(i, *CurrSR));
+ }
}
TargetRegisterInfo::~TargetRegisterInfo() {}
More information about the llvm-commits
mailing list