Skip to content

Commit abf6b13

Browse files
dtcxzywtstellar
authored andcommitted
[IRCE] Skip icmp ptr in InductiveRangeCheck::parseRangeCheckICmp (#89967)
Fixes #89959. (cherry picked from commit 22da5a6)
1 parent ee5bb0c commit abf6b13

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,9 @@ bool InductiveRangeCheck::parseRangeCheckICmp(Loop *L, ICmpInst *ICI,
279279
Value *LHS = ICI->getOperand(0);
280280
Value *RHS = ICI->getOperand(1);
281281

282+
if (!LHS->getType()->isIntegerTy())
283+
return false;
284+
282285
// Canonicalize to the `Index Pred Invariant` comparison
283286
if (IsLoopInvariant(LHS)) {
284287
std::swap(LHS, RHS);

llvm/test/Transforms/IRCE/pr89959.ll

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2+
; RUN: opt -passes=irce -S < %s 2>&1 | FileCheck %s
3+
4+
; Make sure we don't crash.
5+
define void @pr89959() {
6+
; CHECK-LABEL: define void @pr89959() {
7+
; CHECK-NEXT: top:
8+
; CHECK-NEXT: br label [[L3:%.*]]
9+
; CHECK: L3:
10+
; CHECK-NEXT: [[VALUE_PHI:%.*]] = phi ptr [ null, [[TOP:%.*]] ], [ [[TMP0:%.*]], [[L13:%.*]] ]
11+
; CHECK-NEXT: [[TMP0]] = getelementptr i8, ptr [[VALUE_PHI]], i64 8
12+
; CHECK-NEXT: [[DOTNOT:%.*]] = icmp ule ptr [[VALUE_PHI]], null
13+
; CHECK-NEXT: br i1 [[DOTNOT]], label [[L13]], label [[L15:%.*]]
14+
; CHECK: L13:
15+
; CHECK-NEXT: br label [[L3]]
16+
; CHECK: L15:
17+
; CHECK-NEXT: ret void
18+
;
19+
top:
20+
br label %L3
21+
22+
L3:
23+
%value_phi = phi ptr [ null, %top ], [ %0, %L13 ]
24+
%0 = getelementptr i8, ptr %value_phi, i64 8
25+
%.not = icmp ule ptr %value_phi, null
26+
br i1 %.not, label %L13, label %L15
27+
28+
L13:
29+
br label %L3
30+
31+
L15:
32+
ret void
33+
}

0 commit comments

Comments
 (0)