From 6ecae9fc97a964ecd44703acd3dc2fc1ab79e7e4 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Sat, 14 Oct 2017 21:27:53 +0000 Subject: [PATCH] [TableGen] Avoid unnecessary std::string creations Avoid unnecessary std::string creations in the TreePredicateFn getters. llvm-svn: 315826 --- llvm/utils/TableGen/CodeGenDAGPatterns.cpp | 20 ++++++++++---------- llvm/utils/TableGen/CodeGenDAGPatterns.h | 13 ++++++------- llvm/utils/TableGen/GlobalISelEmitter.cpp | 4 ++-- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp index ced3e979c044..8987091a1624 100644 --- a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp +++ b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp @@ -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(Node)->getValueAPF();\n"; else if (immCodeUsesAPInt()) Result += "cast(Node)->getAPIntValue();\n"; else Result += "cast(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(); } //===----------------------------------------------------------------------===// diff --git a/llvm/utils/TableGen/CodeGenDAGPatterns.h b/llvm/utils/TableGen/CodeGenDAGPatterns.h index 5918e901a3de..2103e154dad3 100644 --- a/llvm/utils/TableGen/CodeGenDAGPatterns.h +++ b/llvm/utils/TableGen/CodeGenDAGPatterns.h @@ -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; }; diff --git a/llvm/utils/TableGen/GlobalISelEmitter.cpp b/llvm/utils/TableGen/GlobalISelEmitter.cpp index 4d47bbb78930..b595143701ac 100644 --- a/llvm/utils/TableGen/GlobalISelEmitter.cpp +++ b/llvm/utils/TableGen/GlobalISelEmitter.cpp @@ -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 -- GitLab