Skip to content

Commit 4b0dd35

Browse files
committed
!fixup use SmallDenseSet
1 parent 1c915c4 commit 4b0dd35

File tree

3 files changed

+20
-10
lines changed

3 files changed

+20
-10
lines changed

llvm/include/llvm/Analysis/ScalarEvolution.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1345,7 +1345,7 @@ class ScalarEvolution {
13451345

13461346
class LoopGuards {
13471347
DenseMap<const SCEV *, const SCEV *> RewriteMap;
1348-
DenseMap<const SCEV *, SmallPtrSet<const SCEV *, 2>> NotEqualMap;
1348+
SmallDenseSet<std::pair<const SCEV *, const SCEV *>> NotEqual;
13491349
bool PreserveNUW = false;
13501350
bool PreserveNSW = false;
13511351
ScalarEvolution &SE;

llvm/lib/Analysis/ScalarEvolution.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15782,8 +15782,9 @@ void ScalarEvolution::LoopGuards::collectFromBlock(
1578215782
RHS = A;
1578315783
LHS = B;
1578415784
}
15785-
Guards.NotEqualMap[LHS].insert(RHS);
15786-
Guards.NotEqualMap[RHS].insert(LHS);
15785+
if (LHS > RHS)
15786+
std::swap(LHS, RHS);
15787+
Guards.NotEqual.insert({LHS, RHS});
1578715788
continue;
1578815789
}
1578915790
break;
@@ -15917,15 +15918,15 @@ const SCEV *ScalarEvolution::LoopGuards::rewrite(const SCEV *Expr) const {
1591715918
class SCEVLoopGuardRewriter
1591815919
: public SCEVRewriteVisitor<SCEVLoopGuardRewriter> {
1591915920
const DenseMap<const SCEV *, const SCEV *> &Map;
15920-
const DenseMap<const SCEV *, SmallPtrSet<const SCEV *, 2>> &NotEqualMap;
15921+
const SmallDenseSet<std::pair<const SCEV *, const SCEV *>> &NotEqual;
1592115922

1592215923
SCEV::NoWrapFlags FlagMask = SCEV::FlagAnyWrap;
1592315924

1592415925
public:
1592515926
SCEVLoopGuardRewriter(ScalarEvolution &SE,
1592615927
const ScalarEvolution::LoopGuards &Guards)
1592715928
: SCEVRewriteVisitor(SE), Map(Guards.RewriteMap),
15928-
NotEqualMap(Guards.NotEqualMap) {
15929+
NotEqual(Guards.NotEqual) {
1592915930
if (Guards.PreserveNUW)
1593015931
FlagMask = ScalarEvolution::setFlags(FlagMask, SCEV::FlagNUW);
1593115932
if (Guards.PreserveNSW)
@@ -15985,8 +15986,9 @@ const SCEV *ScalarEvolution::LoopGuards::rewrite(const SCEV *Expr) const {
1598515986
auto RewriteSubtraction = [&](const SCEV *S) -> const SCEV * {
1598615987
const SCEV *LHS, *RHS;
1598715988
if (MatchBinarySub(S, LHS, RHS)) {
15988-
auto It = NotEqualMap.find(LHS);
15989-
if (It != NotEqualMap.end() && It->second.contains(RHS))
15989+
if (LHS > RHS)
15990+
std::swap(LHS, RHS);
15991+
if (NotEqual.contains({LHS, RHS}))
1599015992
return SE.getUMaxExpr(S, SE.getOne(S->getType()));
1599115993
}
1599215994
return nullptr;
@@ -16043,7 +16045,7 @@ const SCEV *ScalarEvolution::LoopGuards::rewrite(const SCEV *Expr) const {
1604316045
}
1604416046
};
1604516047

16046-
if (RewriteMap.empty() && NotEqualMap.empty())
16048+
if (RewriteMap.empty() && NotEqual.empty())
1604716049
return Expr;
1604816050

1604916051
SCEVLoopGuardRewriter Rewriter(SE, *this);

llvm/test/Transforms/IndVarSimplify/pointer-loop-guards.ll

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,13 +161,17 @@ define void @test_ptr_diff_with_assume(ptr align 8 %start, ptr align 8 %end, ptr
161161
; CHECK-NEXT: [[PTR_DIFF:%.*]] = sub i64 [[START_INT]], [[END_INT]]
162162
; CHECK-NEXT: [[DIFF_CMP:%.*]] = icmp ult i64 [[PTR_DIFF]], 2
163163
; CHECK-NEXT: call void @llvm.assume(i1 [[DIFF_CMP]])
164+
; CHECK-NEXT: [[COMPUTED_END:%.*]] = getelementptr i8, ptr [[START]], i64 [[PTR_DIFF]]
164165
; CHECK-NEXT: [[ENTRY_CMP:%.*]] = icmp eq ptr [[START]], [[END]]
165166
; CHECK-NEXT: br i1 [[ENTRY_CMP]], label %[[EXIT:.*]], label %[[LOOP_BODY_PREHEADER:.*]]
166167
; CHECK: [[LOOP_BODY_PREHEADER]]:
167168
; CHECK-NEXT: br label %[[LOOP_BODY:.*]]
168169
; CHECK: [[LOOP_BODY]]:
170+
; CHECK-NEXT: [[IV:%.*]] = phi ptr [ [[IV_NEXT:%.*]], %[[LOOP_BODY]] ], [ [[START]], %[[LOOP_BODY_PREHEADER]] ]
169171
; CHECK-NEXT: [[TMP0:%.*]] = call i1 @cond()
170-
; CHECK-NEXT: br i1 true, label %[[EXIT_LOOPEXIT:.*]], label %[[LOOP_BODY]]
172+
; CHECK-NEXT: [[IV_NEXT]] = getelementptr i8, ptr [[IV]], i64 1
173+
; CHECK-NEXT: [[LOOP_CMP:%.*]] = icmp eq ptr [[IV_NEXT]], [[COMPUTED_END]]
174+
; CHECK-NEXT: br i1 [[LOOP_CMP]], label %[[EXIT_LOOPEXIT:.*]], label %[[LOOP_BODY]]
171175
; CHECK: [[EXIT_LOOPEXIT]]:
172176
; CHECK-NEXT: br label %[[EXIT]]
173177
; CHECK: [[EXIT]]:
@@ -181,13 +185,17 @@ define void @test_ptr_diff_with_assume(ptr align 8 %start, ptr align 8 %end, ptr
181185
; N32-NEXT: [[PTR_DIFF:%.*]] = sub i64 [[START_INT]], [[END_INT]]
182186
; N32-NEXT: [[DIFF_CMP:%.*]] = icmp ult i64 [[PTR_DIFF]], 2
183187
; N32-NEXT: call void @llvm.assume(i1 [[DIFF_CMP]])
188+
; N32-NEXT: [[COMPUTED_END:%.*]] = getelementptr i8, ptr [[START]], i64 [[PTR_DIFF]]
184189
; N32-NEXT: [[ENTRY_CMP:%.*]] = icmp eq ptr [[START]], [[END]]
185190
; N32-NEXT: br i1 [[ENTRY_CMP]], label %[[EXIT:.*]], label %[[LOOP_BODY_PREHEADER:.*]]
186191
; N32: [[LOOP_BODY_PREHEADER]]:
187192
; N32-NEXT: br label %[[LOOP_BODY:.*]]
188193
; N32: [[LOOP_BODY]]:
194+
; N32-NEXT: [[IV:%.*]] = phi ptr [ [[IV_NEXT:%.*]], %[[LOOP_BODY]] ], [ [[START]], %[[LOOP_BODY_PREHEADER]] ]
189195
; N32-NEXT: [[TMP0:%.*]] = call i1 @cond()
190-
; N32-NEXT: br i1 true, label %[[EXIT_LOOPEXIT:.*]], label %[[LOOP_BODY]]
196+
; N32-NEXT: [[IV_NEXT]] = getelementptr i8, ptr [[IV]], i64 1
197+
; N32-NEXT: [[LOOP_CMP:%.*]] = icmp eq ptr [[IV_NEXT]], [[COMPUTED_END]]
198+
; N32-NEXT: br i1 [[LOOP_CMP]], label %[[EXIT_LOOPEXIT:.*]], label %[[LOOP_BODY]]
191199
; N32: [[EXIT_LOOPEXIT]]:
192200
; N32-NEXT: br label %[[EXIT]]
193201
; N32: [[EXIT]]:

0 commit comments

Comments
 (0)