Ignore NumberHack and give each SubRegIndex instance a unique enum value instead.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Tue, 25 May 2010 17:21:04 +0000 (17:21 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Tue, 25 May 2010 17:21:04 +0000 (17:21 +0000)
This passes lit tests, but I'll give it a go through the buildbots to smoke out
any remaining places that depend on the old SubRegIndex numbering.

Then I'll remove NumberHack entirely.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104615 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86RegisterInfo.cpp
utils/TableGen/CodeGenTarget.h
utils/TableGen/RegisterInfoEmitter.cpp

index 028d2a4dbceb16a328a5b9e74412e9750bfd47a4..d5a2835af3a31990d075739b2b5e9cb9c33f2da3 100644 (file)
@@ -158,7 +158,7 @@ X86RegisterInfo::getMatchingSuperRegClass(const TargetRegisterClass *A,
   switch (SubIdx) {
   default: return 0;
   case X86::sub_8bit:
-  //case X86::sub_ss:
+  case X86::sub_ss:
     if (B == &X86::GR8RegClass) {
       if (A->getSize() == 2 || A->getSize() == 4 || A->getSize() == 8)
         return A;
@@ -195,7 +195,7 @@ X86RegisterInfo::getMatchingSuperRegClass(const TargetRegisterClass *A,
     }
     break;
   case X86::sub_8bit_hi:
-  //case X86::sub_sd:
+  case X86::sub_sd:
     if (B == &X86::GR8_ABCD_HRegClass) {
       if (A == &X86::GR64RegClass || A == &X86::GR64_ABCDRegClass ||
           A == &X86::GR64_NOREXRegClass ||
@@ -213,7 +213,7 @@ X86RegisterInfo::getMatchingSuperRegClass(const TargetRegisterClass *A,
     }
     break;
   case X86::sub_16bit:
-  //case X86::sub_xmm:
+  case X86::sub_xmm:
     if (B == &X86::GR16RegClass) {
       if (A->getSize() == 4 || A->getSize() == 8)
         return A;
index 5b2587f3b7f7030bf50a3cfe6d39f1e6b4a7e92a..6b06b66c29bcb63fad91842687692e04a1829cd9 100644 (file)
@@ -107,7 +107,11 @@ public:
 
   // Map a SubRegIndex Record to its number.
   unsigned getSubRegIndexNo(Record *idx) const {
-    return idx->getValueAsInt("NumberHack");
+    if (SubRegIndices.empty()) ReadSubRegIndices();
+    std::vector<Record*>::const_iterator i =
+      std::find(SubRegIndices.begin(), SubRegIndices.end(), idx);
+    assert(i != SubRegIndices.end() && "Not a SubRegIndex");
+    return (i - SubRegIndices.begin()) + 1;
   }
 
   const std::vector<CodeGenRegisterClass> &getRegisterClasses() const {
index 85daa15f3747d3397134bdc346639e12e0832b93..28429faefa2577161c4e01ab32ff6382cc024861 100644 (file)
@@ -52,8 +52,7 @@ void RegisterInfoEmitter::runEnums(raw_ostream &OS) {
       OS << "namespace " << Namespace << " {\n";
     OS << "enum {\n  NoSubRegister,\n";
     for (unsigned i = 0, e = SubRegIndices.size(); i != e; ++i)
-      OS << "  " << SubRegIndices[i]->getName() << " = "
-         << SubRegIndices[i]->getValueAsInt("NumberHack") << ",\n";
+      OS << "  " << SubRegIndices[i]->getName() << ",\t// " << i+1 << "\n";
     OS << "  NUM_TARGET_SUBREGS = " << SubRegIndices.size()+1 << "\n";
     OS << "};\n";
     if (!Namespace.empty())