[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