[llvm-commits] [llvm] r145563 - in /llvm/trunk: lib/Transforms/InstCombine/InstCombineCompares.cpp test/Transforms/InstCombine/compare-abs-nonzero.ll

Chandler Carruth chandlerc at google.com
Wed Nov 30 20:16:08 PST 2011


On Wed, Nov 30, 2011 at 7:58 PM, Pete Cooper <peter_cooper at apple.com> wrote:

> Author: pete
> Date: Wed Nov 30 21:58:40 2011
> New Revision: 145563
>
> URL: http://llvm.org/viewvc/llvm-project?rev=145563&view=rev
> Log:
> Added instcombine pattern to spot comparing -val or val against 0.
> (val != 0) == (-val != 0) so "abs(val) != 0" becomes "val != 0"
>
> Fixes <rdar://problem/10482509>
>
> Added:
>    llvm/trunk/test/Transforms/InstCombine/compare-abs-nonzero.ll
> 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/Transforms/InstCombine/InstCombineCompares.cpp?rev=145563&r1=145562&r2=145563&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
> (original)
> +++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp Wed Nov
> 30 21:58:40 2011
> @@ -1795,6 +1795,20 @@
>   if (Value *V = SimplifyICmpInst(I.getPredicate(), Op0, Op1, TD))
>     return ReplaceInstUsesWith(I, V);
>
> +  // comparing -val or val with non-zero is the same as just comparing val
> +  // ie, (val != 0) == (-val != 0)
> +  if (I.getPredicate() == ICmpInst::ICMP_NE && match(Op1, m_Zero()))
> +  {
> +    Value *Cond, *SubSrc, *SelectFalse;
> +    if (match(Op0, m_Select(m_Value(Cond), m_Sub(m_Zero(),
> m_Value(SubSrc)),
> +                            m_Value(SelectFalse)))) {
> +      if (SubSrc == SelectFalse) {
> +        return CmpInst::Create(Instruction::ICmp, I.getPredicate(),
> +                               SubSrc, Op1);
> +      }
> +    }
> +  }
> +
>   Type *Ty = Op0->getType();
>
>   // icmp's with boolean values can always be turned into bitwise
> operations
>
> Added: llvm/trunk/test/Transforms/InstCombine/compare-abs-nonzero.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/compare-abs-nonzero.ll?rev=145563&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/Transforms/InstCombine/compare-abs-nonzero.ll (added)
> +++ llvm/trunk/test/Transforms/InstCombine/compare-abs-nonzero.ll Wed Nov
> 30 21:58:40 2011
> @@ -0,0 +1,10 @@
> +; RUN: opt < %s -instcombine -S | grep -v {select}
>

Please always use FileCheck on new tests...

That said, is there not an existing test this could be added to rather than
creating a whole new test file which is very narrow?

+
> +define zeroext i1 @cmpabs(i64 %val) nounwind uwtable readnone ssp {
> +entry:
> +  %sub = sub nsw i64 0, %val
> +  %cmp = icmp slt i64 %val, 0
> +  %sub.val = select i1 %cmp, i64 %sub, i64 %val
> +  %tobool = icmp ne i64 %sub.val, 0
> +  ret i1 %tobool
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20111130/b7f7435d/attachment.html>


More information about the llvm-commits mailing list