[llvm] 66ec5df - [ConstraintElim] fix crash with large constants in mul nsw
Erik Desjardins via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 25 10:20:14 PDT 2023
Author: Erik Desjardins
Date: 2023-08-25T13:20:02-04:00
New Revision: 66ec5df3a7f33366455d50769e4e878544becea6
URL: https://github.com/llvm/llvm-project/commit/66ec5df3a7f33366455d50769e4e878544becea6
DIFF: https://github.com/llvm/llvm-project/commit/66ec5df3a7f33366455d50769e4e878544becea6.diff
LOG: [ConstraintElim] fix crash with large constants in mul nsw
Another case of https://github.com/llvm/llvm-project/issues/55085.
The added test would trip an assertion due to calling `getSExtValue()` on a value that doesn't fit in int64_t.
Differential Revision: https://reviews.llvm.org/D158810
Added:
Modified:
llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
llvm/test/Transforms/ConstraintElimination/large-constant-ints.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
index bc0fa09b9e3e30..f2ecb7ec5387b5 100644
--- a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
+++ b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
@@ -424,7 +424,7 @@ static Decomposition decompose(Value *V,
return MergeResults(Op0, Op1, IsSigned);
ConstantInt *CI;
- if (match(V, m_NSWMul(m_Value(Op0), m_ConstantInt(CI)))) {
+ if (match(V, m_NSWMul(m_Value(Op0), m_ConstantInt(CI))) && canUseSExt(CI)) {
auto Result = decompose(Op0, Preconditions, IsSigned, DL);
Result.mul(CI->getSExtValue());
return Result;
diff --git a/llvm/test/Transforms/ConstraintElimination/large-constant-ints.ll b/llvm/test/Transforms/ConstraintElimination/large-constant-ints.ll
index 64db02600f77be..bdc75c49f73c41 100644
--- a/llvm/test/Transforms/ConstraintElimination/large-constant-ints.ll
+++ b/llvm/test/Transforms/ConstraintElimination/large-constant-ints.ll
@@ -280,6 +280,19 @@ else:
ret i1 false
}
+define i1 @mul_nsw_decomp(i128 %x) {
+ %val = mul nsw i128 %x, 9223372036854775808
+ %cmp = icmp sgt i128 %x, %val
+ br i1 %cmp, label %then, label %else
+
+then:
+ %cmp2 = icmp sgt i128 %x, 0
+ ret i1 %cmp2
+
+else:
+ ret i1 false
+}
+
define i1 @add_nuw_decomp_recursive() {
; CHECK-LABEL: @add_nuw_decomp_recursive(
; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i64 -9223372036854775808, 10
More information about the llvm-commits
mailing list