blob: b4d31d8d6fc25b85fb0a4bd8c48f522d830f760a [file] [log] [blame]
Craig Topperc74b6002012-10-16 02:21:30 +00001//===-- IPO.cpp -----------------------------------------------------------===//
Chris Lattnere48f8972009-03-06 16:52:18 +00002//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
Owen Andersonbf70a032010-10-07 18:09:59 +000010// This file implements the common infrastructure (including C bindings) for
11// libLLVMIPO.a, which implements several transformations over the LLVM
12// intermediate representation.
Chris Lattnere48f8972009-03-06 16:52:18 +000013//
14//===----------------------------------------------------------------------===//
15
Benjamin Kramer5a6568832011-08-19 01:36:54 +000016#include "llvm-c/Initialization.h"
Chris Lattnere48f8972009-03-06 16:52:18 +000017#include "llvm-c/Transforms/IPO.h"
Owen Andersonbf70a032010-10-07 18:09:59 +000018#include "llvm/InitializePasses.h"
Chris Lattnere48f8972009-03-06 16:52:18 +000019#include "llvm/PassManager.h"
20#include "llvm/Transforms/IPO.h"
21
22using namespace llvm;
23
Owen Andersonbf70a032010-10-07 18:09:59 +000024void llvm::initializeIPO(PassRegistry &Registry) {
25 initializeArgPromotionPass(Registry);
26 initializeConstantMergePass(Registry);
27 initializeDAEPass(Registry);
28 initializeDAHPass(Registry);
Owen Andersonbf70a032010-10-07 18:09:59 +000029 initializeFunctionAttrsPass(Registry);
30 initializeGlobalDCEPass(Registry);
31 initializeGlobalOptPass(Registry);
32 initializeIPCPPass(Registry);
33 initializeAlwaysInlinerPass(Registry);
34 initializeSimpleInlinerPass(Registry);
35 initializeInternalizePassPass(Registry);
36 initializeLoopExtractorPass(Registry);
37 initializeBlockExtractorPassPass(Registry);
38 initializeSingleLoopExtractorPass(Registry);
Owen Andersonbf70a032010-10-07 18:09:59 +000039 initializeMergeFunctionsPass(Registry);
40 initializePartialInlinerPass(Registry);
Owen Andersonbf70a032010-10-07 18:09:59 +000041 initializePruneEHPass(Registry);
42 initializeStripDeadPrototypesPassPass(Registry);
43 initializeStripSymbolsPass(Registry);
44 initializeStripDebugDeclarePass(Registry);
45 initializeStripDeadDebugInfoPass(Registry);
46 initializeStripNonDebugSymbolsPass(Registry);
Hal Finkel26fc4c22013-12-12 20:45:08 +000047 initializeBarrierNoopPass(Registry);
Owen Andersonbf70a032010-10-07 18:09:59 +000048}
49
50void LLVMInitializeIPO(LLVMPassRegistryRef R) {
51 initializeIPO(*unwrap(R));
52}
53
Chris Lattnere48f8972009-03-06 16:52:18 +000054void LLVMAddArgumentPromotionPass(LLVMPassManagerRef PM) {
55 unwrap(PM)->add(createArgumentPromotionPass());
56}
57
58void LLVMAddConstantMergePass(LLVMPassManagerRef PM) {
59 unwrap(PM)->add(createConstantMergePass());
60}
61
62void LLVMAddDeadArgEliminationPass(LLVMPassManagerRef PM) {
63 unwrap(PM)->add(createDeadArgEliminationPass());
64}
65
Chris Lattnere48f8972009-03-06 16:52:18 +000066void LLVMAddFunctionAttrsPass(LLVMPassManagerRef PM) {
67 unwrap(PM)->add(createFunctionAttrsPass());
68}
69
70void LLVMAddFunctionInliningPass(LLVMPassManagerRef PM) {
71 unwrap(PM)->add(createFunctionInliningPass());
72}
73
Rafael Espindolab84dc6b2011-07-26 15:23:23 +000074void LLVMAddAlwaysInlinerPass(LLVMPassManagerRef PM) {
75 unwrap(PM)->add(llvm::createAlwaysInlinerPass());
76}
77
Chris Lattnere48f8972009-03-06 16:52:18 +000078void LLVMAddGlobalDCEPass(LLVMPassManagerRef PM) {
79 unwrap(PM)->add(createGlobalDCEPass());
80}
81
82void LLVMAddGlobalOptimizerPass(LLVMPassManagerRef PM) {
83 unwrap(PM)->add(createGlobalOptimizerPass());
84}
85
86void LLVMAddIPConstantPropagationPass(LLVMPassManagerRef PM) {
87 unwrap(PM)->add(createIPConstantPropagationPass());
88}
89
Chris Lattnere48f8972009-03-06 16:52:18 +000090void LLVMAddPruneEHPass(LLVMPassManagerRef PM) {
91 unwrap(PM)->add(createPruneEHPass());
92}
93
Wesley Pecka2ca3fa2010-04-09 20:43:20 +000094void LLVMAddIPSCCPPass(LLVMPassManagerRef PM) {
95 unwrap(PM)->add(createIPSCCPPass());
96}
97
98void LLVMAddInternalizePass(LLVMPassManagerRef PM, unsigned AllButMain) {
Rafael Espindola4253bd82012-10-26 18:47:48 +000099 std::vector<const char *> Export;
100 if (AllButMain)
101 Export.push_back("main");
Rafael Espindola282a4702013-10-31 20:51:58 +0000102 unwrap(PM)->add(createInternalizePass(Export));
Wesley Pecka2ca3fa2010-04-09 20:43:20 +0000103}
104
Chris Lattnere48f8972009-03-06 16:52:18 +0000105void LLVMAddStripDeadPrototypesPass(LLVMPassManagerRef PM) {
106 unwrap(PM)->add(createStripDeadPrototypesPass());
107}
108
109void LLVMAddStripSymbolsPass(LLVMPassManagerRef PM) {
110 unwrap(PM)->add(createStripSymbolsPass());
111}