[PATCH] D84294: [SCEV] Remove invalid assert. PR46786
Max Kazantsev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 22 00:43:07 PDT 2020
mkazantsev created this revision.
mkazantsev added reviewers: lebedev.ri, efriedma, sanjoy.google.
Herald added subscribers: llvm-commits, javed.absar, hiraditya.
Herald added a project: LLVM.
This assert was added to verify assumption that GEP's SCEV will be of pointer type,
basing on fact that it should be a SCEVAddExpr with (at least) last operand being
pointer. Both parts of this assumption are wrong:
- GEP's SCEV does not have to be a SCEVAddExpr after all simplifications;
- GEP's SCEV does not have to have at least one pointer operands (all of them can become int during the transforms).
So this assert isn't based on what SCEV guarantees and should be removed.
Hopefully we do not base any logic on it.
https://reviews.llvm.org/D84294
Files:
llvm/lib/Analysis/ScalarEvolution.cpp
llvm/test/Analysis/ScalarEvolution/pr46786.ll
Index: llvm/test/Analysis/ScalarEvolution/pr46786.ll
===================================================================
--- llvm/test/Analysis/ScalarEvolution/pr46786.ll
+++ llvm/test/Analysis/ScalarEvolution/pr46786.ll
@@ -0,0 +1,37 @@
+; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
+; RUN: opt < %s -analyze -enable-new-pm=0 -scalar-evolution | FileCheck %s
+; RUN: opt < %s -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck %s
+
+source_filename = "input.cpp"
+target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
+
+; Function Attrs: nofree
+define i8* @FSE_decompress_usingDTable(i8* %arg, i32 %arg1, i32 %arg2, i32 %arg3) local_unnamed_addr #0 {
+; CHECK-LABEL: 'FSE_decompress_usingDTable'
+; CHECK-NEXT: Classifying expressions for: @FSE_decompress_usingDTable
+; CHECK-NEXT: %i = getelementptr inbounds i8, i8* %arg, i32 %arg2
+; CHECK-NEXT: --> (%arg2 + %arg)<nsw> U: full-set S: full-set
+; CHECK-NEXT: %i4 = sub nsw i32 0, %arg1
+; CHECK-NEXT: --> (-1 * %arg1) U: full-set S: full-set
+; CHECK-NEXT: %i5 = getelementptr inbounds i8, i8* %i, i32 %i4
+; CHECK-NEXT: --> ((-1 * %arg1) + %arg2 + %arg) U: full-set S: full-set
+; CHECK-NEXT: %i7 = select i1 %i6, i32 %arg2, i32 %arg1
+; CHECK-NEXT: --> ((-1 * %arg) + (((-1 * %arg1) + %arg2 + %arg) umin %arg) + %arg1) U: full-set S: full-set
+; CHECK-NEXT: %i8 = sub i32 %arg3, %i7
+; CHECK-NEXT: --> ((-1 * (((-1 * %arg1) + %arg2 + %arg) umin %arg)) + (-1 * %arg1) + %arg3 + %arg) U: full-set S: full-set
+; CHECK-NEXT: %i9 = getelementptr inbounds i8, i8* %arg, i32 %i8
+; CHECK-NEXT: --> ((2 * %arg) + (-1 * (((-1 * %arg1) + %arg2 + %arg) umin %arg)) + (-1 * %arg1) + %arg3) U: full-set S: full-set
+; CHECK-NEXT: Determining loop execution counts for: @FSE_decompress_usingDTable
+;
+bb:
+ %i = getelementptr inbounds i8, i8* %arg, i32 %arg2
+ %i4 = sub nsw i32 0, %arg1
+ %i5 = getelementptr inbounds i8, i8* %i, i32 %i4
+ %i6 = icmp ult i8* %i5, %arg
+ %i7 = select i1 %i6, i32 %arg2, i32 %arg1
+ %i8 = sub i32 %arg3, %i7
+ %i9 = getelementptr inbounds i8, i8* %arg, i32 %i8
+ ret i8* %i9
+}
+
+attributes #0 = { nofree }
Index: llvm/lib/Analysis/ScalarEvolution.cpp
===================================================================
--- llvm/lib/Analysis/ScalarEvolution.cpp
+++ llvm/lib/Analysis/ScalarEvolution.cpp
@@ -3317,10 +3317,7 @@
}
// Add the total offset from all the GEP indices to the base.
- auto *GEPExpr = getAddExpr(BaseExpr, TotalOffset, Wrap);
- assert(BaseExpr->getType() == GEPExpr->getType() &&
- "GEP should not change type mid-flight.");
- return GEPExpr;
+ return getAddExpr(BaseExpr, TotalOffset, Wrap);
}
std::tuple<SCEV *, FoldingSetNodeID, void *>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D84294.279714.patch
Type: text/x-patch
Size: 2769 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200722/59d965f9/attachment.bin>
More information about the llvm-commits
mailing list