From: Chris Lattner Date: Mon, 5 Dec 2005 02:35:08 +0000 (+0000) Subject: Add some methods X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=5c4736a3da04795ba8d04e152e151afd6942e2f1;p=oota-llvm.git Add some methods git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24596 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/utils/TableGen/CodeGenRegisters.h b/utils/TableGen/CodeGenRegisters.h index d719d89d625..fbbec9a32a2 100644 --- a/utils/TableGen/CodeGenRegisters.h +++ b/utils/TableGen/CodeGenRegisters.h @@ -42,6 +42,8 @@ namespace llvm { const std::string &getName() const; + unsigned getNumValueTypes() const { return VTs.size(); } + const MVT::ValueType getValueTypeNum(unsigned VTNum) const { if (VTNum < VTs.size()) return VTs[VTNum]; diff --git a/utils/TableGen/CodeGenTarget.h b/utils/TableGen/CodeGenTarget.h index ba538245c6f..f2c4da336cb 100644 --- a/utils/TableGen/CodeGenTarget.h +++ b/utils/TableGen/CodeGenTarget.h @@ -90,7 +90,26 @@ public: assert(0 && "Didn't find the register class"); abort(); } - + + /// getRegisterClassForRegister - Find the register class that contains the + /// specified physical register. If there register exists in multiple + /// register classes or is not in a register class, return null. + const CodeGenRegisterClass *getRegisterClassForRegister(Record *R) const { + const std::vector &RCs = getRegisterClasses(); + const CodeGenRegisterClass *FoundRC = 0; + for (unsigned i = 0, e = RCs.size(); i != e; ++i) { + const CodeGenRegisterClass &RC = RegisterClasses[i]; + for (unsigned ei = 0, ee = RC.Elements.size(); ei != ee; ++ei) { + if (R == RC.Elements[ei]) { + if (FoundRC) return 0; // In multiple RC's + FoundRC = &RC; + break; + } + } + } + return FoundRC; + } + const std::vector &getLegalValueTypes() const { if (LegalValueTypes.empty()) ReadLegalValueTypes(); return LegalValueTypes;