[llvm] r278944 - [InstCombine] clean up foldICmpOrConstant(); NFCI

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 19 09:45:48 PDT 2016


Oops! Sorry about that. Thank you for letting me know.

On Fri, Aug 19, 2016 at 10:37 AM, Reid Kleckner <rnk at google.com> wrote:

> Er, the actual logs this time:
> https://build.chromium.org/p/chromium.fyi/builders/
> ClangToTLinux/builds/6077/steps/compile/logs/stdio
>
> I'll land a quick fix and test soon.
>
> On Fri, Aug 19, 2016 at 9:36 AM, Reid Kleckner <rnk at google.com> wrote:
>
>> +    Constant *NullVal = ConstantInt::getNullValue(P->getType());
>> +    Value *CmpP = Builder->CreateICmp(Pred, P, NullVal);
>> +    Value *CmpQ = Builder->CreateICmp(Pred, Q, NullVal);
>>
>> P and Q might not have equivalent pointer types. We really do need to get
>> two calls to getNullValue here.
>>
>> Caused a crash while building Chromium:
>>
>> On Wed, Aug 17, 2016 at 9:30 AM, Sanjay Patel via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>
>>> Author: spatel
>>> Date: Wed Aug 17 11:30:43 2016
>>> New Revision: 278944
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=278944&view=rev
>>> Log:
>>> [InstCombine] clean up foldICmpOrConstant(); NFCI
>>>
>>> 1. Change variable names
>>> 2. Use local variables to reduce code
>>> 3. Use ? instead of if/else
>>> 4. Use the APInt variable instead of 'RHS' so the removal of the FIXME
>>> code will be direct
>>>
>>> Modified:
>>>     llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
>>>
>>> Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transform
>>> s/InstCombine/InstCombineCompares.cpp?rev=278944&r1=278943&r
>>> 2=278944&view=diff
>>> ============================================================
>>> ==================
>>> --- llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
>>> (original)
>>> +++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp Wed
>>> Aug 17 11:30:43 2016
>>> @@ -1879,40 +1879,38 @@ Instruction *InstCombiner::foldICmpAndCo
>>>    return nullptr;
>>>  }
>>>
>>> -Instruction *InstCombiner::foldICmpOrConstant(ICmpInst &ICI,
>>> Instruction *LHSI,
>>> -                                              const APInt *RHSV) {
>>> +/// Fold icmp (or X, Y), C.
>>> +Instruction *InstCombiner::foldICmpOrConstant(ICmpInst &Cmp,
>>> Instruction *Or,
>>> +                                              const APInt *C) {
>>>    // FIXME: This check restricts all folds under here to scalar types.
>>> -  ConstantInt *RHS = dyn_cast<ConstantInt>(ICI.getOperand(1));
>>> +  ConstantInt *RHS = dyn_cast<ConstantInt>(Cmp.getOperand(1));
>>>    if (!RHS)
>>>      return nullptr;
>>>
>>> -  if (RHS->isOne()) {
>>> +  ICmpInst::Predicate Pred = Cmp.getPredicate();
>>> +  if (*C == 1) {
>>>      // icmp slt signum(V) 1 --> icmp slt V, 1
>>>      Value *V = nullptr;
>>> -    if (ICI.getPredicate() == ICmpInst::ICMP_SLT &&
>>> -        match(LHSI, m_Signum(m_Value(V))))
>>> +    if (Pred == ICmpInst::ICMP_SLT && match(Or, m_Signum(m_Value(V))))
>>>        return new ICmpInst(ICmpInst::ICMP_SLT, V,
>>>                            ConstantInt::get(V->getType(), 1));
>>>    }
>>>
>>> -  if (!ICI.isEquality() || !RHS->isNullValue() || !LHSI->hasOneUse())
>>> +  if (!Cmp.isEquality() || *C != 0 || !Or->hasOneUse())
>>>      return nullptr;
>>>
>>>    Value *P, *Q;
>>> -  if (match(LHSI, m_Or(m_PtrToInt(m_Value(P)),
>>> m_PtrToInt(m_Value(Q))))) {
>>> +  if (match(Or, m_Or(m_PtrToInt(m_Value(P)), m_PtrToInt(m_Value(Q))))) {
>>>      // Simplify icmp eq (or (ptrtoint P), (ptrtoint Q)), 0
>>>      // -> and (icmp eq P, null), (icmp eq Q, null).
>>> -    Value *ICIP = Builder->CreateICmp(ICI.getPredicate(), P,
>>> -                                      Constant::getNullValue(P->getT
>>> ype()));
>>> -    Value *ICIQ = Builder->CreateICmp(ICI.getPredicate(), Q,
>>> -                                      Constant::getNullValue(Q->getT
>>> ype()));
>>> -    Instruction *Op;
>>> -    if (ICI.getPredicate() == ICmpInst::ICMP_EQ)
>>> -      Op = BinaryOperator::CreateAnd(ICIP, ICIQ);
>>> -    else
>>> -      Op = BinaryOperator::CreateOr(ICIP, ICIQ);
>>> -    return Op;
>>> +    Constant *NullVal = ConstantInt::getNullValue(P->getType());
>>> +    Value *CmpP = Builder->CreateICmp(Pred, P, NullVal);
>>> +    Value *CmpQ = Builder->CreateICmp(Pred, Q, NullVal);
>>> +    auto LogicOpc = Pred == ICmpInst::Predicate::ICMP_EQ ?
>>> Instruction::And
>>> +                                                         :
>>> Instruction::Or;
>>> +    return BinaryOperator::Create(LogicOpc, CmpP, CmpQ);
>>>    }
>>> +
>>>    return nullptr;
>>>  }
>>>
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160819/8aefb667/attachment.html>


More information about the llvm-commits mailing list