1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- ///////////////////////////////////////////////////////////////////////////////
- // //
- // HLDeadFunctionElimination.cpp //
- // Copyright (C) Microsoft Corporation. All rights reserved. //
- // This file is distributed under the University of Illinois Open Source //
- // License. See LICENSE.TXT for details. //
- // //
- ///////////////////////////////////////////////////////////////////////////////
- #include "dxc/DXIL/DxilUtil.h"
- #include "dxc/HLSL/DxilGenerationPass.h"
- #include "dxc/HLSL/HLModule.h"
- #include "llvm/IR/Function.h"
- #include "llvm/IR/Module.h"
- #include "llvm/IR/PassManager.h"
- using namespace llvm;
- using namespace hlsl;
- namespace {
- class HLDeadFunctionElimination : public ModulePass {
- public:
- static char ID; // Pass identification, replacement for typeid
- explicit HLDeadFunctionElimination () : ModulePass(ID) {}
- const char *getPassName() const override { return "Remove all unused function except entry from HLModule"; }
- bool runOnModule(Module &M) override {
- if (M.HasHLModule()) {
- HLModule &HLM = M.GetHLModule();
- bool IsLib = HLM.GetShaderModel()->IsLib();
- // Remove unused functions except entry and patch constant func.
- // For library profile, only remove unused external functions.
- Function *EntryFunc = HLM.GetEntryFunction();
- Function *PatchConstantFunc = HLM.GetPatchConstantFunction();
- return dxilutil::RemoveUnusedFunctions(M, EntryFunc, PatchConstantFunc,
- IsLib);
- }
- return false;
- }
- };
- }
- char HLDeadFunctionElimination::ID = 0;
- ModulePass *llvm::createHLDeadFunctionEliminationPass() {
- return new HLDeadFunctionElimination();
- }
- INITIALIZE_PASS(HLDeadFunctionElimination, "hl-dfe", "Remove all unused function except entry from HLModule", false, false)
|