Skip to content

Commit 0c95e55

Browse files
committed
Old pass manager hacking
1 parent 49b0899 commit 0c95e55

File tree

8 files changed

+27
-11
lines changed

8 files changed

+27
-11
lines changed

llvm/include/llvm/Analysis/RuntimeLibcallInfo.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ class LLVM_ABI RuntimeLibraryAnalysis
3232
LLVM_ABI RTLIB::RuntimeLibcallsInfo run(const Module &M,
3333
ModuleAnalysisManager &);
3434

35+
operator bool() const { return LibcallsInfo.has_value(); }
36+
3537
private:
3638
friend AnalysisInfoMixin<RuntimeLibraryAnalysis>;
3739
LLVM_ABI static AnalysisKey Key;

llvm/include/llvm/CodeGen/LibcallLoweringInfo.h

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@
1010
#define LLVM_CODEGEN_LIBCALLLOWERINGINFO_H
1111

1212
#include "llvm/ADT/DenseMap.h"
13+
#include "llvm/Analysis/RuntimeLibcallInfo.h"
1314
#include "llvm/IR/RuntimeLibcalls.h"
1415
#include "llvm/Pass.h"
1516

1617
namespace llvm {
17-
18+
class RuntimeLibraryInfoWrapper;
1819
class TargetSubtargetInfo;
1920
class TargetMachine;
2021

@@ -97,6 +98,8 @@ class LibcallLoweringModuleAnalysisResult {
9798
LoweringMap.clear();
9899
}
99100

101+
operator bool() const { return RTLCI != nullptr; }
102+
100103
LLVM_ABI bool invalidate(Module &, const PreservedAnalyses &,
101104
ModuleAnalysisManager::Invalidator &);
102105

@@ -122,21 +125,24 @@ class LibcallLoweringModuleAnalysis
122125

123126
class LLVM_ABI LibcallLoweringInfoWrapper : public ImmutablePass {
124127
LibcallLoweringModuleAnalysisResult Result;
128+
RuntimeLibraryInfoWrapper *RuntimeLibcallsWrapper = nullptr;
125129

126130
public:
127131
static char ID;
128132
LibcallLoweringInfoWrapper();
129133

130134
const LibcallLoweringInfo &
131-
getLibcallLowering(const TargetSubtargetInfo &Subtarget) const {
132-
return Result.getLibcallLowering(Subtarget);
135+
getLibcallLowering(const Module &M, const TargetSubtargetInfo &Subtarget) {
136+
return getResult(M).getLibcallLowering(Subtarget);
133137
}
134138

135-
const LibcallLoweringModuleAnalysisResult &getResult() const {
139+
const LibcallLoweringModuleAnalysisResult &getResult(const Module &M) {
140+
if (!Result)
141+
Result.init(&RuntimeLibcallsWrapper->getRTLCI(M));
136142
return Result;
137143
}
138144

139-
bool doInitialization(Module &M) override;
145+
void initializePass() override;
140146
void getAnalysisUsage(AnalysisUsage &AU) const override;
141147
void releaseMemory() override;
142148
};

llvm/include/llvm/CodeGen/Passes.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,8 @@ LLVM_ABI FunctionPass *createInterleavedLoadCombinePass();
487487
///
488488
LLVM_ABI ModulePass *createLowerEmuTLSPass();
489489

490+
LLVM_ABI ModulePass *createLibcallLoweringInfoWrapper();
491+
490492
/// This pass lowers the \@llvm.load.relative and \@llvm.objc.* intrinsics to
491493
/// instructions. This is unsafe to do earlier because a pass may combine the
492494
/// constant initializer into the load, which may result in an overflowing

llvm/lib/CodeGen/ExpandFp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1097,7 +1097,7 @@ class ExpandFpLegacyPass : public FunctionPass {
10971097

10981098
const LibcallLoweringInfo &Libcalls =
10991099
getAnalysis<LibcallLoweringInfoWrapper>().getLibcallLowering(
1100-
*Subtarget);
1100+
*F.getParent(), *Subtarget);
11011101

11021102
if (OptLevel != CodeGenOptLevel::None && !F.hasOptNone())
11031103
AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);

llvm/lib/CodeGen/GlobalISel/Legalizer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,8 @@ bool Legalizer::runOnMachineFunction(MachineFunction &MF) {
343343
const TargetSubtargetInfo &Subtarget = MF.getSubtarget();
344344

345345
const LibcallLoweringInfo &Libcalls =
346-
getAnalysis<LibcallLoweringInfoWrapper>().getLibcallLowering(Subtarget);
346+
getAnalysis<LibcallLoweringInfoWrapper>().getLibcallLowering(
347+
*MF.getFunction().getParent(), Subtarget);
347348

348349
// This allows Known Bits Analysis in the legalizer.
349350
GISelValueTracking *VT =

llvm/lib/CodeGen/LibcallLoweringInfo.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,8 @@ char LibcallLoweringInfoWrapper::ID = 0;
5959

6060
LibcallLoweringInfoWrapper::LibcallLoweringInfoWrapper() : ImmutablePass(ID) {}
6161

62-
bool LibcallLoweringInfoWrapper::doInitialization(Module &M) {
63-
Result.init(&getAnalysis<RuntimeLibraryInfoWrapper>().getRTLCI(M));
64-
return false;
62+
void LibcallLoweringInfoWrapper::initializePass() {
63+
RuntimeLibcallsWrapper = &getAnalysis<RuntimeLibraryInfoWrapper>();
6564
}
6665

6766
void LibcallLoweringInfoWrapper::getAnalysisUsage(AnalysisUsage &AU) const {
@@ -70,3 +69,7 @@ void LibcallLoweringInfoWrapper::getAnalysisUsage(AnalysisUsage &AU) const {
7069
}
7170

7271
void LibcallLoweringInfoWrapper::releaseMemory() { Result.clear(); }
72+
73+
ModulePass *llvm::createLibcallLoweringInfoWrapper() {
74+
return new LibcallLoweringInfoWrapper();
75+
}

llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,7 @@ class PreISelIntrinsicLoweringLegacyPass : public ModulePass {
635635

636636
bool runOnModule(Module &M) override {
637637
const LibcallLoweringModuleAnalysisResult &ModuleLibcalls =
638-
getAnalysis<LibcallLoweringInfoWrapper>().getResult();
638+
getAnalysis<LibcallLoweringInfoWrapper>().getResult(M);
639639

640640
auto LookupTTI = [this](Function &F) -> TargetTransformInfo & {
641641
return this->getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);

llvm/lib/CodeGen/TargetPassConfig.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,8 @@ TargetPassConfig::TargetPassConfig(TargetMachine &TM, PassManagerBase &PM)
599599
// including this pass itself.
600600
initializeCodeGen(PR);
601601

602+
initializeLibcallLoweringInfoWrapperPass(PR);
603+
602604
// Also register alias analysis passes required by codegen passes.
603605
initializeBasicAAWrapperPassPass(PR);
604606
initializeAAResultsWrapperPassPass(PR);

0 commit comments

Comments
 (0)