summaryrefslogtreecommitdiff
path: root/utils/TableGen/CodeGenTarget.h
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-12-05 02:35:08 +0000
committerChris Lattner <sabre@nondot.org>2005-12-05 02:35:08 +0000
commit5c4736a3da04795ba8d04e152e151afd6942e2f1 (patch)
tree4a3f145ea104a0d86e8447fccc9a004c08857923 /utils/TableGen/CodeGenTarget.h
parentb5d01436e3c937ea4b291de7a17c660aa30e1703 (diff)
downloadllvm-5c4736a3da04795ba8d04e152e151afd6942e2f1.tar.gz
llvm-5c4736a3da04795ba8d04e152e151afd6942e2f1.tar.bz2
llvm-5c4736a3da04795ba8d04e152e151afd6942e2f1.tar.xz
Add some methods
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24596 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/CodeGenTarget.h')
-rw-r--r--utils/TableGen/CodeGenTarget.h21
1 files changed, 20 insertions, 1 deletions
diff --git a/utils/TableGen/CodeGenTarget.h b/utils/TableGen/CodeGenTarget.h
index ba538245c6..f2c4da336c 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<CodeGenRegisterClass> &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<MVT::ValueType> &getLegalValueTypes() const {
if (LegalValueTypes.empty()) ReadLegalValueTypes();
return LegalValueTypes;