Skip to content

Commit 986e959

Browse files
committed
[Passes] Report error when pass requires target machine
1 parent 972ecc3 commit 986e959

21 files changed

+93
-47
lines changed

llvm/include/llvm/CodeGen/AtomicExpand.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class AtomicExpandPass : public PassInfoMixin<AtomicExpandPass> {
2121
const TargetMachine *TM;
2222

2323
public:
24-
AtomicExpandPass(const TargetMachine *TM) : TM(TM) {}
24+
AtomicExpandPass(const TargetMachine &TM) : TM(&TM) {}
2525
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
2626
};
2727

llvm/include/llvm/CodeGen/BasicBlockSectionsProfileReader.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ class BasicBlockSectionsProfileReaderAnalysis
167167
public:
168168
static AnalysisKey Key;
169169
typedef BasicBlockSectionsProfileReader Result;
170-
BasicBlockSectionsProfileReaderAnalysis(const TargetMachine *TM) : TM(TM) {}
170+
BasicBlockSectionsProfileReaderAnalysis(const TargetMachine &TM) : TM(&TM) {}
171171

172172
Result run(Function &F, FunctionAnalysisManager &AM);
173173

llvm/include/llvm/CodeGen/CodeGenPrepare.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class CodeGenPreparePass : public PassInfoMixin<CodeGenPreparePass> {
2626
const TargetMachine *TM;
2727

2828
public:
29-
CodeGenPreparePass(const TargetMachine *TM) : TM(TM) {}
29+
CodeGenPreparePass(const TargetMachine &TM) : TM(&TM) {}
3030
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
3131
};
3232

llvm/include/llvm/CodeGen/ComplexDeinterleavingPass.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ class TargetMachine;
2424
struct ComplexDeinterleavingPass
2525
: public PassInfoMixin<ComplexDeinterleavingPass> {
2626
private:
27-
TargetMachine *TM;
27+
const TargetMachine *TM;
2828

2929
public:
30-
ComplexDeinterleavingPass(TargetMachine *TM) : TM(TM) {}
30+
ComplexDeinterleavingPass(const TargetMachine &TM) : TM(&TM) {}
3131

3232
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
3333
};

llvm/include/llvm/CodeGen/DwarfEHPrepare.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class DwarfEHPreparePass : public PassInfoMixin<DwarfEHPreparePass> {
2424
const TargetMachine *TM;
2525

2626
public:
27-
explicit DwarfEHPreparePass(const TargetMachine *TM_) : TM(TM_) {}
27+
explicit DwarfEHPreparePass(const TargetMachine &TM_) : TM(&TM_) {}
2828
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
2929
};
3030

llvm/include/llvm/CodeGen/ExpandFp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class ExpandFpPass : public PassInfoMixin<ExpandFpPass> {
2020
const TargetMachine *TM;
2121

2222
public:
23-
explicit ExpandFpPass(const TargetMachine *TM_) : TM(TM_) {}
23+
explicit ExpandFpPass(const TargetMachine &TM_) : TM(&TM_) {}
2424

2525
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
2626
};

llvm/include/llvm/CodeGen/ExpandLargeDivRem.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class ExpandLargeDivRemPass : public PassInfoMixin<ExpandLargeDivRemPass> {
2020
const TargetMachine *TM;
2121

2222
public:
23-
explicit ExpandLargeDivRemPass(const TargetMachine *TM_) : TM(TM_) {}
23+
explicit ExpandLargeDivRemPass(const TargetMachine &TM_) : TM(&TM_) {}
2424

2525
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
2626
};

llvm/include/llvm/CodeGen/ExpandMemCmp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class ExpandMemCmpPass : public PassInfoMixin<ExpandMemCmpPass> {
1919
const TargetMachine *TM;
2020

2121
public:
22-
explicit ExpandMemCmpPass(const TargetMachine *TM_) : TM(TM_) {}
22+
explicit ExpandMemCmpPass(const TargetMachine &TM_) : TM(&TM_) {}
2323

2424
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
2525
};

llvm/include/llvm/CodeGen/GlobalMerge.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ class GlobalMergePass : public PassInfoMixin<GlobalMergePass> {
4545
GlobalMergeOptions Options;
4646

4747
public:
48-
GlobalMergePass(const TargetMachine *TM, GlobalMergeOptions Options)
49-
: TM(TM), Options(Options) {}
48+
GlobalMergePass(const TargetMachine &TM, GlobalMergeOptions Options)
49+
: TM(&TM), Options(Options) {}
5050

5151
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
5252
};

llvm/include/llvm/CodeGen/IndirectBrExpand.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class IndirectBrExpandPass : public PassInfoMixin<IndirectBrExpandPass> {
1919
const TargetMachine *TM;
2020

2121
public:
22-
IndirectBrExpandPass(const TargetMachine *TM) : TM(TM) {}
22+
IndirectBrExpandPass(const TargetMachine &TM) : TM(&TM) {}
2323
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
2424
};
2525

llvm/include/llvm/CodeGen/InterleavedAccess.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class InterleavedAccessPass : public PassInfoMixin<InterleavedAccessPass> {
2525
const TargetMachine *TM;
2626

2727
public:
28-
explicit InterleavedAccessPass(const TargetMachine *TM) : TM(TM) {}
28+
explicit InterleavedAccessPass(const TargetMachine &TM) : TM(&TM) {}
2929
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
3030
};
3131

llvm/include/llvm/CodeGen/InterleavedLoadCombine.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class InterleavedLoadCombinePass
2020
const TargetMachine *TM;
2121

2222
public:
23-
explicit InterleavedLoadCombinePass(const TargetMachine *TM) : TM(TM) {}
23+
explicit InterleavedLoadCombinePass(const TargetMachine &TM) : TM(&TM) {}
2424
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
2525
};
2626

llvm/include/llvm/CodeGen/MachineFunctionAnalysis.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class MachineFunctionAnalysis
4242
FunctionAnalysisManager::Invalidator &);
4343
};
4444

45-
MachineFunctionAnalysis(const TargetMachine *TM) : TM(TM) {};
45+
MachineFunctionAnalysis(const TargetMachine &TM) : TM(&TM) {};
4646
LLVM_ABI Result run(Function &F, FunctionAnalysisManager &FAM);
4747
};
4848

llvm/include/llvm/CodeGen/SafeStack.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class SafeStackPass : public PassInfoMixin<SafeStackPass> {
1919
const TargetMachine *TM;
2020

2121
public:
22-
explicit SafeStackPass(const TargetMachine *TM_) : TM(TM_) {}
22+
explicit SafeStackPass(const TargetMachine &TM_) : TM(&TM_) {}
2323
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
2424
};
2525

llvm/include/llvm/CodeGen/SelectOptimize.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class SelectOptimizePass : public PassInfoMixin<SelectOptimizePass> {
2525
const TargetMachine *TM;
2626

2727
public:
28-
explicit SelectOptimizePass(const TargetMachine *TM) : TM(TM) {}
28+
explicit SelectOptimizePass(const TargetMachine &TM) : TM(&TM) {}
2929
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
3030
};
3131

llvm/include/llvm/CodeGen/StackProtector.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ class StackProtectorPass : public PassInfoMixin<StackProtectorPass> {
8686
const TargetMachine *TM;
8787

8888
public:
89-
explicit StackProtectorPass(const TargetMachine *TM) : TM(TM) {}
89+
explicit StackProtectorPass(const TargetMachine &TM) : TM(&TM) {}
9090
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
9191
};
9292

llvm/include/llvm/CodeGen/TypePromotion.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class TypePromotionPass : public PassInfoMixin<TypePromotionPass> {
2626
const TargetMachine *TM;
2727

2828
public:
29-
TypePromotionPass(const TargetMachine *TM): TM(TM) { }
29+
TypePromotionPass(const TargetMachine &TM) : TM(&TM) {}
3030
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
3131
};
3232

llvm/include/llvm/Passes/CodeGenPassBuilder.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -672,8 +672,8 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addISelPasses(
672672
addPass(LowerEmuTLSPass());
673673

674674
addPass(PreISelIntrinsicLoweringPass(&TM));
675-
addPass(ExpandLargeDivRemPass(&TM));
676-
addPass(ExpandFpPass(&TM));
675+
addPass(ExpandLargeDivRemPass(TM));
676+
addPass(ExpandFpPass(TM));
677677

678678
derived().addIRPasses(addPass);
679679
derived().addCodeGenPrepare(addPass);
@@ -704,7 +704,7 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addIRPasses(
704704
// target lowering hook.
705705
if (!Opt.DisableMergeICmps)
706706
addPass(MergeICmpsPass());
707-
addPass(ExpandMemCmpPass(&TM));
707+
addPass(ExpandMemCmpPass(TM));
708708
}
709709

710710
// Run GC lowering passes for builtin collectors
@@ -742,7 +742,7 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addIRPasses(
742742

743743
// Convert conditional moves to conditional jumps when profitable.
744744
if (getOptLevel() != CodeGenOptLevel::None && !Opt.DisableSelectOptimize)
745-
addPass(SelectOptimizePass(&TM));
745+
addPass(SelectOptimizePass(TM));
746746

747747
if (Opt.EnableGlobalMergeFunc)
748748
addPass(GlobalMergeFuncPass());
@@ -769,14 +769,14 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addPassesToHandleExceptions(
769769
case ExceptionHandling::ARM:
770770
case ExceptionHandling::AIX:
771771
case ExceptionHandling::ZOS:
772-
addPass(DwarfEHPreparePass(&TM));
772+
addPass(DwarfEHPreparePass(TM));
773773
break;
774774
case ExceptionHandling::WinEH:
775775
// We support using both GCC-style and MSVC-style exceptions on Windows, so
776776
// add both preparation passes. Each pass will only actually run if it
777777
// recognizes the personality function.
778778
addPass(WinEHPreparePass());
779-
addPass(DwarfEHPreparePass(&TM));
779+
addPass(DwarfEHPreparePass(TM));
780780
break;
781781
case ExceptionHandling::Wasm:
782782
// Wasm EH uses Windows EH instructions, but it does not need to demote PHIs
@@ -801,7 +801,7 @@ template <typename Derived, typename TargetMachineT>
801801
void CodeGenPassBuilder<Derived, TargetMachineT>::addCodeGenPrepare(
802802
AddIRPass &addPass) const {
803803
if (getOptLevel() != CodeGenOptLevel::None && !Opt.DisableCGP)
804-
addPass(CodeGenPreparePass(&TM));
804+
addPass(CodeGenPreparePass(TM));
805805
// TODO: Default ctor'd RewriteSymbolPass is no-op.
806806
// addPass(RewriteSymbolPass());
807807
}
@@ -816,8 +816,8 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addISelPrepare(
816816
addPass(CallBrPreparePass());
817817
// Add both the safe stack and the stack protection passes: each of them will
818818
// only protect functions that have corresponding attributes.
819-
addPass(SafeStackPass(&TM));
820-
addPass(StackProtectorPass(&TM));
819+
addPass(SafeStackPass(TM));
820+
addPass(StackProtectorPass(TM));
821821

822822
if (Opt.PrintISelInput)
823823
addPass(PrintFunctionPass(dbgs(),

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1851,6 +1851,16 @@ Error PassBuilder::parseModulePass(ModulePassManager &MPM,
18511851
auto Params = parsePassParameters(PARSER, Name, NAME); \
18521852
if (!Params) \
18531853
return Params.takeError(); \
1854+
auto CreatePass = CREATE_PASS; \
1855+
if constexpr (std::is_constructible_v< \
1856+
std::remove_reference_t<decltype(CreatePass( \
1857+
Params.get()))>, \
1858+
const TargetMachine &, decltype(Params.get())>) { \
1859+
if (!TM) \
1860+
return make_error<StringError>( \
1861+
formatv("Pass '{0}' requires TargetMachine", Name).str(), \
1862+
inconvertibleErrorCode()); \
1863+
} \
18541864
MPM.addPass(CREATE_PASS(Params.get())); \
18551865
return Error::success(); \
18561866
}
@@ -1882,6 +1892,14 @@ Error PassBuilder::parseModulePass(ModulePassManager &MPM,
18821892
}
18831893
#define FUNCTION_PASS(NAME, CREATE_PASS) \
18841894
if (Name == NAME) { \
1895+
if constexpr (std::is_constructible_v< \
1896+
std::remove_reference_t<decltype(CREATE_PASS)>, \
1897+
const TargetMachine &>) { \
1898+
if (!TM) \
1899+
return make_error<StringError>( \
1900+
formatv("Pass '{0}' requires TargetMachine", Name).str(), \
1901+
inconvertibleErrorCode()); \
1902+
} \
18851903
MPM.addPass(createModuleToFunctionPassAdaptor(CREATE_PASS)); \
18861904
return Error::success(); \
18871905
}
@@ -1997,6 +2015,14 @@ Error PassBuilder::parseCGSCCPass(CGSCCPassManager &CGPM,
19972015
}
19982016
#define FUNCTION_PASS(NAME, CREATE_PASS) \
19992017
if (Name == NAME) { \
2018+
if constexpr (std::is_constructible_v< \
2019+
std::remove_reference_t<decltype(CREATE_PASS)>, \
2020+
const TargetMachine &>) { \
2021+
if (!TM) \
2022+
return make_error<StringError>( \
2023+
formatv("Pass '{0}' requires TargetMachine", Name).str(), \
2024+
inconvertibleErrorCode()); \
2025+
} \
20002026
CGPM.addPass(createCGSCCToFunctionPassAdaptor(CREATE_PASS)); \
20012027
return Error::success(); \
20022028
}
@@ -2091,6 +2117,14 @@ Error PassBuilder::parseFunctionPass(FunctionPassManager &FPM,
20912117
// Now expand the basic registered passes from the .inc file.
20922118
#define FUNCTION_PASS(NAME, CREATE_PASS) \
20932119
if (Name == NAME) { \
2120+
if constexpr (std::is_constructible_v< \
2121+
std::remove_reference_t<decltype(CREATE_PASS)>, \
2122+
const TargetMachine &>) { \
2123+
if (!TM) \
2124+
return make_error<StringError>( \
2125+
formatv("Pass '{0}' requires TargetMachine", Name).str(), \
2126+
inconvertibleErrorCode()); \
2127+
} \
20942128
FPM.addPass(CREATE_PASS); \
20952129
return Error::success(); \
20962130
}
@@ -2104,9 +2138,17 @@ Error PassBuilder::parseFunctionPass(FunctionPassManager &FPM,
21042138
}
21052139
#define FUNCTION_ANALYSIS(NAME, CREATE_PASS) \
21062140
if (Name == "require<" NAME ">") { \
2141+
if constexpr (std::is_constructible_v< \
2142+
std::remove_reference_t<decltype(CREATE_PASS)>, \
2143+
const TargetMachine &>) { \
2144+
if (!TM) \
2145+
return make_error<StringError>( \
2146+
formatv("Pass '{0}' requires TargetMachine", Name).str(), \
2147+
inconvertibleErrorCode()); \
2148+
} \
21072149
FPM.addPass( \
2108-
RequireAnalysisPass< \
2109-
std::remove_reference_t<decltype(CREATE_PASS)>, Function>()); \
2150+
RequireAnalysisPass<std::remove_reference_t<decltype(CREATE_PASS)>, \
2151+
Function>()); \
21102152
return Error::success(); \
21112153
} \
21122154
if (Name == "invalidate<" NAME ">") { \

0 commit comments

Comments
 (0)