Skip to content

Commit 91ee539

Browse files
vikramRHPrasoonMishra
authored andcommitted
Fixes to be upstreamed - 1
1. add "addPostBBSections" API to NPM 2. remove LowerConstantIntrinsicsPass() from NPM as it was merged with PreISelLowering in llvm#97727 3. add missing passes in NPM pipeline (stackslotcoloring, MachineLateInstrsCleanupPass) 4. disable certain garbage collection passes for AMDGPU (GCLowering, PatachableFunctions)
1 parent f4cf188 commit 91ee539

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

llvm/include/llvm/Passes/CodeGenPassBuilder.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,8 @@ template <typename DerivedT, typename TargetMachineT> class CodeGenPassBuilder {
552552
/// Add standard basic block placement passes.
553553
void addBlockPlacement(AddMachinePass &) const;
554554

555+
void addPostBBSections(AddMachinePass &) const {}
556+
555557
using CreateMCStreamer =
556558
std::function<Expected<std::unique_ptr<MCStreamer>>(MCContext &)>;
557559
void addAsmPrinter(AddMachinePass &, CreateMCStreamer) const {
@@ -808,7 +810,6 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addIRPasses(
808810
// TODO: add a pass insertion point here
809811
addPass(GCLoweringPass());
810812
addPass(ShadowStackGCLoweringPass());
811-
addPass(LowerConstantIntrinsicsPass());
812813

813814
// Make sure that no unreachable blocks are instruction selected.
814815
addPass(UnreachableBlockElimPass());
@@ -1114,6 +1115,8 @@ Error CodeGenPassBuilder<Derived, TargetMachineT>::addMachinePasses(
11141115
addPass(MachineOutlinerPass(Opt.EnableMachineOutliner));
11151116
}
11161117

1118+
derived().addPostBBSections(addPass);
1119+
11171120
addPass(StackFrameLayoutAnalysisPass());
11181121

11191122
// Add passes that directly emit MI after all other MI passes.
@@ -1300,6 +1303,7 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addOptimizedRegAlloc(
13001303
// addRegAssignmentOptimized did not add a reg alloc pass, so do nothing.
13011304
return;
13021305
}
1306+
addPass(StackSlotColoringPass());
13031307
// Allow targets to expand pseudo instructions depending on the choice of
13041308
// registers before MachineCopyPropagation.
13051309
derived().addPostRewrite(addPass);
@@ -1322,6 +1326,7 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addOptimizedRegAlloc(
13221326
template <typename Derived, typename TargetMachineT>
13231327
void CodeGenPassBuilder<Derived, TargetMachineT>::addMachineLateOptimization(
13241328
AddMachinePass &addPass) const {
1329+
addPass(MachineLateInstrsCleanupPass());
13251330
// Branch folding must be run after regalloc and prolog/epilog insertion.
13261331
addPass(BranchFolderPass(Opt.EnableTailMerge));
13271332

@@ -1332,9 +1337,6 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addMachineLateOptimization(
13321337
if (!TM.requiresStructuredCFG())
13331338
addPass(TailDuplicatePass());
13341339

1335-
// Cleanup of redundant (identical) address/immediate loads.
1336-
addPass(MachineLateInstrsCleanupPass());
1337-
13381340
// Copy propagation.
13391341
addPass(MachineCopyPropagationPass());
13401342
}

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
#include "llvm/CodeGen/AtomicExpand.h"
7575
#include "llvm/CodeGen/BranchRelaxation.h"
7676
#include "llvm/CodeGen/DeadMachineInstructionElim.h"
77+
#include "llvm/CodeGen/GCMetadata.h"
7778
#include "llvm/CodeGen/GlobalISel/CSEInfo.h"
7879
#include "llvm/CodeGen/GlobalISel/IRTranslator.h"
7980
#include "llvm/CodeGen/GlobalISel/InstructionSelect.h"
@@ -157,6 +158,7 @@ class AMDGPUCodeGenPassBuilder
157158
void addPreRegAlloc(AddMachinePass &) const;
158159
void addOptimizedRegAlloc(AddMachinePass &) const;
159160
void addPreSched2(AddMachinePass &) const;
161+
void addPostBBSections(AddMachinePass &) const;
160162

161163
/// Check if a pass is enabled given \p Opt option. The option always
162164
/// overrides defaults if explicitly used. Otherwise its default will be used
@@ -2059,8 +2061,8 @@ AMDGPUCodeGenPassBuilder::AMDGPUCodeGenPassBuilder(
20592061
// Exceptions and StackMaps are not supported, so these passes will never do
20602062
// anything.
20612063
// Garbage collection is not supported.
2062-
disablePass<StackMapLivenessPass, FuncletLayoutPass,
2063-
ShadowStackGCLoweringPass>();
2064+
disablePass<StackMapLivenessPass, FuncletLayoutPass, PatchableFunctionPass,
2065+
ShadowStackGCLoweringPass, GCLoweringPass>();
20642066
}
20652067

20662068
void AMDGPUCodeGenPassBuilder::addIRPasses(AddIRPass &addPass) const {
@@ -2347,6 +2349,13 @@ void AMDGPUCodeGenPassBuilder::addPreSched2(AddMachinePass &addPass) const {
23472349
addPass(SIPostRABundlerPass());
23482350
}
23492351

2352+
void AMDGPUCodeGenPassBuilder::addPostBBSections(
2353+
AddMachinePass &addPass) const {
2354+
// We run this later to avoid passes like livedebugvalues and BBSections
2355+
// having to deal with the apparent multi-entry functions we may generate.
2356+
addPass(AMDGPUPreloadKernArgPrologPass());
2357+
}
2358+
23502359
void AMDGPUCodeGenPassBuilder::addPreEmitPass(AddMachinePass &addPass) const {
23512360
if (isPassEnabled(EnableVOPD, CodeGenOptLevel::Less)) {
23522361
addPass(GCNCreateVOPDPass());

0 commit comments

Comments
 (0)