[llvm] r315826 - [TableGen] Avoid unnecessary std::string creations
Daniel Sanders via llvm-commits
llvm-commits at lists.llvm.org
Sat Oct 14 19:09:09 PDT 2017
The partial revert is part of https://reviews.llvm.org/rL315841.
> On 14 Oct 2017, at 18:23, Daniel Sanders <daniel_l_sanders at apple.com> wrote:
>
> Hi Simon,
>
> We seem to be conflicting with each others commits at the moment. I'm currently trying to land several patches to GlobalISel emitter and some of them make a few of these (currently) unnecessary std::string creations necessary. I need to partially revert this patch so that getPredCode() returns a std::string. I'm also going to revert the getImmCode() change because I think getPredCode() and getImmCode() should have the same interface. The getImmType() and getImmTypeIdentifier() changes look ok to me.
>
> Do you have any other cleanups affecting GlobalISelEmitter.cpp planned? If so, we should probably discuss them to see if our patches conflict.
>
>> On 14 Oct 2017, at 14:27, Simon Pilgrim via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>>
>> Author: rksimon
>> Date: Sat Oct 14 14:27:53 2017
>> New Revision: 315826
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=315826&view=rev
>> Log:
>> [TableGen] Avoid unnecessary std::string creations
>>
>> Avoid unnecessary std::string creations in the TreePredicateFn getters.
>>
>> Modified:
>> llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp
>> llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h
>> llvm/trunk/utils/TableGen/GlobalISelEmitter.cpp
>>
>> Modified: llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp?rev=315826&r1=315825&r2=315826&view=diff
>> ==============================================================================
>> --- llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp (original)
>> +++ llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp Sat Oct 14 14:27:53 2017
>> @@ -854,11 +854,11 @@ TreePredicateFn::TreePredicateFn(TreePat
>> ".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
>> 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(
>> 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()
>> /// 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::getCodeToRu
>> 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();
>> }
>>
>> //===----------------------------------------------------------------------===//
>>
>> Modified: llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h?rev=315826&r1=315825&r2=315826&view=diff
>> ==============================================================================
>> --- llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h (original)
>> +++ llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h Sat Oct 14 14:27:53 2017
>> @@ -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;
>> };
>>
>> Modified: llvm/trunk/utils/TableGen/GlobalISelEmitter.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/GlobalISelEmitter.cpp?rev=315826&r1=315825&r2=315826&view=diff
>> ==============================================================================
>> --- llvm/trunk/utils/TableGen/GlobalISelEmitter.cpp (original)
>> +++ llvm/trunk/utils/TableGen/GlobalISelEmitter.cpp Sat Oct 14 14:27:53 2017
>> @@ -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
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list