@@ -305,9 +305,9 @@ namespace llvm {
305
305
void initializeLateLowerGCFramePass (PassRegistry &Registry);
306
306
}
307
307
308
- struct LateLowerGCFrame : public FunctionPass , private JuliaPassContext {
308
+ struct LateLowerGCFrameLegacy : public FunctionPass {
309
309
static char ID;
310
- LateLowerGCFrame () : FunctionPass(ID)
310
+ LateLowerGCFrameLegacy () : FunctionPass(ID)
311
311
{
312
312
llvm::initializeDominatorTreeWrapperPassPass (*PassRegistry::getPassRegistry ());
313
313
}
@@ -320,6 +320,17 @@ struct LateLowerGCFrame: public FunctionPass, private JuliaPassContext {
320
320
AU.setPreservesCFG ();
321
321
}
322
322
323
+ private:
324
+ bool runOnFunction (Function &F) override ;
325
+ };
326
+
327
+ struct LateLowerGCFrame : private JuliaPassContext {
328
+ function_ref<DominatorTree &()> GetDT;
329
+ LateLowerGCFrame (function_ref<DominatorTree &()> GetDT) : GetDT(GetDT) {}
330
+
331
+ public:
332
+ bool runOnFunction (Function &F);
333
+
323
334
private:
324
335
CallInst *pgcstack;
325
336
@@ -350,8 +361,6 @@ struct LateLowerGCFrame: public FunctionPass, private JuliaPassContext {
350
361
void PlaceGCFrameStore (State &S, unsigned R, unsigned MinColorRoot, const std::vector<int > &Colors, Value *GCFrame, Instruction *InsertBefore);
351
362
void PlaceGCFrameStores (State &S, unsigned MinColorRoot, const std::vector<int > &Colors, Value *GCFrame);
352
363
void PlaceRootsAndUpdateCalls (std::vector<int > &Colors, State &S, std::map<Value *, std::pair<int , int >>);
353
- bool doInitialization (Module &M) override ;
354
- bool runOnFunction (Function &F) override ;
355
364
bool CleanupIR (Function &F, State *S=nullptr );
356
365
void NoteUseChain (State &S, BBState &BBS, User *TheUser);
357
366
SmallVector<int , 1 > GetPHIRefinements (PHINode *phi, State &S);
@@ -1388,7 +1397,7 @@ void LateLowerGCFrame::FixUpRefinements(ArrayRef<int> PHINumbers, State &S)
1388
1397
j++;
1389
1398
if (auto inst = dyn_cast<Instruction>(S.ReversePtrNumbering [refine])) {
1390
1399
if (!S.DT )
1391
- S.DT = &getAnalysis<DominatorTreeWrapperPass>(). getDomTree ();
1400
+ S.DT = &GetDT ();
1392
1401
if (S.DT ->dominates (inst, Phi))
1393
1402
continue ;
1394
1403
// Decrement `j` so we'll overwrite/ignore it.
@@ -2000,7 +2009,7 @@ void LateLowerGCFrame::ComputeLiveSets(State &S) {
2000
2009
// add in any extra live values.
2001
2010
if (!S.GCPreserves .empty ()) {
2002
2011
if (!S.DT ) {
2003
- S.DT = &getAnalysis<DominatorTreeWrapperPass>(). getDomTree ();
2012
+ S.DT = &GetDT ();
2004
2013
}
2005
2014
for (auto it2 : S.GCPreserves ) {
2006
2015
if (!S.DT ->dominates (it2.first , Safepoint))
@@ -2658,16 +2667,9 @@ void LateLowerGCFrame::PlaceRootsAndUpdateCalls(std::vector<int> &Colors, State
2658
2667
}
2659
2668
}
2660
2669
2661
- bool LateLowerGCFrame::doInitialization (Module &M) {
2662
- // Initialize platform-agnostic references.
2663
- initAll (M);
2664
- return true ;
2665
- }
2666
-
2667
2670
bool LateLowerGCFrame::runOnFunction (Function &F) {
2671
+ initAll (*F.getParent ());
2668
2672
LLVM_DEBUG (dbgs () << " GC ROOT PLACEMENT: Processing function " << F.getName () << " \n " );
2669
- // Check availability of functions again since they might have been deleted.
2670
- initFunctions (*F.getParent ());
2671
2673
if (!pgcstack_getter)
2672
2674
return CleanupIR (F);
2673
2675
@@ -2684,11 +2686,19 @@ bool LateLowerGCFrame::runOnFunction(Function &F) {
2684
2686
return true ;
2685
2687
}
2686
2688
2687
- char LateLowerGCFrame::ID = 0 ;
2688
- static RegisterPass<LateLowerGCFrame> X (" LateLowerGCFrame" , " Late Lower GCFrame Pass" , false , false );
2689
+ bool LateLowerGCFrameLegacy::runOnFunction (Function &F) {
2690
+ auto GetDT = [this ]() -> DominatorTree & {
2691
+ return getAnalysis<DominatorTreeWrapperPass>().getDomTree ();
2692
+ };
2693
+ auto lateLowerGCFrame = LateLowerGCFrame (GetDT);
2694
+ return lateLowerGCFrame.runOnFunction (F);
2695
+ }
2696
+
2697
+ char LateLowerGCFrameLegacy::ID = 0 ;
2698
+ static RegisterPass<LateLowerGCFrameLegacy> X (" LateLowerGCFrame" , " Late Lower GCFrame Pass" , false , false );
2689
2699
2690
2700
Pass *createLateLowerGCFramePass () {
2691
- return new LateLowerGCFrame ();
2701
+ return new LateLowerGCFrameLegacy ();
2692
2702
}
2693
2703
2694
2704
extern " C" JL_DLLEXPORT void LLVMExtraAddLateLowerGCFramePass (LLVMPassManagerRef PM)
0 commit comments