From 69e815798427cab9b03946dc8c14cbdffc1451ad Mon Sep 17 00:00:00 2001 From: liujunchang Date: Wed, 1 Nov 2023 09:25:39 +0800 Subject: [PATCH] [Pass][CodeGen] Add some necessary passes --- .../include/llvm/CodeGen/CodeGenPassBuilder.h | 13 +++++++- .../llvm/CodeGen/MachinePassRegistry.def | 30 +++++++++++++++++-- llvm/lib/CodeGen/CodeGenPassBuilder.cpp | 2 ++ 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/llvm/include/llvm/CodeGen/CodeGenPassBuilder.h b/llvm/include/llvm/CodeGen/CodeGenPassBuilder.h index d7739e8bb597e..aefd12527378e 100644 --- a/llvm/include/llvm/CodeGen/CodeGenPassBuilder.h +++ b/llvm/include/llvm/CodeGen/CodeGenPassBuilder.h @@ -90,7 +90,18 @@ namespace llvm { } \ static AnalysisKey Key; \ }; -#include "MachinePassRegistry.def" +#define DUMMY_MACHINE_FUNCTION_ANALYSIS(NAME, PASS_NAME, CONSTRUCTOR) \ + struct PASS_NAME : public AnalysisInfoMixin { \ + template PASS_NAME(Ts &&...) {} \ + using Result = struct {}; \ + template \ + Result run(IRUnitT &, AnalysisManagerT &, ExtraArgTs &&...) { \ + return {}; \ + } \ + static AnalysisKey Key; \ + }; +#include "llvm/CodeGen/MachinePassRegistry.def" /// This class provides access to building LLVM's passes. /// diff --git a/llvm/include/llvm/CodeGen/MachinePassRegistry.def b/llvm/include/llvm/CodeGen/MachinePassRegistry.def index a29269644ea1d..6ddd86412ed5a 100644 --- a/llvm/include/llvm/CodeGen/MachinePassRegistry.def +++ b/llvm/include/llvm/CodeGen/MachinePassRegistry.def @@ -43,8 +43,8 @@ FUNCTION_PASS("replace-with-veclib", ReplaceWithVeclib, ()) FUNCTION_PASS("partially-inline-libcalls", PartiallyInlineLibCallsPass, ()) FUNCTION_PASS("ee-instrument", EntryExitInstrumenterPass, (false)) FUNCTION_PASS("post-inline-ee-instrument", EntryExitInstrumenterPass, (true)) -FUNCTION_PASS("expand-large-div-rem", ExpandLargeDivRemPass, ()) -FUNCTION_PASS("expand-large-fp-convert", ExpandLargeFpConvertPass, ()) +FUNCTION_PASS("expand-large-div-rem", ExpandLargeDivRemPass, (TM)) +FUNCTION_PASS("expand-large-fp-convert", ExpandLargeFpConvertPass, (TM)) FUNCTION_PASS("expand-reductions", ExpandReductionsPass, ()) FUNCTION_PASS("expandvp", ExpandVectorPredicationPass, ()) FUNCTION_PASS("lowerinvoke", LowerInvokePass, ()) @@ -136,6 +136,10 @@ DUMMY_MODULE_PASS("lower-emutls", LowerEmuTLSPass, ()) #define DUMMY_MACHINE_MODULE_PASS(NAME, PASS_NAME, CONSTRUCTOR) #endif DUMMY_MACHINE_MODULE_PASS("machine-outliner", MachineOutlinerPass, ()) +DUMMY_MACHINE_MODULE_PASS("pseudo-probe-inserter", PseudoProbeInserterPass, ()) +DUMMY_MACHINE_MODULE_PASS("mir-debugify", DebugifyMachineModule, ()) +DUMMY_MACHINE_MODULE_PASS("mir-check-debugify", CheckDebugMachineModulePass, ()) +DUMMY_MACHINE_MODULE_PASS("mir-strip-debug", StripDebugMachineModulePass, (OnlyDebugified)) #undef DUMMY_MACHINE_MODULE_PASS #ifndef DUMMY_MACHINE_FUNCTION_PASS @@ -175,6 +179,7 @@ DUMMY_MACHINE_FUNCTION_PASS("machine-sink", MachineSinkingPass, ()) DUMMY_MACHINE_FUNCTION_PASS("postra-machine-sink", PostRAMachineSinkingPass, ()) DUMMY_MACHINE_FUNCTION_PASS("peephole-opt", PeepholeOptimizerPass, ()) DUMMY_MACHINE_FUNCTION_PASS("regalloc", RegAllocPass, ()) +DUMMY_MACHINE_FUNCTION_PASS("regallocscoringpass", RegAllocScoringPass, ()) DUMMY_MACHINE_FUNCTION_PASS("virtregrewriter", VirtRegRewriterPass, ()) DUMMY_MACHINE_FUNCTION_PASS("stack-slot-coloring", StackSlotColoringPass, ()) DUMMY_MACHINE_FUNCTION_PASS("phi-node-elimination", PHIEliminationPass, ()) @@ -203,9 +208,28 @@ DUMMY_MACHINE_FUNCTION_PASS("irtranslator", IRTranslatorPass, ()) DUMMY_MACHINE_FUNCTION_PASS("regbankselect", RegBankSelectPass, ()) DUMMY_MACHINE_FUNCTION_PASS("instruction-select", InstructionSelectPass, ()) DUMMY_MACHINE_FUNCTION_PASS("reset-machine-function", ResetMachineFunctionPass, ()) -DUMMY_MACHINE_FUNCTION_PASS("machineverifier", MachineVerifierPass, ()) +DUMMY_MACHINE_FUNCTION_PASS("machineverifier", MachineVerifierPass, (Banner)) DUMMY_MACHINE_FUNCTION_PASS("print-machine-cycles", MachineCycleInfoPrinterPass, ()) DUMMY_MACHINE_FUNCTION_PASS("machine-sanmd", MachineSanitizerBinaryMetadata, ()) DUMMY_MACHINE_FUNCTION_PASS("machine-uniformity", MachineUniformityInfoWrapperPass, ()) DUMMY_MACHINE_FUNCTION_PASS("print-machine-uniformity", MachineUniformityInfoPrinterPass, ()) +DUMMY_MACHINE_FUNCTION_PASS("unpack-mi-bundles", UnpackMachineBundlesPass, (Ftor)) +DUMMY_MACHINE_FUNCTION_PASS("machineinstr-printer", MachineFunctionPrinterPass, (OS, Banner)) +DUMMY_MACHINE_FUNCTION_PASS("kcfi", KCFIPass, ()) +DUMMY_MACHINE_FUNCTION_PASS("cfi-fixup", CFIFixupPass, ()) +DUMMY_MACHINE_FUNCTION_PASS("mirfs-discriminators", MIRAddFSDiscriminatorsPass, (P)) +DUMMY_MACHINE_FUNCTION_PASS("fs-profile-loader", MIRProfileLoaderPass, (File, ProfileFile, P, FS)) +DUMMY_MACHINE_FUNCTION_PASS("machine-function-splitter", MachineFunctionSplitterPass, ()) +DUMMY_MACHINE_FUNCTION_PASS("bbsections-prepare", BasicBlockSectionsPass, ()) +DUMMY_MACHINE_FUNCTION_PASS("bbsections-profile-reader", BasicBlockSectionsProfileReaderPass, (Buf)) +DUMMY_MACHINE_FUNCTION_PASS("fixup-statepoint-caller-saved", FixupStatepointCallerSavedPass, ()) +DUMMY_MACHINE_FUNCTION_PASS("gc-empty-basic-blocks", GCEmptyBasicBlocksPass, ()) +DUMMY_MACHINE_FUNCTION_PASS("stack-frame-layout", StackFrameLayoutAnalysisPass, ()) +DUMMY_MACHINE_FUNCTION_PASS("prologepilog", PrologEpilogCodeInserterPass, ()) #undef DUMMY_MACHINE_FUNCTION_PASS + +#ifndef DUMMY_MACHINE_FUNCTION_ANALYSIS +#define DUMMY_MACHINE_FUNCTION_ANALYSIS(NAME, PASS_NAME, CONSTRUCTOR) +#endif +DUMMY_MACHINE_FUNCTION_ANALYSIS("gc-analysis", GCMachineCodeAnalysisPass, ()) +#undef DUMMY_MACHINE_FUNCTION_ANALYSIS diff --git a/llvm/lib/CodeGen/CodeGenPassBuilder.cpp b/llvm/lib/CodeGen/CodeGenPassBuilder.cpp index 7f37f2069a3ba..5919caa45b9bd 100644 --- a/llvm/lib/CodeGen/CodeGenPassBuilder.cpp +++ b/llvm/lib/CodeGen/CodeGenPassBuilder.cpp @@ -21,5 +21,7 @@ namespace llvm { #include "llvm/CodeGen/MachinePassRegistry.def" #define DUMMY_MACHINE_FUNCTION_PASS(NAME, PASS_NAME, CONSTRUCTOR) \ AnalysisKey PASS_NAME::Key; +#define DUMMY_MACHINE_FUNCTION_ANALYSIS(NAME, PASS_NAME, CONSTRUCTOR) \ + AnalysisKey PASS_NAME::Key; #include "llvm/CodeGen/MachinePassRegistry.def" } // namespace llvm