Skip to content

Commit 8b0df8e

Browse files
alinaszmodem
authored andcommitted
[LoopRotate] Get and update MSSA only if available in legacy pass manager.
Summary: Potential fix for: https://bugs.llvm.org/show_bug.cgi?id=44889 and https://bugs.llvm.org/show_bug.cgi?id=44408 In the legacy pass manager, loop rotate need not compute MemorySSA when not being in the same loop pass manager with other loop passes. There isn't currently a way to differentiate between the two cases, so this attempts to limit the usage in LoopRotate to only update MemorySSA when the analysis is already available. The side-effect of this is that it will split the Loop pipeline. This issue does not apply to the new pass manager, where we have a flag specifying if all loop passes in that loop pass manager preserve MemorySSA. Reviewers: dmgreen, fedor.sergeev, nikic Subscribers: Prazek, hiraditya, george.burgess.iv, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D74574 (cherry picked from commit 1326a5a)
1 parent 0fe369a commit 8b0df8e

File tree

5 files changed

+25
-23
lines changed

5 files changed

+25
-23
lines changed

llvm/lib/Transforms/Scalar/LoopRotation.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,8 @@ class LoopRotateLegacyPass : public LoopPass {
8181
void getAnalysisUsage(AnalysisUsage &AU) const override {
8282
AU.addRequired<AssumptionCacheTracker>();
8383
AU.addRequired<TargetTransformInfoWrapperPass>();
84-
if (EnableMSSALoopDependency) {
85-
AU.addRequired<MemorySSAWrapperPass>();
84+
if (EnableMSSALoopDependency)
8685
AU.addPreserved<MemorySSAWrapperPass>();
87-
}
8886
getLoopAnalysisUsage(AU);
8987
}
9088

@@ -101,8 +99,11 @@ class LoopRotateLegacyPass : public LoopPass {
10199
const SimplifyQuery SQ = getBestSimplifyQuery(*this, F);
102100
Optional<MemorySSAUpdater> MSSAU;
103101
if (EnableMSSALoopDependency) {
104-
MemorySSA *MSSA = &getAnalysis<MemorySSAWrapperPass>().getMSSA();
105-
MSSAU = MemorySSAUpdater(MSSA);
102+
// Not requiring MemorySSA and getting it only if available will split
103+
// the loop pass pipeline when LoopRotate is being run first.
104+
auto *MSSAA = getAnalysisIfAvailable<MemorySSAWrapperPass>();
105+
if (MSSAA)
106+
MSSAU = MemorySSAUpdater(&MSSAA->getMSSA());
106107
}
107108
return LoopRotation(L, LI, TTI, AC, &DT, &SE,
108109
MSSAU.hasValue() ? MSSAU.getPointer() : nullptr, SQ,

llvm/test/Other/opt-O2-pipeline.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,16 +100,17 @@
100100
; CHECK-NEXT: Simplify the CFG
101101
; CHECK-NEXT: Reassociate expressions
102102
; CHECK-NEXT: Dominator Tree Construction
103-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
104-
; CHECK-NEXT: Function Alias Analysis Results
105-
; CHECK-NEXT: Memory SSA
106103
; CHECK-NEXT: Natural Loop Information
107104
; CHECK-NEXT: Canonicalize natural loops
108105
; CHECK-NEXT: LCSSA Verifier
109106
; CHECK-NEXT: Loop-Closed SSA Form Pass
107+
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
108+
; CHECK-NEXT: Function Alias Analysis Results
110109
; CHECK-NEXT: Scalar Evolution Analysis
111110
; CHECK-NEXT: Loop Pass Manager
112111
; CHECK-NEXT: Rotate Loops
112+
; CHECK-NEXT: Memory SSA
113+
; CHECK-NEXT: Loop Pass Manager
113114
; CHECK-NEXT: Loop Invariant Code Motion
114115
; CHECK-NEXT: Unswitch loops
115116
; CHECK-NEXT: Simplify the CFG
@@ -200,13 +201,12 @@
200201
; CHECK-NEXT: Float to int
201202
; CHECK-NEXT: Lower constant intrinsics
202203
; CHECK-NEXT: Dominator Tree Construction
203-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
204-
; CHECK-NEXT: Function Alias Analysis Results
205-
; CHECK-NEXT: Memory SSA
206204
; CHECK-NEXT: Natural Loop Information
207205
; CHECK-NEXT: Canonicalize natural loops
208206
; CHECK-NEXT: LCSSA Verifier
209207
; CHECK-NEXT: Loop-Closed SSA Form Pass
208+
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
209+
; CHECK-NEXT: Function Alias Analysis Results
210210
; CHECK-NEXT: Scalar Evolution Analysis
211211
; CHECK-NEXT: Loop Pass Manager
212212
; CHECK-NEXT: Rotate Loops

llvm/test/Other/opt-O3-pipeline.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,16 +105,17 @@
105105
; CHECK-NEXT: Simplify the CFG
106106
; CHECK-NEXT: Reassociate expressions
107107
; CHECK-NEXT: Dominator Tree Construction
108-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
109-
; CHECK-NEXT: Function Alias Analysis Results
110-
; CHECK-NEXT: Memory SSA
111108
; CHECK-NEXT: Natural Loop Information
112109
; CHECK-NEXT: Canonicalize natural loops
113110
; CHECK-NEXT: LCSSA Verifier
114111
; CHECK-NEXT: Loop-Closed SSA Form Pass
112+
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
113+
; CHECK-NEXT: Function Alias Analysis Results
115114
; CHECK-NEXT: Scalar Evolution Analysis
116115
; CHECK-NEXT: Loop Pass Manager
117116
; CHECK-NEXT: Rotate Loops
117+
; CHECK-NEXT: Memory SSA
118+
; CHECK-NEXT: Loop Pass Manager
118119
; CHECK-NEXT: Loop Invariant Code Motion
119120
; CHECK-NEXT: Unswitch loops
120121
; CHECK-NEXT: Simplify the CFG
@@ -205,13 +206,12 @@
205206
; CHECK-NEXT: Float to int
206207
; CHECK-NEXT: Lower constant intrinsics
207208
; CHECK-NEXT: Dominator Tree Construction
208-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
209-
; CHECK-NEXT: Function Alias Analysis Results
210-
; CHECK-NEXT: Memory SSA
211209
; CHECK-NEXT: Natural Loop Information
212210
; CHECK-NEXT: Canonicalize natural loops
213211
; CHECK-NEXT: LCSSA Verifier
214212
; CHECK-NEXT: Loop-Closed SSA Form Pass
213+
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
214+
; CHECK-NEXT: Function Alias Analysis Results
215215
; CHECK-NEXT: Scalar Evolution Analysis
216216
; CHECK-NEXT: Loop Pass Manager
217217
; CHECK-NEXT: Rotate Loops

llvm/test/Other/opt-Os-pipeline.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,16 +87,17 @@
8787
; CHECK-NEXT: Simplify the CFG
8888
; CHECK-NEXT: Reassociate expressions
8989
; CHECK-NEXT: Dominator Tree Construction
90-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
91-
; CHECK-NEXT: Function Alias Analysis Results
92-
; CHECK-NEXT: Memory SSA
9390
; CHECK-NEXT: Natural Loop Information
9491
; CHECK-NEXT: Canonicalize natural loops
9592
; CHECK-NEXT: LCSSA Verifier
9693
; CHECK-NEXT: Loop-Closed SSA Form Pass
94+
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
95+
; CHECK-NEXT: Function Alias Analysis Results
9796
; CHECK-NEXT: Scalar Evolution Analysis
9897
; CHECK-NEXT: Loop Pass Manager
9998
; CHECK-NEXT: Rotate Loops
99+
; CHECK-NEXT: Memory SSA
100+
; CHECK-NEXT: Loop Pass Manager
100101
; CHECK-NEXT: Loop Invariant Code Motion
101102
; CHECK-NEXT: Unswitch loops
102103
; CHECK-NEXT: Simplify the CFG
@@ -187,13 +188,12 @@
187188
; CHECK-NEXT: Float to int
188189
; CHECK-NEXT: Lower constant intrinsics
189190
; CHECK-NEXT: Dominator Tree Construction
190-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
191-
; CHECK-NEXT: Function Alias Analysis Results
192-
; CHECK-NEXT: Memory SSA
193191
; CHECK-NEXT: Natural Loop Information
194192
; CHECK-NEXT: Canonicalize natural loops
195193
; CHECK-NEXT: LCSSA Verifier
196194
; CHECK-NEXT: Loop-Closed SSA Form Pass
195+
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
196+
; CHECK-NEXT: Function Alias Analysis Results
197197
; CHECK-NEXT: Scalar Evolution Analysis
198198
; CHECK-NEXT: Loop Pass Manager
199199
; CHECK-NEXT: Rotate Loops

llvm/test/Other/pass-pipelines.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
; CHECK-O2-NEXT: FunctionPass Manager
5353
; CHECK-O2-NOT: Manager
5454
; CHECK-O2: Loop Pass Manager
55+
; CHECK-O2: Loop Pass Manager
5556
; CHECK-O2-NOT: Manager
5657
; FIXME: We shouldn't be pulling out to simplify-cfg and instcombine and
5758
; causing new loop pass managers.

0 commit comments

Comments
 (0)