[llvm] r294555 - [GlobalISel] Simplify StringRef parameters. NFC.
Mehdi Amini via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 9 12:21:58 PST 2017
For instance why not do it on every single value arguments? Would you do it on a integer passed by value?
> On Feb 9, 2017, at 12:18 PM, Mehdi Amini <mehdi.amini at apple.com> wrote:
>
> I can see how for long function, the ability to see that an argument is const allows to avoid tracking that its value may change in the body, so I sympathize with the intention, but if you’d like to push with this you should try to get the coding standard updated. Right now I don’t believe `const StringRef` is a common idiom in LLVM (I’ve never seen it before).
>
>
>
> —
> Mehdi
>
>
>
>> On Feb 9, 2017, at 1:32 AM, Daniel Sanders via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>>
>>> 'const' on StringRef parameters adds no guarantees. Remove it.
>>
>> This is incorrect, this const guarantees that the function does not allow assignment to that variable. The string itself is constant in both cases but 'StringRef' can be locally re-assigned to another string whereas 'const StringRef' cannot.
>>
>> It was my intention to ensure that the InsnVarName always referred to the string provided by the caller so I'd like you to revert this unless there's a good reason to make InsnVarName assignable.
>>
>>> On 9 Feb 2017, at 02:50, Ahmed Bougacha via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>>>
>>> Author: ab
>>> Date: Wed Feb 8 20:50:01 2017
>>> New Revision: 294555
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=294555&view=rev
>>> Log:
>>> [GlobalISel] Simplify StringRef parameters. NFC.
>>>
>>> 'const' on StringRef parameters adds no guarantees. Remove it.
>>>
>>> Modified:
>>> llvm/trunk/utils/TableGen/GlobalISelEmitter.cpp
>>>
>>> Modified: llvm/trunk/utils/TableGen/GlobalISelEmitter.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/GlobalISelEmitter.cpp?rev=294555&r1=294554&r2=294555&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/utils/TableGen/GlobalISelEmitter.cpp (original)
>>> +++ llvm/trunk/utils/TableGen/GlobalISelEmitter.cpp Wed Feb 8 20:50:01 2017
>>> @@ -160,8 +160,7 @@ public:
>>>
>>> /// Emit a C++ expression that checks the predicate for the OpIdx operand of
>>> /// the instruction given in InsnVarName.
>>> - virtual void emitCxxPredicateExpr(raw_ostream &OS,
>>> - const StringRef InsnVarName,
>>> + virtual void emitCxxPredicateExpr(raw_ostream &OS, StringRef InsnVarName,
>>> unsigned OpIdx) const = 0;
>>> };
>>>
>>> @@ -173,7 +172,7 @@ protected:
>>> public:
>>> LLTOperandMatcher(std::string Ty) : Ty(Ty) {}
>>>
>>> - void emitCxxPredicateExpr(raw_ostream &OS, const StringRef InsnVarName,
>>> + void emitCxxPredicateExpr(raw_ostream &OS, StringRef InsnVarName,
>>> unsigned OpIdx) const override {
>>> OS << "MRI.getType(" << InsnVarName << ".getOperand(" << OpIdx
>>> << ").getReg()) == (" << Ty << ")";
>>> @@ -188,7 +187,7 @@ protected:
>>> public:
>>> RegisterBankOperandMatcher(const CodeGenRegisterClass &RC) : RC(RC) {}
>>>
>>> - void emitCxxPredicateExpr(raw_ostream &OS, const StringRef InsnVarName,
>>> + void emitCxxPredicateExpr(raw_ostream &OS, StringRef InsnVarName,
>>> unsigned OpIdx) const override {
>>> OS << "(&RBI.getRegBankFromRegClass(" << RC.getQualifiedName()
>>> << "RegClass) == RBI.getRegBank(" << InsnVarName << ".getOperand("
>>> @@ -199,7 +198,7 @@ public:
>>> /// Generates code to check that an operand is a basic block.
>>> class MBBOperandMatcher : public OperandPredicateMatcher {
>>> public:
>>> - void emitCxxPredicateExpr(raw_ostream &OS, const StringRef InsnVarName,
>>> + void emitCxxPredicateExpr(raw_ostream &OS, StringRef InsnVarName,
>>> unsigned OpIdx) const override {
>>> OS << InsnVarName << ".getOperand(" << OpIdx << ").isMBB()";
>>> }
>>> @@ -216,7 +215,7 @@ public:
>>>
>>> /// Emit a C++ expression that tests whether the instruction named in
>>> /// InsnVarName matches all the predicate and all the operands.
>>> - void emitCxxPredicateExpr(raw_ostream &OS, const StringRef InsnVarName) const {
>>> + void emitCxxPredicateExpr(raw_ostream &OS, StringRef InsnVarName) const {
>>> OS << "(";
>>> emitCxxPredicateListExpr(OS, InsnVarName, OpIdx);
>>> OS << ")";
>>> @@ -235,7 +234,7 @@ public:
>>> /// Emit a C++ expression that tests whether the instruction named in
>>> /// InsnVarName matches the predicate.
>>> virtual void emitCxxPredicateExpr(raw_ostream &OS,
>>> - const StringRef InsnVarName) const = 0;
>>> + StringRef InsnVarName) const = 0;
>>> };
>>>
>>> /// Generates code to check the opcode of an instruction.
>>> @@ -247,7 +246,7 @@ public:
>>> InstructionOpcodeMatcher(const CodeGenInstruction *I) : I(I) {}
>>>
>>> void emitCxxPredicateExpr(raw_ostream &OS,
>>> - const StringRef InsnVarName) const override {
>>> + StringRef InsnVarName) const override {
>>> OS << InsnVarName << ".getOpcode() == " << I->Namespace
>>> << "::" << I->TheDef->getName();
>>> }
>>> @@ -273,7 +272,7 @@ public:
>>>
>>> /// Emit a C++ expression that tests whether the instruction named in
>>> /// InsnVarName matches all the predicates and all the operands.
>>> - void emitCxxPredicateExpr(raw_ostream &OS, const StringRef InsnVarName) const {
>>> + void emitCxxPredicateExpr(raw_ostream &OS, StringRef InsnVarName) const {
>>> emitCxxPredicateListExpr(OS, InsnVarName);
>>> for (const auto &Operand : Operands) {
>>> OS << " &&\n(";
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>> _______________________________________________
>> 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