[llvm] ac75171 - [InstCombine] Fix incorrect nneg inference on shift amount
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 21 06:48:07 PST 2023
Author: Nikita Popov
Date: 2023-11-21T15:47:55+01:00
New Revision: ac75171d41f0000d53eadf64a943d6fabc24af6c
URL: https://github.com/llvm/llvm-project/commit/ac75171d41f0000d53eadf64a943d6fabc24af6c
DIFF: https://github.com/llvm/llvm-project/commit/ac75171d41f0000d53eadf64a943d6fabc24af6c.diff
LOG: [InstCombine] Fix incorrect nneg inference on shift amount
Whether this is valid depends on the bit widths of the involved
integers.
Fixes https://github.com/llvm/llvm-project/issues/72927.
Added:
Modified:
llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
llvm/test/Transforms/InstCombine/shift.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
index 1b2615d4598d929..d2c6ffe9001d78b 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
@@ -1223,7 +1223,9 @@ Instruction *InstCombinerImpl::visitZExt(ZExtInst &Zext) {
if (!Zext.hasNonNeg()) {
// If this zero extend is only used by a shift, add nneg flag.
- if (Zext.hasOneUse() && SrcTy->getScalarSizeInBits() > 2 &&
+ if (Zext.hasOneUse() &&
+ SrcTy->getScalarSizeInBits() >
+ Log2_64_Ceil(DestTy->getScalarSizeInBits()) &&
match(Zext.user_back(), m_Shift(m_Value(), m_Specific(&Zext)))) {
Zext.setNonNeg();
return &Zext;
diff --git a/llvm/test/Transforms/InstCombine/shift.ll b/llvm/test/Transforms/InstCombine/shift.ll
index 1cb1ac327291622..bad6a995cb75d51 100644
--- a/llvm/test/Transforms/InstCombine/shift.ll
+++ b/llvm/test/Transforms/InstCombine/shift.ll
@@ -2208,8 +2208,8 @@ define i128 @shift_zext_nneg(i8 %arg) {
define i129 @shift_zext_not_nneg(i8 %arg) {
; CHECK-LABEL: @shift_zext_not_nneg(
-; CHECK-NEXT: [[EXT:%.*]] = zext nneg i8 [[ARG:%.*]] to i129
-; CHECK-NEXT: [[SHL:%.*]] = shl nuw nsw i129 1, [[EXT]]
+; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[ARG:%.*]] to i129
+; CHECK-NEXT: [[SHL:%.*]] = shl nuw i129 1, [[EXT]]
; CHECK-NEXT: ret i129 [[SHL]]
;
%ext = zext i8 %arg to i129
More information about the llvm-commits
mailing list