[llvm-commits] [llvm] r78714 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp test/Transforms/InstCombine/exact-sdiv.ll
Chris Lattner
clattner at apple.com
Tue Aug 11 13:49:50 PDT 2009
On Aug 11, 2009, at 1:47 PM, Dan Gohman wrote:
> Author: djg
> Date: Tue Aug 11 15:47:47 2009
> New Revision: 78714
>
> URL: http://llvm.org/viewvc/llvm-project?rev=78714&view=rev
> Log:
> Optimize exact sdiv by a constant power of 2 to ashr.
Nice, once llvm-gcc/clang generate these, we should be able to remove
the "power of two" hack for pointer differences, and this should fix
an abstraction penalty bugzilla.
-Chris
>
> Added:
> llvm/trunk/test/Transforms/InstCombine/exact-sdiv.ll
> Modified:
> llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
>
> Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=78714&r1=78713&r2=78714&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
> (original)
> +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Tue
> Aug 11 15:47:47 2009
> @@ -3064,6 +3064,15 @@
> // sdiv X, -1 == -X
> if (RHS->isAllOnesValue())
> return BinaryOperator::CreateNeg(*Context, Op0);
> +
> + // sdiv X, C --> ashr X, log2(C)
> + if (cast<SDivOperator>(&I)->isExact() &&
> + RHS->getValue().isNonNegative() &&
> + RHS->getValue().isPowerOf2()) {
> + Value *ShAmt = llvm::ConstantInt::get(RHS->getType(),
> + RHS-
> >getValue().exactLogBase2());
> + return BinaryOperator::CreateAShr(Op0, ShAmt, I.getName());
> + }
> }
>
> // If the sign bits of both operands are zero (i.e. we can prove
> they are
>
> Added: llvm/trunk/test/Transforms/InstCombine/exact-sdiv.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/exact-sdiv.ll?rev=78714&view=auto
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/test/Transforms/InstCombine/exact-sdiv.ll (added)
> +++ llvm/trunk/test/Transforms/InstCombine/exact-sdiv.ll Tue Aug 11
> 15:47:47 2009
> @@ -0,0 +1,15 @@
> +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | FileCheck %s
> +
> +; CHECK: define i32 @foo
> +; CHECK: sdiv i32 %x, 8
> +define i32 @foo(i32 %x) {
> + %y = sdiv i32 %x, 8
> + ret i32 %y
> +}
> +
> +; CHECK: define i32 @bar
> +; CHECK: ashr i32 %x, 3
> +define i32 @bar(i32 %x) {
> + %y = sdiv exact i32 %x, 8
> + ret i32 %y
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list