Skip to content

Commit f8d68a9

Browse files
committed
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 146f25a commit f8d68a9

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
@@ -551,6 +551,8 @@ template <typename DerivedT, typename TargetMachineT> class CodeGenPassBuilder {
551551
/// Add standard basic block placement passes.
552552
void addBlockPlacement(AddMachinePass &) const;
553553

554+
void addPostBBSections(AddMachinePass &) const {}
555+
554556
using CreateMCStreamer =
555557
std::function<Expected<std::unique_ptr<MCStreamer>>(MCContext &)>;
556558
void addAsmPrinter(AddMachinePass &, CreateMCStreamer) const {
@@ -805,7 +807,6 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addIRPasses(
805807
// TODO: add a pass insertion point here
806808
addPass(GCLoweringPass());
807809
addPass(ShadowStackGCLoweringPass());
808-
addPass(LowerConstantIntrinsicsPass());
809810

810811
// Make sure that no unreachable blocks are instruction selected.
811812
addPass(UnreachableBlockElimPass());
@@ -1111,6 +1112,8 @@ Error CodeGenPassBuilder<Derived, TargetMachineT>::addMachinePasses(
11111112
addPass(MachineOutlinerPass(Opt.EnableMachineOutliner));
11121113
}
11131114

1115+
derived().addPostBBSections(addPass);
1116+
11141117
addPass(StackFrameLayoutAnalysisPass());
11151118

11161119
// Add passes that directly emit MI after all other MI passes.
@@ -1297,6 +1300,7 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addOptimizedRegAlloc(
12971300
// addRegAssignmentOptimized did not add a reg alloc pass, so do nothing.
12981301
return;
12991302
}
1303+
addPass(StackSlotColoringPass());
13001304
// Allow targets to expand pseudo instructions depending on the choice of
13011305
// registers before MachineCopyPropagation.
13021306
derived().addPostRewrite(addPass);
@@ -1319,6 +1323,7 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addOptimizedRegAlloc(
13191323
template <typename Derived, typename TargetMachineT>
13201324
void CodeGenPassBuilder<Derived, TargetMachineT>::addMachineLateOptimization(
13211325
AddMachinePass &addPass) const {
1326+
addPass(MachineLateInstrsCleanupPass());
13221327
// Branch folding must be run after regalloc and prolog/epilog insertion.
13231328
addPass(BranchFolderPass(Opt.EnableTailMerge));
13241329

@@ -1329,9 +1334,6 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addMachineLateOptimization(
13291334
if (!TM.requiresStructuredCFG())
13301335
addPass(TailDuplicatePass());
13311336

1332-
// Cleanup of redundant (identical) address/immediate loads.
1333-
addPass(MachineLateInstrsCleanupPass());
1334-
13351337
// Copy propagation.
13361338
addPass(MachineCopyPropagationPass());
13371339
}

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
#include "llvm/CodeGen/AtomicExpand.h"
7474
#include "llvm/CodeGen/BranchRelaxation.h"
7575
#include "llvm/CodeGen/DeadMachineInstructionElim.h"
76+
#include "llvm/CodeGen/GCMetadata.h"
7677
#include "llvm/CodeGen/GlobalISel/CSEInfo.h"
7778
#include "llvm/CodeGen/GlobalISel/IRTranslator.h"
7879
#include "llvm/CodeGen/GlobalISel/InstructionSelect.h"
@@ -156,6 +157,7 @@ class AMDGPUCodeGenPassBuilder
156157
void addPreRegAlloc(AddMachinePass &) const;
157158
void addOptimizedRegAlloc(AddMachinePass &) const;
158159
void addPreSched2(AddMachinePass &) const;
160+
void addPostBBSections(AddMachinePass &) const;
159161

160162
/// Check if a pass is enabled given \p Opt option. The option always
161163
/// overrides defaults if explicitly used. Otherwise its default will be used
@@ -2049,8 +2051,8 @@ AMDGPUCodeGenPassBuilder::AMDGPUCodeGenPassBuilder(
20492051
// Exceptions and StackMaps are not supported, so these passes will never do
20502052
// anything.
20512053
// Garbage collection is not supported.
2052-
disablePass<StackMapLivenessPass, FuncletLayoutPass,
2053-
ShadowStackGCLoweringPass>();
2054+
disablePass<StackMapLivenessPass, FuncletLayoutPass, PatchableFunctionPass,
2055+
ShadowStackGCLoweringPass, GCLoweringPass>();
20542056
}
20552057

20562058
void AMDGPUCodeGenPassBuilder::addIRPasses(AddIRPass &addPass) const {
@@ -2344,6 +2346,13 @@ void AMDGPUCodeGenPassBuilder::addPreSched2(AddMachinePass &addPass) const {
23442346
addPass(SIPostRABundlerPass());
23452347
}
23462348

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

0 commit comments

Comments
 (0)