blob: 51d007581283dfed5168366adab217428a248d3a [file] [log] [blame]
Chris Lattnera59518272009-03-06 16:54:19 +00001/*===-- IPO.h - Interprocedural Transformations C Interface -----*- C++ -*-===*\
Chris Lattnere48f8972009-03-06 16:52:18 +00002|* *|
Chandler Carruth2946cd72019-01-19 08:50:56 +00003|* Part of the LLVM Project, under the Apache License v2.0 with LLVM *|
4|* Exceptions. *|
5|* See https://llvm.org/LICENSE.txt for license information. *|
6|* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *|
Chris Lattnere48f8972009-03-06 16:52:18 +00007|* *|
8|*===----------------------------------------------------------------------===*|
9|* *|
Chris Lattnera59518272009-03-06 16:54:19 +000010|* This header declares the C interface to libLLVMIPO.a, which implements *|
11|* various interprocedural transformations of the LLVM IR. *|
Chris Lattnere48f8972009-03-06 16:52:18 +000012|* *|
13\*===----------------------------------------------------------------------===*/
14
Chris Lattnera59518272009-03-06 16:54:19 +000015#ifndef LLVM_C_TRANSFORMS_IPO_H
16#define LLVM_C_TRANSFORMS_IPO_H
Chris Lattnere48f8972009-03-06 16:52:18 +000017
Eric Christophera6b96002015-12-18 01:46:52 +000018#include "llvm-c/Types.h"
Chris Lattnere48f8972009-03-06 16:52:18 +000019
20#ifdef __cplusplus
21extern "C" {
22#endif
23
Gregory Szorc34c863a2012-03-21 03:54:29 +000024/**
25 * @defgroup LLVMCTransformsIPO Interprocedural transformations
26 * @ingroup LLVMCTransforms
27 *
28 * @{
29 */
30
Chris Lattnere48f8972009-03-06 16:52:18 +000031/** See llvm::createArgumentPromotionPass function. */
32void LLVMAddArgumentPromotionPass(LLVMPassManagerRef PM);
33
34/** See llvm::createConstantMergePass function. */
35void LLVMAddConstantMergePass(LLVMPassManagerRef PM);
36
Aditya Kumara6d9d312019-09-29 16:06:22 +000037/** See llvm::createMergeFunctionsPass function. */
38void LLVMAddMergeFunctionsPass(LLVMPassManagerRef PM);
39
Matthew Simpsoncb585582017-10-25 13:40:08 +000040/** See llvm::createCalledValuePropagationPass function. */
41void LLVMAddCalledValuePropagationPass(LLVMPassManagerRef PM);
42
Chris Lattnere48f8972009-03-06 16:52:18 +000043/** See llvm::createDeadArgEliminationPass function. */
44void LLVMAddDeadArgEliminationPass(LLVMPassManagerRef PM);
45
Chris Lattnere48f8972009-03-06 16:52:18 +000046/** See llvm::createFunctionAttrsPass function. */
47void LLVMAddFunctionAttrsPass(LLVMPassManagerRef PM);
48
49/** See llvm::createFunctionInliningPass function. */
50void LLVMAddFunctionInliningPass(LLVMPassManagerRef PM);
51
Rafael Espindolab84dc6b2011-07-26 15:23:23 +000052/** See llvm::createAlwaysInlinerPass function. */
53void LLVMAddAlwaysInlinerPass(LLVMPassManagerRef PM);
54
Chris Lattnere48f8972009-03-06 16:52:18 +000055/** See llvm::createGlobalDCEPass function. */
56void LLVMAddGlobalDCEPass(LLVMPassManagerRef PM);
57
58/** See llvm::createGlobalOptimizerPass function. */
59void LLVMAddGlobalOptimizerPass(LLVMPassManagerRef PM);
60
61/** See llvm::createIPConstantPropagationPass function. */
62void LLVMAddIPConstantPropagationPass(LLVMPassManagerRef PM);
63
Chris Lattnere48f8972009-03-06 16:52:18 +000064/** See llvm::createPruneEHPass function. */
65void LLVMAddPruneEHPass(LLVMPassManagerRef PM);
66
Wesley Pecka2ca3fa2010-04-09 20:43:20 +000067/** See llvm::createIPSCCPPass function. */
68void LLVMAddIPSCCPPass(LLVMPassManagerRef PM);
69
70/** See llvm::createInternalizePass function. */
71void LLVMAddInternalizePass(LLVMPassManagerRef, unsigned AllButMain);
72
Robert Widmannfcf3c552019-07-23 04:56:44 +000073/**
74 * Create and add the internalize pass to the given pass manager with the
75 * provided preservation callback.
76 *
77 * The context parameter is forwarded to the callback on each invocation.
78 * As such, it is the responsibility of the caller to extend its lifetime
79 * until execution of this pass has finished.
80 *
81 * @see llvm::createInternalizePass function.
82 */
83void LLVMAddInternalizePassWithMustPreservePredicate(
84 LLVMPassManagerRef PM,
85 void *Context,
86 LLVMBool (*MustPreserve)(LLVMValueRef, void *));
87
Chris Lattnere48f8972009-03-06 16:52:18 +000088/** See llvm::createStripDeadPrototypesPass function. */
89void LLVMAddStripDeadPrototypesPass(LLVMPassManagerRef PM);
90
91/** See llvm::createStripSymbolsPass function. */
92void LLVMAddStripSymbolsPass(LLVMPassManagerRef PM);
93
Gregory Szorc34c863a2012-03-21 03:54:29 +000094/**
95 * @}
96 */
97
Chris Lattnere48f8972009-03-06 16:52:18 +000098#ifdef __cplusplus
99}
100#endif /* defined(__cplusplus) */
101
102#endif