1193323Sed/*===-- Scalar.h - Scalar Transformation Library C Interface ----*- C++ -*-===*\
2193323Sed|*                                                                            *|
3353358Sdim|* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
4353358Sdim|* Exceptions.                                                                *|
5353358Sdim|* See https://llvm.org/LICENSE.txt for license information.                  *|
6353358Sdim|* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
7193323Sed|*                                                                            *|
8193323Sed|*===----------------------------------------------------------------------===*|
9193323Sed|*                                                                            *|
10193323Sed|* This header declares the C interface to libLLVMScalarOpts.a, which         *|
11193323Sed|* implements various scalar transformations of the LLVM IR.                  *|
12193323Sed|*                                                                            *|
13193323Sed|* Many exotic languages can interoperate with C code but have a harder time  *|
14193323Sed|* with C++ due to name mangling. So in addition to C, this interface enables *|
15193323Sed|* tools written in such languages.                                           *|
16193323Sed|*                                                                            *|
17193323Sed\*===----------------------------------------------------------------------===*/
18193323Sed
19193323Sed#ifndef LLVM_C_TRANSFORMS_SCALAR_H
20193323Sed#define LLVM_C_TRANSFORMS_SCALAR_H
21193323Sed
22360784Sdim#include "llvm-c/ExternC.h"
23296417Sdim#include "llvm-c/Types.h"
24193323Sed
25360784SdimLLVM_C_EXTERN_C_BEGIN
26193323Sed
27234353Sdim/**
28234353Sdim * @defgroup LLVMCTransformsScalar Scalar transformations
29234353Sdim * @ingroup LLVMCTransforms
30234353Sdim *
31234353Sdim * @{
32234353Sdim */
33234353Sdim
34193323Sed/** See llvm::createAggressiveDCEPass function. */
35193323Sedvoid LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM);
36193323Sed
37360784Sdim/** See llvm::createDeadCodeEliminationPass function. */
38360784Sdimvoid LLVMAddDCEPass(LLVMPassManagerRef PM);
39360784Sdim
40288943Sdim/** See llvm::createBitTrackingDCEPass function. */
41288943Sdimvoid LLVMAddBitTrackingDCEPass(LLVMPassManagerRef PM);
42288943Sdim
43280031Sdim/** See llvm::createAlignmentFromAssumptionsPass function. */
44280031Sdimvoid LLVMAddAlignmentFromAssumptionsPass(LLVMPassManagerRef PM);
45280031Sdim
46193323Sed/** See llvm::createCFGSimplificationPass function. */
47193323Sedvoid LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM);
48193323Sed
49193323Sed/** See llvm::createDeadStoreEliminationPass function. */
50193323Sedvoid LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM);
51193323Sed
52276479Sdim/** See llvm::createScalarizerPass function. */
53276479Sdimvoid LLVMAddScalarizerPass(LLVMPassManagerRef PM);
54276479Sdim
55276479Sdim/** See llvm::createMergedLoadStoreMotionPass function. */
56276479Sdimvoid LLVMAddMergedLoadStoreMotionPass(LLVMPassManagerRef PM);
57276479Sdim
58193323Sed/** See llvm::createGVNPass function. */
59193323Sedvoid LLVMAddGVNPass(LLVMPassManagerRef PM);
60193323Sed
61314564Sdim/** See llvm::createGVNPass function. */
62314564Sdimvoid LLVMAddNewGVNPass(LLVMPassManagerRef PM);
63314564Sdim
64193323Sed/** See llvm::createIndVarSimplifyPass function. */
65193323Sedvoid LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM);
66193323Sed
67193323Sed/** See llvm::createInstructionCombiningPass function. */
68193323Sedvoid LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM);
69193323Sed
70193323Sed/** See llvm::createJumpThreadingPass function. */
71193323Sedvoid LLVMAddJumpThreadingPass(LLVMPassManagerRef PM);
72193323Sed
73193323Sed/** See llvm::createLICMPass function. */
74193323Sedvoid LLVMAddLICMPass(LLVMPassManagerRef PM);
75193323Sed
76193323Sed/** See llvm::createLoopDeletionPass function. */
77193323Sedvoid LLVMAddLoopDeletionPass(LLVMPassManagerRef PM);
78193323Sed
79221345Sdim/** See llvm::createLoopIdiomPass function */
80221345Sdimvoid LLVMAddLoopIdiomPass(LLVMPassManagerRef PM);
81221345Sdim
82193323Sed/** See llvm::createLoopRotatePass function. */
83193323Sedvoid LLVMAddLoopRotatePass(LLVMPassManagerRef PM);
84193323Sed
85261991Sdim/** See llvm::createLoopRerollPass function. */
86261991Sdimvoid LLVMAddLoopRerollPass(LLVMPassManagerRef PM);
87261991Sdim
88193323Sed/** See llvm::createLoopUnrollPass function. */
89193323Sedvoid LLVMAddLoopUnrollPass(LLVMPassManagerRef PM);
90193323Sed
91341825Sdim/** See llvm::createLoopUnrollAndJamPass function. */
92341825Sdimvoid LLVMAddLoopUnrollAndJamPass(LLVMPassManagerRef PM);
93341825Sdim
94193323Sed/** See llvm::createLoopUnswitchPass function. */
95193323Sedvoid LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM);
96193323Sed
97344779Sdim/** See llvm::createLowerAtomicPass function. */
98344779Sdimvoid LLVMAddLowerAtomicPass(LLVMPassManagerRef PM);
99344779Sdim
100193323Sed/** See llvm::createMemCpyOptPass function. */
101193323Sedvoid LLVMAddMemCpyOptPass(LLVMPassManagerRef PM);
102193323Sed
103261991Sdim/** See llvm::createPartiallyInlineLibCallsPass function. */
104261991Sdimvoid LLVMAddPartiallyInlineLibCallsPass(LLVMPassManagerRef PM);
105261991Sdim
106193323Sed/** See llvm::createReassociatePass function. */
107193323Sedvoid LLVMAddReassociatePass(LLVMPassManagerRef PM);
108193323Sed
109193323Sed/** See llvm::createSCCPPass function. */
110193323Sedvoid LLVMAddSCCPPass(LLVMPassManagerRef PM);
111193323Sed
112309124Sdim/** See llvm::createSROAPass function. */
113193323Sedvoid LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM);
114193323Sed
115309124Sdim/** See llvm::createSROAPass function. */
116221345Sdimvoid LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM);
117221345Sdim
118309124Sdim/** See llvm::createSROAPass function. */
119205218Srdivackyvoid LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM,
120205218Srdivacky                                                  int Threshold);
121205218Srdivacky
122193323Sed/** See llvm::createSimplifyLibCallsPass function. */
123193323Sedvoid LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM);
124193323Sed
125193323Sed/** See llvm::createTailCallEliminationPass function. */
126193323Sedvoid LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM);
127193323Sed
128193323Sed/** See llvm::createConstantPropagationPass function. */
129193323Sedvoid LLVMAddConstantPropagationPass(LLVMPassManagerRef PM);
130193323Sed
131193323Sed/** See llvm::demotePromoteMemoryToRegisterPass function. */
132193323Sedvoid LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM);
133193323Sed
134205218Srdivacky/** See llvm::createVerifierPass function. */
135205218Srdivackyvoid LLVMAddVerifierPass(LLVMPassManagerRef PM);
136205218Srdivacky
137221345Sdim/** See llvm::createCorrelatedValuePropagationPass function */
138221345Sdimvoid LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM);
139221345Sdim
140221345Sdim/** See llvm::createEarlyCSEPass function */
141221345Sdimvoid LLVMAddEarlyCSEPass(LLVMPassManagerRef PM);
142221345Sdim
143314564Sdim/** See llvm::createEarlyCSEPass function */
144314564Sdimvoid LLVMAddEarlyCSEMemSSAPass(LLVMPassManagerRef PM);
145314564Sdim
146226633Sdim/** See llvm::createLowerExpectIntrinsicPass function */
147226633Sdimvoid LLVMAddLowerExpectIntrinsicPass(LLVMPassManagerRef PM);
148226633Sdim
149360784Sdim/** See llvm::createLowerConstantIntrinsicsPass function */
150360784Sdimvoid LLVMAddLowerConstantIntrinsicsPass(LLVMPassManagerRef PM);
151360784Sdim
152221345Sdim/** See llvm::createTypeBasedAliasAnalysisPass function */
153221345Sdimvoid LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM);
154221345Sdim
155280031Sdim/** See llvm::createScopedNoAliasAAPass function */
156280031Sdimvoid LLVMAddScopedNoAliasAAPass(LLVMPassManagerRef PM);
157280031Sdim
158221345Sdim/** See llvm::createBasicAliasAnalysisPass function */
159221345Sdimvoid LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM);
160221345Sdim
161344779Sdim/** See llvm::createUnifyFunctionExitNodesPass function */
162344779Sdimvoid LLVMAddUnifyFunctionExitNodesPass(LLVMPassManagerRef PM);
163344779Sdim
164234353Sdim/**
165234353Sdim * @}
166234353Sdim */
167221345Sdim
168360784SdimLLVM_C_EXTERN_C_END
169193323Sed
170193323Sed#endif
171