157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner//===-- Scalar.cpp --------------------------------------------------------===// 257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner// 357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner// The LLVM Compiler Infrastructure 457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner// 557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner// This file is distributed under the University of Illinois Open Source 657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner// License. See LICENSE.TXT for details. 757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner// 857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner//===----------------------------------------------------------------------===// 957c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner// 102c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson// This file implements the common infrastructure (including C bindings) for 112c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson// libLLVMIPO.a, which implements several transformations over the LLVM 122c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson// intermediate representation. 1357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner// 1457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner//===----------------------------------------------------------------------===// 1557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 16613d13beb03bb56a17e6b3262c5e8e539a7e9db8Benjamin Kramer#include "llvm-c/Initialization.h" 1757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner#include "llvm-c/Transforms/IPO.h" 182c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson#include "llvm/InitializePasses.h" 1957c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner#include "llvm/PassManager.h" 2057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner#include "llvm/Transforms/IPO.h" 2157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 2257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnerusing namespace llvm; 2357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 242c81296bc237cb26c2bb789514e331b3b5b31f79Owen Andersonvoid llvm::initializeIPO(PassRegistry &Registry) { 252c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeArgPromotionPass(Registry); 262c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeConstantMergePass(Registry); 272c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeDAEPass(Registry); 282c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeDAHPass(Registry); 292c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeFunctionAttrsPass(Registry); 302c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeGlobalDCEPass(Registry); 312c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeGlobalOptPass(Registry); 322c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeIPCPPass(Registry); 332c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeAlwaysInlinerPass(Registry); 342c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeSimpleInlinerPass(Registry); 352c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeInternalizePassPass(Registry); 362c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeLoopExtractorPass(Registry); 372c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeBlockExtractorPassPass(Registry); 382c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeSingleLoopExtractorPass(Registry); 392c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeMergeFunctionsPass(Registry); 402c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializePartialInlinerPass(Registry); 412c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializePruneEHPass(Registry); 422c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeStripDeadPrototypesPassPass(Registry); 432c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeStripSymbolsPass(Registry); 442c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeStripDebugDeclarePass(Registry); 452c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeStripDeadDebugInfoPass(Registry); 462c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeStripNonDebugSymbolsPass(Registry); 472c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson} 482c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson 492c81296bc237cb26c2bb789514e331b3b5b31f79Owen Andersonvoid LLVMInitializeIPO(LLVMPassRegistryRef R) { 502c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson initializeIPO(*unwrap(R)); 512c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson} 522c81296bc237cb26c2bb789514e331b3b5b31f79Owen Anderson 5357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddArgumentPromotionPass(LLVMPassManagerRef PM) { 5457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createArgumentPromotionPass()); 5557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 5657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 5757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddConstantMergePass(LLVMPassManagerRef PM) { 5857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createConstantMergePass()); 5957c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 6057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 6157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddDeadArgEliminationPass(LLVMPassManagerRef PM) { 6257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createDeadArgEliminationPass()); 6357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 6457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 6557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddFunctionAttrsPass(LLVMPassManagerRef PM) { 6657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createFunctionAttrsPass()); 6757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 6857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 6957c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddFunctionInliningPass(LLVMPassManagerRef PM) { 7057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createFunctionInliningPass()); 7157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 7257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 733d72290ecb30002d4372b6afbeda73812221ac3eRafael Espindolavoid LLVMAddAlwaysInlinerPass(LLVMPassManagerRef PM) { 743d72290ecb30002d4372b6afbeda73812221ac3eRafael Espindola unwrap(PM)->add(llvm::createAlwaysInlinerPass()); 753d72290ecb30002d4372b6afbeda73812221ac3eRafael Espindola} 763d72290ecb30002d4372b6afbeda73812221ac3eRafael Espindola 7757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddGlobalDCEPass(LLVMPassManagerRef PM) { 7857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createGlobalDCEPass()); 7957c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 8057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 8157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddGlobalOptimizerPass(LLVMPassManagerRef PM) { 8257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createGlobalOptimizerPass()); 8357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 8457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 8557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddIPConstantPropagationPass(LLVMPassManagerRef PM) { 8657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createIPConstantPropagationPass()); 8757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 8857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 8957c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddPruneEHPass(LLVMPassManagerRef PM) { 9057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createPruneEHPass()); 9157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 9257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 9316ddd885d84beb57ac68e1503faa94cda279be4bWesley Peckvoid LLVMAddIPSCCPPass(LLVMPassManagerRef PM) { 9416ddd885d84beb57ac68e1503faa94cda279be4bWesley Peck unwrap(PM)->add(createIPSCCPPass()); 9516ddd885d84beb57ac68e1503faa94cda279be4bWesley Peck} 9616ddd885d84beb57ac68e1503faa94cda279be4bWesley Peck 9716ddd885d84beb57ac68e1503faa94cda279be4bWesley Peckvoid LLVMAddInternalizePass(LLVMPassManagerRef PM, unsigned AllButMain) { 9816ddd885d84beb57ac68e1503faa94cda279be4bWesley Peck unwrap(PM)->add(createInternalizePass(AllButMain != 0)); 9916ddd885d84beb57ac68e1503faa94cda279be4bWesley Peck} 10016ddd885d84beb57ac68e1503faa94cda279be4bWesley Peck 10157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddStripDeadPrototypesPass(LLVMPassManagerRef PM) { 10257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createStripDeadPrototypesPass()); 10357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 10457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner 10557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddStripSymbolsPass(LLVMPassManagerRef PM) { 10657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner unwrap(PM)->add(createStripSymbolsPass()); 10757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner} 108