]> granicus.if.org Git - llvm/commitdiff
[TableGen] Avoid unnecessary std::string creations
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 14 Oct 2017 21:27:53 +0000 (21:27 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 14 Oct 2017 21:27:53 +0000 (21:27 +0000)
Avoid unnecessary std::string creations in the TreePredicateFn getters.

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

utils/TableGen/CodeGenDAGPatterns.cpp
utils/TableGen/CodeGenDAGPatterns.h
utils/TableGen/GlobalISelEmitter.cpp

index ced3e979c044c75455b58537d07bc93b61a90f82..8987091a16244d396c6087458b876739134a1b7d 100644 (file)
@@ -854,11 +854,11 @@ TreePredicateFn::TreePredicateFn(TreePattern *N) : PatFragRec(N) {
         ".td file corrupt: can't have a node predicate *and* an imm predicate");
 }
 
-std::string TreePredicateFn::getPredCode() const {
+StringRef TreePredicateFn::getPredCode() const {
   return PatFragRec->getRecord()->getValueAsString("PredicateCode");
 }
 
-std::string TreePredicateFn::getImmCode() const {
+StringRef TreePredicateFn::getImmCode() const {
   return PatFragRec->getRecord()->getValueAsString("ImmediateCode");
 }
 
@@ -873,7 +873,7 @@ bool TreePredicateFn::immCodeUsesAPFloat() const {
                                                                    Unset);
 }
 
-std::string TreePredicateFn::getImmType() const {
+StringRef TreePredicateFn::getImmType() const {
   if (immCodeUsesAPInt())
     return "const APInt &";
   if (immCodeUsesAPFloat())
@@ -881,7 +881,7 @@ std::string TreePredicateFn::getImmType() const {
   return "int64_t";
 }
 
-std::string TreePredicateFn::getImmTypeIdentifier() const {
+StringRef TreePredicateFn::getImmTypeIdentifier() const {
   if (immCodeUsesAPInt())
     return "APInt";
   else if (immCodeUsesAPFloat())
@@ -906,21 +906,21 @@ std::string TreePredicateFn::getFnName() const {
 /// appropriate.
 std::string TreePredicateFn::getCodeToRunOnSDNode() const {
   // Handle immediate predicates first.
-  std::string ImmCode = getImmCode();
+  StringRef ImmCode = getImmCode();
   if (!ImmCode.empty()) {
-    std::string Result = "    " + getImmType() + " Imm = ";
+    std::string Result = "    " + getImmType().str() + " Imm = ";
     if (immCodeUsesAPFloat())
       Result += "cast<ConstantFPSDNode>(Node)->getValueAPF();\n";
     else if (immCodeUsesAPInt())
       Result += "cast<ConstantSDNode>(Node)->getAPIntValue();\n";
     else
       Result += "cast<ConstantSDNode>(Node)->getSExtValue();\n";
-    return Result + ImmCode;
+    return Result + ImmCode.str();
   }
 
   // Handle arbitrary node predicates.
   assert(!getPredCode().empty() && "Don't have any predicate code!");
-  std::string ClassName;
+  StringRef ClassName;
   if (PatFragRec->getOnlyTree()->isLeaf())
     ClassName = "SDNode";
   else {
@@ -931,9 +931,9 @@ std::string TreePredicateFn::getCodeToRunOnSDNode() const {
   if (ClassName == "SDNode")
     Result = "    SDNode *N = Node;\n";
   else
-    Result = "    auto *N = cast<" + ClassName + ">(Node);\n";
+    Result = "    auto *N = cast<" + ClassName.str() + ">(Node);\n";
 
-  return Result + getPredCode();
+  return Result + getPredCode().str();
 }
 
 //===----------------------------------------------------------------------===//
index 5918e901a3de5ccc2f610ea45be4affcfe0f73fe..2103e154dad30a98db62e629b58af639306e39ae 100644 (file)
@@ -452,13 +452,12 @@ public:
   /// getImmediatePredicateCode - Return the code that evaluates this pattern if
   /// this is an immediate predicate.  It is an error to call this on a
   /// non-immediate pattern.
-  std::string getImmediatePredicateCode() const {
-    std::string Result = getImmCode();
+  StringRef getImmediatePredicateCode() const {
+    StringRef Result = getImmCode();
     assert(!Result.empty() && "Isn't an immediate pattern!");
     return Result;
   }
 
-
   bool operator==(const TreePredicateFn &RHS) const {
     return PatFragRec == RHS.PatFragRec;
   }
@@ -476,15 +475,15 @@ public:
   std::string getCodeToRunOnSDNode() const;
 
   /// Get the data type of the argument to getImmediatePredicateCode().
-  std::string getImmType() const;
+  StringRef getImmType() const;
 
   /// Get a string that describes the type returned by getImmType() but is
   /// usable as part of an identifier.
-  std::string getImmTypeIdentifier() const;
+  StringRef getImmTypeIdentifier() const;
 
 private:
-  std::string getPredCode() const;
-  std::string getImmCode() const;
+  StringRef getPredCode() const;
+  StringRef getImmCode() const;
   bool immCodeUsesAPInt() const;
   bool immCodeUsesAPFloat() const;
 };
index 4d47bbb78930a99ed125bfe6f4c543254884e55c..b595143701aca30bc42df4f8647ef38eaf968140 100644 (file)
@@ -68,13 +68,13 @@ namespace {
 
 /// Get the name of the enum value used to number the predicate function.
 std::string getEnumNameForPredicate(const TreePredicateFn &Predicate) {
-  return "GIPFP_" + Predicate.getImmTypeIdentifier() + "_" +
+  return "GIPFP_" + Predicate.getImmTypeIdentifier().str() + "_" +
          Predicate.getFnName();
 }
 
 /// Get the opcode used to check this predicate.
 std::string getMatchOpcodeForPredicate(const TreePredicateFn &Predicate) {
-  return "GIM_Check" + Predicate.getImmTypeIdentifier() + "ImmPredicate";
+  return "GIM_Check" + Predicate.getImmTypeIdentifier().str() + "ImmPredicate";
 }
 
 /// This class stands in for LLT wherever we want to tablegen-erate an