[TableGen] Make getRegisterValueType stricter about HwModes.
authorCraig Topper <craig.topper@sifive.com>
Mon, 24 Apr 2023 06:28:23 +0000 (23:28 -0700)
committerCraig Topper <craig.topper@sifive.com>
Mon, 24 Apr 2023 06:28:23 +0000 (23:28 -0700)
I don't think this code would work correctly if the register class
used used HwModes. Add asserts to make sure it's not used with HwModes.

Also fix a long outdated comment on the function.

llvm/utils/TableGen/DAGISelMatcherGen.cpp

index c90375ad5fe60006f4ab3ed75997262e6b868fea..33ec3e7099f90ac69977c850a538470071a2b33d 100644 (file)
@@ -22,8 +22,8 @@ using namespace llvm;
 
 
 /// getRegisterValueType - Look up and return the ValueType of the specified
-/// register. If the register is a member of multiple register classes which
-/// have different associated types, return MVT::Other.
+/// register. If the register is a member of multiple register classes, they
+/// must all have the same type.
 static MVT::SimpleValueType getRegisterValueType(Record *R,
                                                  const CodeGenTarget &T) {
   bool FoundRC = false;
@@ -37,15 +37,15 @@ static MVT::SimpleValueType getRegisterValueType(Record *R,
     if (!FoundRC) {
       FoundRC = true;
       const ValueTypeByHwMode &VVT = RC.getValueTypeNum(0);
-      if (VVT.isSimple())
-        VT = VVT.getSimple().SimpleTy;
+      assert(VVT.isSimple());
+      VT = VVT.getSimple().SimpleTy;
       continue;
     }
 
 #ifndef NDEBUG
     // If this occurs in multiple register classes, they all have to agree.
-    const ValueTypeByHwMode &T = RC.getValueTypeNum(0);
-    assert((!T.isSimple() || T.getSimple().SimpleTy == VT) &&
+    const ValueTypeByHwMode &VVT = RC.getValueTypeNum(0);
+    assert(VVT.isSimple() && VVT.getSimple().SimpleTy == VT &&
            "ValueType mismatch between register classes for this register");
 #endif
   }