Skip to content

Commit 4f98ff6

Browse files
committed
AMDGPU/NewPM: Start implementing addCodeGenPrepare
1 parent a3fea06 commit 4f98ff6

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,12 @@
7171
#include "llvm/Transforms/Scalar/Sink.h"
7272
#include "llvm/Transforms/Scalar/StructurizeCFG.h"
7373
#include "llvm/Transforms/Utils.h"
74+
7475
#include "llvm/Transforms/Utils/FixIrreducible.h"
7576
#include "llvm/Transforms/Utils/LCSSA.h"
77+
78+
#include "llvm/Transforms/Utils/LowerSwitch.h"
79+
7680
#include "llvm/Transforms/Utils/SimplifyLibCalls.h"
7781
#include "llvm/Transforms/Utils/UnifyLoopExits.h"
7882
#include "llvm/Transforms/Vectorize/LoadStoreVectorizer.h"
@@ -1768,6 +1772,16 @@ AMDGPUCodeGenPassBuilder::AMDGPUCodeGenPassBuilder(
17681772
ShadowStackGCLoweringPass>();
17691773
}
17701774

1775+
void AMDGPUCodeGenPassBuilder::addCodeGenPrepare(AddIRPass &addPass) const {
1776+
Base::addCodeGenPrepare(addPass);
1777+
1778+
// LowerSwitch pass may introduce unreachable blocks that can cause unexpected
1779+
// behavior for subsequent passes. Placing it here seems better that these
1780+
// blocks would get cleaned up by UnreachableBlockElim inserted next in the
1781+
// pass flow.
1782+
addPass(LowerSwitchPass());
1783+
}
1784+
17711785
void AMDGPUCodeGenPassBuilder::addPreISel(AddIRPass &addPass) const {
17721786
const bool LateCFGStructurize = AMDGPUTargetMachine::EnableLateStructurizeCFG;
17731787
const bool DisableStructurizer = AMDGPUTargetMachine::DisableStructurizer;

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,11 +165,13 @@ class AMDGPUPassConfig : public TargetPassConfig {
165165

166166
class AMDGPUCodeGenPassBuilder
167167
: public CodeGenPassBuilder<AMDGPUCodeGenPassBuilder, GCNTargetMachine> {
168+
using Base = CodeGenPassBuilder<AMDGPUCodeGenPassBuilder, GCNTargetMachine>;
169+
168170
public:
169171
AMDGPUCodeGenPassBuilder(GCNTargetMachine &TM,
170172
const CGPassBuilderOption &Opts,
171173
PassInstrumentationCallbacks *PIC);
172-
174+
void addCodeGenPrepare(AddIRPass &) const;
173175
void addPreISel(AddIRPass &addPass) const;
174176
void addAsmPrinter(AddMachinePass &, CreateMCStreamer) const;
175177
Error addInstSelector(AddMachinePass &) const;

0 commit comments

Comments
 (0)