[llvm] d20c29d - [TableGen] Make getRegisterValueType stricter about HwModes.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Sun Apr 23 23:28:58 PDT 2023


Author: Craig Topper
Date: 2023-04-23T23:28:23-07:00
New Revision: d20c29d9964188dabfaef9c510e59b895f4ad869

URL: https://github.com/llvm/llvm-project/commit/d20c29d9964188dabfaef9c510e59b895f4ad869
DIFF: https://github.com/llvm/llvm-project/commit/d20c29d9964188dabfaef9c510e59b895f4ad869.diff

LOG: [TableGen] Make getRegisterValueType stricter about HwModes.

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.

Added: 
    

Modified: 
    llvm/utils/TableGen/DAGISelMatcherGen.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/utils/TableGen/DAGISelMatcherGen.cpp b/llvm/utils/TableGen/DAGISelMatcherGen.cpp
index c90375ad5fe6..33ec3e7099f9 100644
--- a/llvm/utils/TableGen/DAGISelMatcherGen.cpp
+++ b/llvm/utils/TableGen/DAGISelMatcherGen.cpp
@@ -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 
diff erent 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
   }


        


More information about the llvm-commits mailing list