[PATCH] [InstCombine/InstSimplify] Move ashr optimization from Instcombine to Instsimplify

Nick Lewycky nlewycky at google.com
Wed Jun 18 20:40:59 PDT 2014


On 18 June 2014 06:19, suyog <suyog.sarda at samsung.com> wrote:

>
> Hi Nick,
>
> Added supporting testcase.
>
> Please if you could commit it for me if it looks
> good to you.
>

Not yet, sorry. It needs a test that ensures that "opt -instsimplify" *is*
doing the new simplification we just taught it. You can keep the test you
wrote too if you like. Also, using "grep" is old-style, please use
FileCheck. For example:

define i32 @test1(i32 %x) {
; CHECK-LABEL: @test1
; CHECK-NOT: ashr
  %o = and i32 %x, 1
  %n = add i32 %o, -1
  %t = ashr i32 %n, 17
  ret i32 %t
}

Nick

Thanks,
> Suyog
>
> http://reviews.llvm.org/D4102
>
> Files:
>   lib/Analysis/InstructionSimplify.cpp
>   lib/Transforms/InstCombine/InstCombineShifts.cpp
>   test/Transforms/InstSimplify/ashr-nop.ll
>
> Index: lib/Analysis/InstructionSimplify.cpp
> ===================================================================
> --- lib/Analysis/InstructionSimplify.cpp
> +++ lib/Analysis/InstructionSimplify.cpp
> @@ -1436,6 +1436,11 @@
>        cast<OverflowingBinaryOperator>(Op0)->hasNoSignedWrap())
>      return X;
>
> +  // Arithmetic shifting an all-sign-bit value is a no-op.
> +  unsigned NumSignBits = ComputeNumSignBits(Op0);
> +  if (NumSignBits == Op0->getType()->getScalarSizeInBits())
> +    return Op0;
> +
>    return nullptr;
>  }
>
> Index: lib/Transforms/InstCombine/InstCombineShifts.cpp
> ===================================================================
> --- lib/Transforms/InstCombine/InstCombineShifts.cpp
> +++ lib/Transforms/InstCombine/InstCombineShifts.cpp
> @@ -820,10 +820,5 @@
>
>  APInt::getSignBit(I.getType()->getScalarSizeInBits())))
>      return BinaryOperator::CreateLShr(Op0, Op1);
>
> -  // Arithmetic shifting an all-sign-bit value is a no-op.
> -  unsigned NumSignBits = ComputeNumSignBits(Op0);
> -  if (NumSignBits == Op0->getType()->getScalarSizeInBits())
> -    return ReplaceInstUsesWith(I, Op0);
> -
>    return nullptr;
>  }
> Index: test/Transforms/InstSimplify/ashr-nop.ll
> ===================================================================
> --- test/Transforms/InstSimplify/ashr-nop.ll
> +++ test/Transforms/InstSimplify/ashr-nop.ll
> @@ -0,0 +1,8 @@
> +; RUN: opt < %s -instsimplify -S | not grep ashr
> +
> +define i32 @foo(i32 %x) {
> +  %o = and i32 %x, 1
> +  %n = add i32 %o, -1
> +  %t = ashr i32 %n, 17
> +  ret i32 %t
> +}
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140618/910dfad9/attachment.html>


More information about the llvm-commits mailing list