Movatterモバイル変換


[0]ホーム

URL:


LLVM 20.0.0git
DXILFinalizeLinkage.cpp
Go to the documentation of this file.
1//===- DXILFinalizeLinkage.cpp - Finalize linkage of functions ------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "DXILFinalizeLinkage.h"
10#include "DirectX.h"
11#include "llvm/IR/Function.h"
12#include "llvm/IR/GlobalValue.h"
13#include "llvm/IR/Metadata.h"
14#include "llvm/IR/Module.h"
15
16#define DEBUG_TYPE "dxil-finalize-linkage"
17
18using namespacellvm;
19
20staticboolfinalizeLinkage(Module &M) {
21SmallPtrSet<Function *, 8> Funcs;
22
23// Collect non-entry and non-exported functions to set to internal linkage.
24for (Function &EF : M.functions()) {
25if (EF.isIntrinsic())
26continue;
27if (EF.hasFnAttribute("hlsl.shader") || EF.hasFnAttribute("hlsl.export"))
28continue;
29 Funcs.insert(&EF);
30 }
31
32for (Function *F : Funcs) {
33if (F->getLinkage() ==GlobalValue::ExternalLinkage)
34F->setLinkage(GlobalValue::InternalLinkage);
35if (F->isDefTriviallyDead())
36 M.getFunctionList().erase(F);
37 }
38
39returnfalse;
40}
41
42PreservedAnalysesDXILFinalizeLinkage::run(Module &M,
43ModuleAnalysisManager &AM) {
44if (finalizeLinkage(M))
45returnPreservedAnalyses::none();
46returnPreservedAnalyses::all();
47}
48
49boolDXILFinalizeLinkageLegacy::runOnModule(Module &M) {
50returnfinalizeLinkage(M);
51}
52
53charDXILFinalizeLinkageLegacy::ID = 0;
54
55INITIALIZE_PASS_BEGIN(DXILFinalizeLinkageLegacy,DEBUG_TYPE,
56"DXIL Finalize Linkage",false,false)
57INITIALIZE_PASS_END(DXILFinalizeLinkageLegacy,DEBUG_TYPE,
58 "DXIL Finalize Linkage",false,false)
59
60ModulePass *llvm::createDXILFinalizeLinkageLegacyPass() {
61returnnewDXILFinalizeLinkageLegacy();
62}
finalizeLinkage
static bool finalizeLinkage(Module &M)
Definition:DXILFinalizeLinkage.cpp:20
DXILFinalizeLinkage.h
DirectX.h
DEBUG_TYPE
#define DEBUG_TYPE
Definition:GenericCycleImpl.h:31
GlobalValue.h
Function.h
Module.h
Module.h This file contains the declarations for the Module class.
F
#define F(x, y, z)
Definition:MD5.cpp:55
Metadata.h
This file contains the declarations for metadata subclasses.
INITIALIZE_PASS_END
#define INITIALIZE_PASS_END(passName, arg, name, cfg, analysis)
Definition:PassSupport.h:57
INITIALIZE_PASS_BEGIN
#define INITIALIZE_PASS_BEGIN(passName, arg, name, cfg, analysis)
Definition:PassSupport.h:52
llvm::AnalysisManager
A container for analyses that lazily runs them and caches their results.
Definition:PassManager.h:253
llvm::DXILFinalizeLinkageLegacy
Definition:DXILFinalizeLinkage.h:30
llvm::DXILFinalizeLinkageLegacy::runOnModule
bool runOnModule(Module &M) override
runOnModule - Virtual method overriden by subclasses to process the module being operated on.
Definition:DXILFinalizeLinkage.cpp:49
llvm::DXILFinalizeLinkageLegacy::ID
static char ID
Definition:DXILFinalizeLinkage.h:35
llvm::DXILFinalizeLinkage::run
PreservedAnalyses run(Module &M, ModuleAnalysisManager &)
Definition:DXILFinalizeLinkage.cpp:42
llvm::Function
Definition:Function.h:63
llvm::GlobalValue::InternalLinkage
@ InternalLinkage
Rename collisions when linking (static functions).
Definition:GlobalValue.h:59
llvm::GlobalValue::ExternalLinkage
@ ExternalLinkage
Externally visible function.
Definition:GlobalValue.h:52
llvm::ModulePass
ModulePass class - This class is used to implement unstructured interprocedural optimizations and ana...
Definition:Pass.h:251
llvm::Module
A Module instance is used to store all the information related to an LLVM module.
Definition:Module.h:65
llvm::PreservedAnalyses
A set of analyses that are preserved following a run of a transformation pass.
Definition:Analysis.h:111
llvm::PreservedAnalyses::none
static PreservedAnalyses none()
Convenience factory function for the empty preserved set.
Definition:Analysis.h:114
llvm::PreservedAnalyses::all
static PreservedAnalyses all()
Construct a special preserved set that preserves all passes.
Definition:Analysis.h:117
llvm::SmallPtrSetImpl::insert
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
Definition:SmallPtrSet.h:384
llvm::SmallPtrSet
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
Definition:SmallPtrSet.h:519
false
Definition:StackSlotColoring.cpp:193
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:AddressRanges.h:18
llvm::createDXILFinalizeLinkageLegacyPass
ModulePass * createDXILFinalizeLinkageLegacyPass()
Pass to finalize linkage of functions.
Definition:DXILFinalizeLinkage.cpp:60

Generated on Thu Jul 17 2025 14:42:43 for LLVM by doxygen 1.9.6
[8]ページ先頭

©2009-2025 Movatter.jp