[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