[llvm] 0748a98 - [InstCombine] Handle ConstantFoldCompareInstOperands() failure
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Wed May 22 05:33:58 PDT 2024
Author: Nikita Popov
Date: 2024-05-22T14:33:50+02:00
New Revision: 0748a98ab009d4fd97438970e7d92660967a0652
URL: https://github.com/llvm/llvm-project/commit/0748a98ab009d4fd97438970e7d92660967a0652
DIFF: https://github.com/llvm/llvm-project/commit/0748a98ab009d4fd97438970e7d92660967a0652.diff
LOG: [InstCombine] Handle ConstantFoldCompareInstOperands() failure
This function will return nullptr instead of returning a constant
expression now, so be sure to handle that.
Fixes https://github.com/llvm/llvm-project/issues/93017.
Added:
Modified:
llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
llvm/test/Transforms/InstCombine/load-cmp.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
index 542a1c82b127a..430f3e12fa5b8 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
@@ -214,6 +214,9 @@ Instruction *InstCombinerImpl::foldCmpLoadFromIndexedGlobal(
// Find out if the comparison would be true or false for the i'th element.
Constant *C = ConstantFoldCompareInstOperands(ICI.getPredicate(), Elt,
CompareRHS, DL, &TLI);
+ if (!C)
+ return nullptr;
+
// If the result is undef for this element, ignore it.
if (isa<UndefValue>(C)) {
// Extend range state machines to cover this element in case there is an
diff --git a/llvm/test/Transforms/InstCombine/load-cmp.ll b/llvm/test/Transforms/InstCombine/load-cmp.ll
index e941284a798ed..b956de29e0b8d 100644
--- a/llvm/test/Transforms/InstCombine/load-cmp.ll
+++ b/llvm/test/Transforms/InstCombine/load-cmp.ll
@@ -334,3 +334,20 @@ define i1 @test10_struct_arr_noinbounds_i64(i64 %x) {
%r = icmp eq i32 %q, 9
ret i1 %r
}
+
+ at table = internal constant [2 x ptr] [ptr @g, ptr getelementptr (i8, ptr @g, i64 4)], align 16
+ at g = external global [2 x i32]
+
+define i1 @pr93017(i64 %idx) {
+; CHECK-LABEL: @pr93017(
+; CHECK-NEXT: [[TMP1:%.*]] = trunc i64 [[IDX:%.*]] to i32
+; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds [2 x ptr], ptr @table, i32 0, i32 [[TMP1]]
+; CHECK-NEXT: [[V:%.*]] = load ptr, ptr [[GEP]], align 4
+; CHECK-NEXT: [[CMP:%.*]] = icmp ne ptr [[V]], null
+; CHECK-NEXT: ret i1 [[CMP]]
+;
+ %gep = getelementptr inbounds [2 x ptr], ptr @table, i64 0, i64 %idx
+ %v = load ptr, ptr %gep
+ %cmp = icmp ne ptr %v, null
+ ret i1 %cmp
+}
More information about the llvm-commits
mailing list