[TableGen] Return ValueTypeByHwMode by const reference from CodeGenRegisterClass...
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Thu, 16 Aug 2018 15:29:24 +0000 (15:29 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Thu, 16 Aug 2018 15:29:24 +0000 (15:29 +0000)
Avoids costly std::map copies inside ValueTypeByHwMode constructor

llvm-svn: 339884

llvm/utils/TableGen/CodeGenRegisters.h
llvm/utils/TableGen/DAGISelMatcherGen.cpp

index 32aa33c..0f7a025 100644 (file)
@@ -348,7 +348,7 @@ namespace llvm {
     ArrayRef<ValueTypeByHwMode> getValueTypes() const { return VTs; }
     unsigned getNumValueTypes() const { return VTs.size(); }
 
-    ValueTypeByHwMode getValueTypeNum(unsigned VTNum) const {
+    const ValueTypeByHwMode &getValueTypeNum(unsigned VTNum) const {
       if (VTNum < VTs.size())
         return VTs[VTNum];
       llvm_unreachable("VTNum greater than number of ValueTypes in RegClass!");
index ce23651..f8c8a16 100644 (file)
@@ -33,15 +33,15 @@ static MVT::SimpleValueType getRegisterValueType(Record *R,
 
     if (!FoundRC) {
       FoundRC = true;
-      ValueTypeByHwMode VVT = RC.getValueTypeNum(0);
+      const ValueTypeByHwMode &VVT = RC.getValueTypeNum(0);
       if (VVT.isSimple())
         VT = VVT.getSimple().SimpleTy;
       continue;
     }
 
-    // If this occurs in multiple register classes, they all have to agree.
 #ifndef NDEBUG
-    ValueTypeByHwMode T = RC.getValueTypeNum(0);
+    // 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) &&
            "ValueType mismatch between register classes for this register");
 #endif