1/*===-- IPO.h - Interprocedural Transformations C Interface -----*- C++ -*-===*\
2|*                                                                            *|
3|* 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                    *|
7|*                                                                            *|
8|*===----------------------------------------------------------------------===*|
9|*                                                                            *|
10|* This header declares the C interface to libLLVMIPO.a, which implements     *|
11|* various interprocedural transformations of the LLVM IR.                    *|
12|*                                                                            *|
13\*===----------------------------------------------------------------------===*/
14
15#ifndef LLVM_C_TRANSFORMS_IPO_H
16#define LLVM_C_TRANSFORMS_IPO_H
17
18#include "llvm-c/ExternC.h"
19#include "llvm-c/Types.h"
20
21LLVM_C_EXTERN_C_BEGIN
22
23/**
24 * @defgroup LLVMCTransformsIPO Interprocedural transformations
25 * @ingroup LLVMCTransforms
26 *
27 * @{
28 */
29
30/** See llvm::createArgumentPromotionPass function. */
31void LLVMAddArgumentPromotionPass(LLVMPassManagerRef PM);
32
33/** See llvm::createConstantMergePass function. */
34void LLVMAddConstantMergePass(LLVMPassManagerRef PM);
35
36/** See llvm::createMergeFunctionsPass function. */
37void LLVMAddMergeFunctionsPass(LLVMPassManagerRef PM);
38
39/** See llvm::createCalledValuePropagationPass function. */
40void LLVMAddCalledValuePropagationPass(LLVMPassManagerRef PM);
41
42/** See llvm::createDeadArgEliminationPass function. */
43void LLVMAddDeadArgEliminationPass(LLVMPassManagerRef PM);
44
45/** See llvm::createFunctionAttrsPass function. */
46void LLVMAddFunctionAttrsPass(LLVMPassManagerRef PM);
47
48/** See llvm::createFunctionInliningPass function. */
49void LLVMAddFunctionInliningPass(LLVMPassManagerRef PM);
50
51/** See llvm::createAlwaysInlinerPass function. */
52void LLVMAddAlwaysInlinerPass(LLVMPassManagerRef PM);
53
54/** See llvm::createGlobalDCEPass function. */
55void LLVMAddGlobalDCEPass(LLVMPassManagerRef PM);
56
57/** See llvm::createGlobalOptimizerPass function. */
58void LLVMAddGlobalOptimizerPass(LLVMPassManagerRef PM);
59
60/** See llvm::createIPConstantPropagationPass function. */
61void LLVMAddIPConstantPropagationPass(LLVMPassManagerRef PM);
62
63/** See llvm::createPruneEHPass function. */
64void LLVMAddPruneEHPass(LLVMPassManagerRef PM);
65
66/** See llvm::createIPSCCPPass function. */
67void LLVMAddIPSCCPPass(LLVMPassManagerRef PM);
68
69/** See llvm::createInternalizePass function. */
70void LLVMAddInternalizePass(LLVMPassManagerRef, unsigned AllButMain);
71
72/**
73 * Create and add the internalize pass to the given pass manager with the
74 * provided preservation callback.
75 *
76 * The context parameter is forwarded to the callback on each invocation.
77 * As such, it is the responsibility of the caller to extend its lifetime
78 * until execution of this pass has finished.
79 *
80 * @see llvm::createInternalizePass function.
81 */
82void LLVMAddInternalizePassWithMustPreservePredicate(
83    LLVMPassManagerRef PM,
84    void *Context,
85    LLVMBool (*MustPreserve)(LLVMValueRef, void *));
86
87/** See llvm::createStripDeadPrototypesPass function. */
88void LLVMAddStripDeadPrototypesPass(LLVMPassManagerRef PM);
89
90/** See llvm::createStripSymbolsPass function. */
91void LLVMAddStripSymbolsPass(LLVMPassManagerRef PM);
92
93/**
94 * @}
95 */
96
97LLVM_C_EXTERN_C_END
98
99#endif
100