[PATCH] [InstCombine/InstSimplify] Move ashr optimization from Instcombine to Instsimplify
suyog
suyog.sarda at samsung.com
Sun Jun 29 21:04:54 PDT 2014
Small correction.
The test case is for 'instsimplify' rather than 'instcombine'.
Corrected the patch.
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
@@ -1346,6 +1346,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
@@ -815,10 +815,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,10 @@
+; RUN: opt < %s -instsimplify -S | FileCheck %s
+
+; CHECK-LABEL: @foo
+; CHECK-NOT: 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 --------------
A non-text attachment was scrubbed...
Name: D4102.10970.patch
Type: text/x-patch
Size: 1561 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140630/f88d28e0/attachment.bin>
More information about the llvm-commits
mailing list