[llvm] r290905 - [CodeGen] Simplify logic that looks for returned call operands. NFC-ish.

Ahmed Bougacha via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 3 13:54:03 PST 2017


On Tue, Jan 3, 2017 at 12:47 PM, Pete Cooper <peter_cooper at apple.com> wrote:
>
>> On Jan 3, 2017, at 12:33 PM, Ahmed Bougacha via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>>
>> Author: ab
>> Date: Tue Jan  3 14:33:22 2017
>> New Revision: 290905
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=290905&view=rev
>> Log:
>> [CodeGen] Simplify logic that looks for returned call operands. NFC-ish.
>>
>> Use getReturnedArgOperand() instead of rolling our own.  Note that it's
>> equivalent because there can only be one 'returned' operand.
>>
>> The existing code was also incorrect: there already was awkward logic to
>> ignore callee/EH blocks, but operands can now also be operand bundles,
>> in which case we'll look for non-existent parameter attributes.
>>
>> Unfortunately, this isn't observable in-tree, as it only crashes when
>> exercising the regular call lowering logic with operand bundles.
>> Still, this is a nice small cleanup anyway.
>>
>> Modified:
>>    llvm/trunk/lib/CodeGen/Analysis.cpp
>>
>> Modified: llvm/trunk/lib/CodeGen/Analysis.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/Analysis.cpp?rev=290905&r1=290904&r2=290905&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/Analysis.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/Analysis.cpp Tue Jan  3 14:33:22 2017
>> @@ -272,28 +272,16 @@ static const Value *getNoopInput(const V
>>                TLI.allowTruncateForTailCall(Op->getType(), I->getType())) {
>>       DataBits = std::min(DataBits, I->getType()->getPrimitiveSizeInBits());
>>       NoopInput = Op;
>> -    } else if (isa<CallInst>(I)) {
>> -      // Look through call (skipping callee)
>> -      for (User::const_op_iterator i = I->op_begin(), e = I->op_end() - 1;
>> -           i != e; ++i) {
>> -        unsigned attrInd = i - I->op_begin() + 1;
>> -        if (cast<CallInst>(I)->paramHasAttr(attrInd, Attribute::Returned) &&
>> -            isNoopBitcast((*i)->getType(), I->getType(), TLI)) {
>> -          NoopInput = *i;
>> -          break;
>> -        }
>> -      }
>> -    } else if (isa<InvokeInst>(I)) {
>> -      // Look through invoke (skipping BB, BB, Callee)
>> -      for (User::const_op_iterator i = I->op_begin(), e = I->op_end() - 3;
>> -           i != e; ++i) {
>> -        unsigned attrInd = i - I->op_begin() + 1;
>> -        if (cast<InvokeInst>(I)->paramHasAttr(attrInd, Attribute::Returned) &&
>> -            isNoopBitcast((*i)->getType(), I->getType(), TLI)) {
>> -          NoopInput = *i;
>> -          break;
>> -        }
>> -      }
>> +    } else if (auto *CI = dyn_cast<CallInst>(I)) {
>> +      // Look through call operands.
>> +      Value *ReturnedOp = CI->getReturnedArgOperand();
>> +      if (ReturnedOp && isNoopBitcast(ReturnedOp->getType(), I->getType(), TLI))
>> +        NoopInput = ReturnedOp;
>> +    } else if (auto *II = dyn_cast<InvokeInst>(I)) {
>> +      // Look through invoke operands.
>> +      Value *ReturnedOp = II->getReturnedArgOperand();
>> +      if (ReturnedOp && isNoopBitcast(ReturnedOp->getType(), I->getType(), TLI))
>> +        NoopInput = ReturnedOp;
> Can this all be folded in to a single conditional using CallSite?

Absolutely, r290909;  thanks for the idea!

-Ahmed

> Cheers,
> Pete
>>     } else if (const InsertValueInst *IVI = dyn_cast<InsertValueInst>(V)) {
>>       // Value may come from either the aggregate or the scalar
>>       ArrayRef<unsigned> InsertLoc = IVI->getIndices();
>>
>>
>> _______________________________________________
>> 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