1245431Sdim//===-- IPO.cpp -----------------------------------------------------------===// 2193323Sed// 3193323Sed// The LLVM Compiler Infrastructure 4193323Sed// 5193323Sed// This file is distributed under the University of Illinois Open Source 6193323Sed// License. See LICENSE.TXT for details. 7193323Sed// 8193323Sed//===----------------------------------------------------------------------===// 9193323Sed// 10218893Sdim// This file implements the common infrastructure (including C bindings) for 11218893Sdim// libLLVMIPO.a, which implements several transformations over the LLVM 12218893Sdim// intermediate representation. 13193323Sed// 14193323Sed//===----------------------------------------------------------------------===// 15193323Sed 16226890Sdim#include "llvm-c/Initialization.h" 17193323Sed#include "llvm-c/Transforms/IPO.h" 18218893Sdim#include "llvm/InitializePasses.h" 19193323Sed#include "llvm/PassManager.h" 20193323Sed#include "llvm/Transforms/IPO.h" 21193323Sed 22193323Sedusing namespace llvm; 23193323Sed 24218893Sdimvoid llvm::initializeIPO(PassRegistry &Registry) { 25218893Sdim initializeArgPromotionPass(Registry); 26218893Sdim initializeConstantMergePass(Registry); 27218893Sdim initializeDAEPass(Registry); 28218893Sdim initializeDAHPass(Registry); 29218893Sdim initializeFunctionAttrsPass(Registry); 30218893Sdim initializeGlobalDCEPass(Registry); 31218893Sdim initializeGlobalOptPass(Registry); 32218893Sdim initializeIPCPPass(Registry); 33218893Sdim initializeAlwaysInlinerPass(Registry); 34218893Sdim initializeSimpleInlinerPass(Registry); 35218893Sdim initializeInternalizePassPass(Registry); 36218893Sdim initializeLoopExtractorPass(Registry); 37218893Sdim initializeBlockExtractorPassPass(Registry); 38218893Sdim initializeSingleLoopExtractorPass(Registry); 39218893Sdim initializeMergeFunctionsPass(Registry); 40218893Sdim initializePartialInlinerPass(Registry); 41218893Sdim initializePruneEHPass(Registry); 42218893Sdim initializeStripDeadPrototypesPassPass(Registry); 43218893Sdim initializeStripSymbolsPass(Registry); 44218893Sdim initializeStripDebugDeclarePass(Registry); 45218893Sdim initializeStripDeadDebugInfoPass(Registry); 46218893Sdim initializeStripNonDebugSymbolsPass(Registry); 47218893Sdim} 48218893Sdim 49218893Sdimvoid LLVMInitializeIPO(LLVMPassRegistryRef R) { 50218893Sdim initializeIPO(*unwrap(R)); 51218893Sdim} 52218893Sdim 53193323Sedvoid LLVMAddArgumentPromotionPass(LLVMPassManagerRef PM) { 54193323Sed unwrap(PM)->add(createArgumentPromotionPass()); 55193323Sed} 56193323Sed 57193323Sedvoid LLVMAddConstantMergePass(LLVMPassManagerRef PM) { 58193323Sed unwrap(PM)->add(createConstantMergePass()); 59193323Sed} 60193323Sed 61193323Sedvoid LLVMAddDeadArgEliminationPass(LLVMPassManagerRef PM) { 62193323Sed unwrap(PM)->add(createDeadArgEliminationPass()); 63193323Sed} 64193323Sed 65193323Sedvoid LLVMAddFunctionAttrsPass(LLVMPassManagerRef PM) { 66193323Sed unwrap(PM)->add(createFunctionAttrsPass()); 67193323Sed} 68193323Sed 69193323Sedvoid LLVMAddFunctionInliningPass(LLVMPassManagerRef PM) { 70193323Sed unwrap(PM)->add(createFunctionInliningPass()); 71193323Sed} 72193323Sed 73226890Sdimvoid LLVMAddAlwaysInlinerPass(LLVMPassManagerRef PM) { 74226890Sdim unwrap(PM)->add(llvm::createAlwaysInlinerPass()); 75226890Sdim} 76226890Sdim 77193323Sedvoid LLVMAddGlobalDCEPass(LLVMPassManagerRef PM) { 78193323Sed unwrap(PM)->add(createGlobalDCEPass()); 79193323Sed} 80193323Sed 81193323Sedvoid LLVMAddGlobalOptimizerPass(LLVMPassManagerRef PM) { 82193323Sed unwrap(PM)->add(createGlobalOptimizerPass()); 83193323Sed} 84193323Sed 85193323Sedvoid LLVMAddIPConstantPropagationPass(LLVMPassManagerRef PM) { 86193323Sed unwrap(PM)->add(createIPConstantPropagationPass()); 87193323Sed} 88193323Sed 89193323Sedvoid LLVMAddPruneEHPass(LLVMPassManagerRef PM) { 90193323Sed unwrap(PM)->add(createPruneEHPass()); 91193323Sed} 92193323Sed 93207618Srdivackyvoid LLVMAddIPSCCPPass(LLVMPassManagerRef PM) { 94207618Srdivacky unwrap(PM)->add(createIPSCCPPass()); 95207618Srdivacky} 96207618Srdivacky 97207618Srdivackyvoid LLVMAddInternalizePass(LLVMPassManagerRef PM, unsigned AllButMain) { 98245431Sdim std::vector<const char *> Export; 99245431Sdim if (AllButMain) 100245431Sdim Export.push_back("main"); 101245431Sdim unwrap(PM)->add(createInternalizePass(Export)); 102207618Srdivacky} 103207618Srdivacky 104193323Sedvoid LLVMAddStripDeadPrototypesPass(LLVMPassManagerRef PM) { 105193323Sed unwrap(PM)->add(createStripDeadPrototypesPass()); 106193323Sed} 107193323Sed 108193323Sedvoid LLVMAddStripSymbolsPass(LLVMPassManagerRef PM) { 109193323Sed unwrap(PM)->add(createStripSymbolsPass()); 110193323Sed} 111