diff options
Diffstat (limited to 'llvm/lib/Transforms/IPO/IPO.cpp')
| -rw-r--r-- | llvm/lib/Transforms/IPO/IPO.cpp | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/IPO/IPO.cpp b/llvm/lib/Transforms/IPO/IPO.cpp new file mode 100644 index 000000000000..bddf75211599 --- /dev/null +++ b/llvm/lib/Transforms/IPO/IPO.cpp @@ -0,0 +1,143 @@ +//===-- IPO.cpp -----------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file implements the common infrastructure (including C bindings) for +// libLLVMIPO.a, which implements several transformations over the LLVM +// intermediate representation. +// +//===----------------------------------------------------------------------===// + +#include "llvm-c/Transforms/IPO.h" +#include "llvm-c/Initialization.h" +#include "llvm/IR/LegacyPassManager.h" +#include "llvm/InitializePasses.h" +#include "llvm/Transforms/IPO.h" +#include "llvm/Transforms/IPO/AlwaysInliner.h" +#include "llvm/Transforms/IPO/FunctionAttrs.h" + +using namespace llvm; + +void llvm::initializeIPO(PassRegistry &Registry) { + initializeArgPromotionPass(Registry); + initializeCalledValuePropagationLegacyPassPass(Registry); + initializeConstantMergeLegacyPassPass(Registry); + initializeCrossDSOCFIPass(Registry); + initializeDAEPass(Registry); + initializeDAHPass(Registry); + initializeForceFunctionAttrsLegacyPassPass(Registry); + initializeGlobalDCELegacyPassPass(Registry); + initializeGlobalOptLegacyPassPass(Registry); + initializeGlobalSplitPass(Registry); + initializeHotColdSplittingLegacyPassPass(Registry); + initializeIPCPPass(Registry); + initializeAlwaysInlinerLegacyPassPass(Registry); + initializeSimpleInlinerPass(Registry); + initializeInferFunctionAttrsLegacyPassPass(Registry); + initializeInternalizeLegacyPassPass(Registry); + initializeLoopExtractorPass(Registry); + initializeBlockExtractorPass(Registry); + initializeSingleLoopExtractorPass(Registry); + initializeLowerTypeTestsPass(Registry); + initializeMergeFunctionsPass(Registry); + initializePartialInlinerLegacyPassPass(Registry); + initializeAttributorLegacyPassPass(Registry); + initializePostOrderFunctionAttrsLegacyPassPass(Registry); + initializeReversePostOrderFunctionAttrsLegacyPassPass(Registry); + initializePruneEHPass(Registry); + initializeIPSCCPLegacyPassPass(Registry); + initializeStripDeadPrototypesLegacyPassPass(Registry); + initializeStripSymbolsPass(Registry); + initializeStripDebugDeclarePass(Registry); + initializeStripDeadDebugInfoPass(Registry); + initializeStripNonDebugSymbolsPass(Registry); + initializeBarrierNoopPass(Registry); + initializeEliminateAvailableExternallyLegacyPassPass(Registry); + initializeSampleProfileLoaderLegacyPassPass(Registry); + initializeFunctionImportLegacyPassPass(Registry); + initializeWholeProgramDevirtPass(Registry); +} + +void LLVMInitializeIPO(LLVMPassRegistryRef R) { + initializeIPO(*unwrap(R)); +} + +void LLVMAddArgumentPromotionPass(LLVMPassManagerRef PM) { + unwrap(PM)->add(createArgumentPromotionPass()); +} + +void LLVMAddCalledValuePropagationPass(LLVMPassManagerRef PM) { + unwrap(PM)->add(createCalledValuePropagationPass()); +} + +void LLVMAddConstantMergePass(LLVMPassManagerRef PM) { + unwrap(PM)->add(createConstantMergePass()); +} + +void LLVMAddDeadArgEliminationPass(LLVMPassManagerRef PM) { + unwrap(PM)->add(createDeadArgEliminationPass()); +} + +void LLVMAddFunctionAttrsPass(LLVMPassManagerRef PM) { + unwrap(PM)->add(createPostOrderFunctionAttrsLegacyPass()); +} + +void LLVMAddFunctionInliningPass(LLVMPassManagerRef PM) { + unwrap(PM)->add(createFunctionInliningPass()); +} + +void LLVMAddAlwaysInlinerPass(LLVMPassManagerRef PM) { + unwrap(PM)->add(llvm::createAlwaysInlinerLegacyPass()); +} + +void LLVMAddGlobalDCEPass(LLVMPassManagerRef PM) { + unwrap(PM)->add(createGlobalDCEPass()); +} + +void LLVMAddGlobalOptimizerPass(LLVMPassManagerRef PM) { + unwrap(PM)->add(createGlobalOptimizerPass()); +} + +void LLVMAddIPConstantPropagationPass(LLVMPassManagerRef PM) { + unwrap(PM)->add(createIPConstantPropagationPass()); +} + +void LLVMAddPruneEHPass(LLVMPassManagerRef PM) { + unwrap(PM)->add(createPruneEHPass()); +} + +void LLVMAddIPSCCPPass(LLVMPassManagerRef PM) { + unwrap(PM)->add(createIPSCCPPass()); +} + +void LLVMAddMergeFunctionsPass(LLVMPassManagerRef PM) { + unwrap(PM)->add(createMergeFunctionsPass()); +} + +void LLVMAddInternalizePass(LLVMPassManagerRef PM, unsigned AllButMain) { + auto PreserveMain = [=](const GlobalValue &GV) { + return AllButMain && GV.getName() == "main"; + }; + unwrap(PM)->add(createInternalizePass(PreserveMain)); +} + +void LLVMAddInternalizePassWithMustPreservePredicate( + LLVMPassManagerRef PM, + void *Context, + LLVMBool (*Pred)(LLVMValueRef, void *)) { + unwrap(PM)->add(createInternalizePass([=](const GlobalValue &GV) { + return Pred(wrap(&GV), Context) == 0 ? false : true; + })); +} + +void LLVMAddStripDeadPrototypesPass(LLVMPassManagerRef PM) { + unwrap(PM)->add(createStripDeadPrototypesPass()); +} + +void LLVMAddStripSymbolsPass(LLVMPassManagerRef PM) { + unwrap(PM)->add(createStripSymbolsPass()); +} |
