Skip to content

Commit bced13d

Browse files
farzonlkmpeng
authored andcommitted
[LegacyPM] Restore the GlobalDCE Legacy pass and add it to the DirectX backend
1 parent 740f690 commit bced13d

File tree

7 files changed

+42
-0
lines changed

7 files changed

+42
-0
lines changed

llvm/include/llvm/InitializePasses.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ LLVM_ABI void initializeGCEmptyBasicBlocksPass(PassRegistry &);
127127
LLVM_ABI void initializeGCMachineCodeAnalysisPass(PassRegistry &);
128128
LLVM_ABI void initializeGCModuleInfoPass(PassRegistry &);
129129
LLVM_ABI void initializeGVNLegacyPassPass(PassRegistry &);
130+
LLVM_ABI void initializeGlobalDCELegacyPassPass(PassRegistry &);
130131
LLVM_ABI void initializeGlobalMergeFuncPassWrapperPass(PassRegistry &);
131132
LLVM_ABI void initializeGlobalMergePass(PassRegistry &);
132133
LLVM_ABI void initializeGlobalsAAWrapperPassPass(PassRegistry &);

llvm/include/llvm/LinkAllPasses.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include "llvm/Support/Valgrind.h"
3939
#include "llvm/Transforms/IPO.h"
4040
#include "llvm/Transforms/IPO/AlwaysInliner.h"
41+
#include "llvm/Transforms/IPO/GlobalDCE.h"
4142
#include "llvm/Transforms/InstCombine/InstCombine.h"
4243
#include "llvm/Transforms/ObjCARC.h"
4344
#include "llvm/Transforms/Scalar.h"
@@ -83,6 +84,7 @@ struct ForcePassLinking {
8384
(void)llvm::createDomOnlyViewerWrapperPassPass();
8485
(void)llvm::createDomViewerWrapperPassPass();
8586
(void)llvm::createAlwaysInlinerLegacyPass();
87+
(void)llvm::createGlobalDCEPass();
8688
(void)llvm::createGlobalMergeFuncPass();
8789
(void)llvm::createGlobalsAAWrapperPass();
8890
(void)llvm::createInstSimplifyLegacyPass();

llvm/include/llvm/Transforms/IPO/GlobalDCE.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class GlobalVariable;
3232
class Metadata;
3333
class Module;
3434
class Value;
35+
class ModulePass;
3536

3637
/// Pass to remove unused function declarations.
3738
class GlobalDCEPass : public PassInfoMixin<GlobalDCEPass> {
@@ -80,6 +81,7 @@ class GlobalDCEPass : public PassInfoMixin<GlobalDCEPass> {
8081
void ComputeDependencies(Value *V, SmallPtrSetImpl<GlobalValue *> &U);
8182
};
8283

84+
ModulePass *createGlobalDCEPass();
8385
}
8486

8587
#endif // LLVM_TRANSFORMS_IPO_GLOBALDCE_H

llvm/lib/Target/DirectX/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ add_llvm_target(DirectXCodeGen
4949
DirectXInfo
5050
DirectXPointerTypeAnalysis
5151
FrontendHLSL
52+
IPO
5253
MC
5354
ScalarOpts
5455
SelectionDAG

llvm/lib/Target/DirectX/DirectXTargetMachine.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#include "llvm/Support/Compiler.h"
4646
#include "llvm/Support/ErrorHandling.h"
4747
#include "llvm/Target/TargetLoweringObjectFile.h"
48+
#include "llvm/Transforms/IPO/GlobalDCE.h"
4849
#include "llvm/Transforms/Scalar/Scalarizer.h"
4950
#include <optional>
5051

@@ -62,6 +63,7 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeDirectXTarget() {
6263
initializeEmbedDXILPassPass(*PR);
6364
initializeWriteDXILPassPass(*PR);
6465
initializeDXContainerGlobalsPass(*PR);
66+
initializeGlobalDCELegacyPassPass(*PR);
6567
initializeDXILOpLoweringLegacyPass(*PR);
6668
initializeDXILResourceAccessLegacyPass(*PR);
6769
initializeDXILResourceImplicitBindingLegacyPass(*PR);
@@ -103,6 +105,7 @@ class DirectXPassConfig : public TargetPassConfig {
103105
FunctionPass *createTargetRegisterAllocator(bool) override { return nullptr; }
104106
void addCodeGenPrepare() override {
105107
addPass(createDXILFinalizeLinkageLegacyPass());
108+
addPass(createGlobalDCEPass());
106109
addPass(createDXILResourceAccessLegacyPass());
107110
addPass(createDXILIntrinsicExpansionLegacyPass());
108111
addPass(createDXILCBufferAccessLegacyPass());

llvm/lib/Transforms/IPO/GlobalDCE.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#include "llvm/IR/Instructions.h"
2222
#include "llvm/IR/IntrinsicInst.h"
2323
#include "llvm/IR/Module.h"
24+
#include "llvm/InitializePasses.h"
25+
#include "llvm/Pass.h"
2426
#include "llvm/Support/CommandLine.h"
2527
#include "llvm/Transforms/IPO.h"
2628
#include "llvm/Transforms/Utils/CtorUtils.h"
@@ -30,6 +32,36 @@ using namespace llvm;
3032

3133
#define DEBUG_TYPE "globaldce"
3234

35+
namespace {
36+
class GlobalDCELegacyPass : public ModulePass {
37+
public:
38+
static char ID; // Pass identification, replacement for typeid
39+
GlobalDCELegacyPass() : ModulePass(ID) {
40+
initializeGlobalDCELegacyPassPass(*PassRegistry::getPassRegistry());
41+
}
42+
bool runOnModule(Module &M) override {
43+
if (skipModule(M))
44+
return false;
45+
// Note: GlobalDCEPass does not use MAM. That
46+
// means we can get away with init and pass
47+
// as arg.
48+
ModuleAnalysisManager MAM;
49+
auto PA = Impl.run(M, MAM);
50+
return !PA.areAllPreserved();
51+
}
52+
53+
private:
54+
GlobalDCEPass Impl;
55+
};
56+
} // namespace
57+
58+
char GlobalDCELegacyPass::ID = 0;
59+
INITIALIZE_PASS(GlobalDCELegacyPass, "globaldce", "Dead Global Elimination",
60+
false, false)
61+
62+
// Public interface to the GlobalDCEPass.
63+
ModulePass *llvm::createGlobalDCEPass() { return new GlobalDCELegacyPass(); }
64+
3365
static cl::opt<bool>
3466
ClEnableVFE("enable-vfe", cl::Hidden, cl::init(true),
3567
cl::desc("Enable virtual function elimination"));

llvm/test/CodeGen/DirectX/llc-pipeline.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
; CHECK-NEXT: ModulePass Manager
1616
; CHECK-NEXT: DXIL Finalize Linkage
17+
; CHECK-NEXT: Dead Global Elimination
1718
; CHECK-NEXT: FunctionPass Manager
1819
; CHECK-NEXT: DXIL Resource Access
1920
; CHECK-NEXT: DXIL Intrinsic Expansion

0 commit comments

Comments
 (0)