[llvm] b0cd7b2 - [SCCP] Limit use of range info for binops to integers for now.
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 31 09:12:34 PDT 2020
Author: Florian Hahn
Date: 2020-03-31T17:08:09+01:00
New Revision: b0cd7b2799ebcac0e456abf60cea2ca421a83945
URL: https://github.com/llvm/llvm-project/commit/b0cd7b2799ebcac0e456abf60cea2ca421a83945
DIFF: https://github.com/llvm/llvm-project/commit/b0cd7b2799ebcac0e456abf60cea2ca421a83945.diff
LOG: [SCCP] Limit use of range info for binops to integers for now.
This fixes a crash when building the test suite.
Added:
Modified:
llvm/lib/Transforms/Scalar/SCCP.cpp
llvm/test/Transforms/SCCP/ip-ranges-casts.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Scalar/SCCP.cpp b/llvm/lib/Transforms/Scalar/SCCP.cpp
index f1e97ce006be..eba3a11bff19 100644
--- a/llvm/lib/Transforms/Scalar/SCCP.cpp
+++ b/llvm/lib/Transforms/Scalar/SCCP.cpp
@@ -965,6 +965,10 @@ void SCCPSolver::visitBinaryOperator(Instruction &I) {
return (void)markConstant(IV, &I, C);
}
+ // Only use ranges for binary operators on integers.
+ if (!I.getType()->isIntegerTy())
+ return markOverdefined(&I);
+
// Operands are either constant ranges, notconstant, overdefined or one of the
// operands is a constant.
ConstantRange A = ConstantRange::getFull(I.getType()->getScalarSizeInBits());
diff --git a/llvm/test/Transforms/SCCP/ip-ranges-casts.ll b/llvm/test/Transforms/SCCP/ip-ranges-casts.ll
index 6a4e5764dcf3..c7a53c118977 100644
--- a/llvm/test/Transforms/SCCP/ip-ranges-casts.ll
+++ b/llvm/test/Transforms/SCCP/ip-ranges-casts.ll
@@ -294,3 +294,20 @@ define i1 @int_range_to_double_cast(i32 %a) {
%tmp11 = fcmp olt double %tmp4, %tmp10
ret i1 %tmp11
}
+
+; Make sure we do not use ranges to propagate info from vectors.
+define i16 @vector_binop_and_cast() {
+; CHECK-LABEL: define i16 @vector_binop_and_cast(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: %vecinit7 = insertelement <8 x i16> <i16 undef, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, i16 undef, i32 0
+; CHECK-NEXT: %rem = srem <8 x i16> <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>, %vecinit7
+; CHECK-NEXT: %0 = bitcast <8 x i16> %rem to i128
+; CHECK-NEXT: %1 = trunc i128 %0 to i16
+; CHECK-NEXT: ret i16 %1
+entry:
+ %vecinit7 = insertelement <8 x i16> <i16 undef, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, i16 undef, i32 0
+ %rem = srem <8 x i16> <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>, %vecinit7
+ %0 = bitcast <8 x i16> %rem to i128
+ %1 = trunc i128 %0 to i16
+ ret i16 %1
+}
More information about the llvm-commits
mailing list