[llvm-commits] [llvm] r52818 - in /llvm/trunk: include/llvm/Target/TargetRegisterInfo.h lib/Target/TargetRegisterInfo.cpp
Evan Cheng
evan.cheng at apple.com
Fri Jun 27 00:19:26 PDT 2008
Is this really the right approach? I thought we want tblgen at build
time to create these matrices to speed up queries. Suppose we are
compiling a bunch of small programs. We'd be recomputing the set
everytime.
Evan
On Jun 26, 2008, at 11:56 PM, Owen Anderson wrote:
> 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() {}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list