blob: dbbe602ece53b96a0c1f3602049ebc2d1f1b27b2 [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//
Justin Bogner48f1f882015-10-30 23:02:38 +000010// This file implements the common infrastructure (including C bindings) for
11// libLLVMIPO.a, which implements several transformations over the LLVM
Owen Andersonbf70a032010-10-07 18:09:59 +000012// 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"
Chandler Carruth30d69c22015-02-13 10:01:29 +000019#include "llvm/IR/LegacyPassManager.h"
Chris Lattnere48f8972009-03-06 16:52:18 +000020#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);
Evgeniy Stepanov67849d52015-12-15 23:00:08 +000027 initializeCrossDSOCFIPass(Registry);
Owen Andersonbf70a032010-10-07 18:09:59 +000028 initializeDAEPass(Registry);
29 initializeDAHPass(Registry);
Chandler Carruthf49f1a872015-12-27 08:13:45 +000030 initializeForceFunctionAttrsLegacyPassPass(Registry);
Owen Andersonbf70a032010-10-07 18:09:59 +000031 initializeGlobalDCEPass(Registry);
32 initializeGlobalOptPass(Registry);
33 initializeIPCPPass(Registry);
34 initializeAlwaysInlinerPass(Registry);
35 initializeSimpleInlinerPass(Registry);
Chandler Carruth3a040e62015-12-27 08:41:34 +000036 initializeInferFunctionAttrsLegacyPassPass(Registry);
Owen Andersonbf70a032010-10-07 18:09:59 +000037 initializeInternalizePassPass(Registry);
38 initializeLoopExtractorPass(Registry);
39 initializeBlockExtractorPassPass(Registry);
40 initializeSingleLoopExtractorPass(Registry);
Peter Collingbournee6909c82015-02-20 20:30:47 +000041 initializeLowerBitSetsPass(Registry);
Owen Andersonbf70a032010-10-07 18:09:59 +000042 initializeMergeFunctionsPass(Registry);
43 initializePartialInlinerPass(Registry);
Chandler Carruth1926b702016-01-08 10:55:52 +000044 initializePostOrderFunctionAttrsPass(Registry);
45 initializeReversePostOrderFunctionAttrsPass(Registry);
Owen Andersonbf70a032010-10-07 18:09:59 +000046 initializePruneEHPass(Registry);
Justin Bogner21e15372015-10-30 23:28:12 +000047 initializeStripDeadPrototypesLegacyPassPass(Registry);
Owen Andersonbf70a032010-10-07 18:09:59 +000048 initializeStripSymbolsPass(Registry);
49 initializeStripDebugDeclarePass(Registry);
50 initializeStripDeadDebugInfoPass(Registry);
51 initializeStripNonDebugSymbolsPass(Registry);
Hal Finkel26fc4c22013-12-12 20:45:08 +000052 initializeBarrierNoopPass(Registry);
Rafael Espindola237c3a62015-07-13 14:18:22 +000053 initializeEliminateAvailableExternallyPass(Registry);
Diego Novillo4d711132015-08-25 15:25:11 +000054 initializeSampleProfileLoaderPass(Registry);
Mehdi Amini42418ab2015-11-24 06:07:49 +000055 initializeFunctionImportPassPass(Registry);
Peter Collingbournedf49d1b2016-02-09 22:50:34 +000056 initializeWholeProgramDevirtPass(Registry);
Owen Andersonbf70a032010-10-07 18:09:59 +000057}
58
59void LLVMInitializeIPO(LLVMPassRegistryRef R) {
60 initializeIPO(*unwrap(R));
61}
62
Chris Lattnere48f8972009-03-06 16:52:18 +000063void LLVMAddArgumentPromotionPass(LLVMPassManagerRef PM) {
64 unwrap(PM)->add(createArgumentPromotionPass());
65}
66
67void LLVMAddConstantMergePass(LLVMPassManagerRef PM) {
68 unwrap(PM)->add(createConstantMergePass());
69}
70
71void LLVMAddDeadArgEliminationPass(LLVMPassManagerRef PM) {
72 unwrap(PM)->add(createDeadArgEliminationPass());
73}
74
Chris Lattnere48f8972009-03-06 16:52:18 +000075void LLVMAddFunctionAttrsPass(LLVMPassManagerRef PM) {
Chandler Carruth1926b702016-01-08 10:55:52 +000076 unwrap(PM)->add(createPostOrderFunctionAttrsPass());
Chris Lattnere48f8972009-03-06 16:52:18 +000077}
78
79void LLVMAddFunctionInliningPass(LLVMPassManagerRef PM) {
80 unwrap(PM)->add(createFunctionInliningPass());
81}
82
Rafael Espindolab84dc6b2011-07-26 15:23:23 +000083void LLVMAddAlwaysInlinerPass(LLVMPassManagerRef PM) {
84 unwrap(PM)->add(llvm::createAlwaysInlinerPass());
85}
86
Chris Lattnere48f8972009-03-06 16:52:18 +000087void LLVMAddGlobalDCEPass(LLVMPassManagerRef PM) {
88 unwrap(PM)->add(createGlobalDCEPass());
89}
90
91void LLVMAddGlobalOptimizerPass(LLVMPassManagerRef PM) {
92 unwrap(PM)->add(createGlobalOptimizerPass());
93}
94
95void LLVMAddIPConstantPropagationPass(LLVMPassManagerRef PM) {
96 unwrap(PM)->add(createIPConstantPropagationPass());
97}
98
Chris Lattnere48f8972009-03-06 16:52:18 +000099void LLVMAddPruneEHPass(LLVMPassManagerRef PM) {
100 unwrap(PM)->add(createPruneEHPass());
101}
102
Wesley Pecka2ca3fa2010-04-09 20:43:20 +0000103void LLVMAddIPSCCPPass(LLVMPassManagerRef PM) {
104 unwrap(PM)->add(createIPSCCPPass());
105}
106
107void LLVMAddInternalizePass(LLVMPassManagerRef PM, unsigned AllButMain) {
Rafael Espindola4253bd82012-10-26 18:47:48 +0000108 std::vector<const char *> Export;
109 if (AllButMain)
110 Export.push_back("main");
Rafael Espindola282a4702013-10-31 20:51:58 +0000111 unwrap(PM)->add(createInternalizePass(Export));
Wesley Pecka2ca3fa2010-04-09 20:43:20 +0000112}
113
Chris Lattnere48f8972009-03-06 16:52:18 +0000114void LLVMAddStripDeadPrototypesPass(LLVMPassManagerRef PM) {
115 unwrap(PM)->add(createStripDeadPrototypesPass());
116}
117
118void LLVMAddStripSymbolsPass(LLVMPassManagerRef PM) {
119 unwrap(PM)->add(createStripSymbolsPass());
120}