141ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen//===-- Scalar.cpp --------------------------------------------------------===//
241ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen//
341ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen//                     The LLVM Compiler Infrastructure
441ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen//
541ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen// This file is distributed under the University of Illinois Open Source
641ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen// License. See LICENSE.TXT for details.
741ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen//
841ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen//===----------------------------------------------------------------------===//
941ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen//
10a94d6e87c4c49f2e81b01d66d8bfb591277f8f96Nadav Rotem// This file implements common infrastructure for libLLVMScalarOpts.a, which
111a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson// implements several scalar transformations over the LLVM intermediate
121a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson// representation, including the C bindings for that library.
1341ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen//
1441ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen//===----------------------------------------------------------------------===//
1541ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen
16d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/Transforms/Scalar.h"
171a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson#include "llvm-c/Initialization.h"
18d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm-c/Transforms/Scalar.h"
19f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/Analysis/BasicAliasAnalysis.h"
200d9874b48d747298dcea7e4e6385b511c04a7842Rafael Espindola#include "llvm/Analysis/Passes.h"
21f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/Analysis/ScopedNoAliasAA.h"
22f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/Analysis/TypeBasedAliasAnalysis.h"
23de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/Transforms/Scalar/GVN.h"
240b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/DataLayout.h"
2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/IR/Verifier.h"
26d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/InitializePasses.h"
27ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/IR/LegacyPassManager.h"
2841ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen
2941ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksenusing namespace llvm;
3041ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen
31a94d6e87c4c49f2e81b01d66d8bfb591277f8f96Nadav Rotem/// initializeScalarOptsPasses - Initialize all passes linked into the
321a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson/// ScalarOpts library.
331a3d23362168ae6d8e07efd547a92cc36738a789Owen Andersonvoid llvm::initializeScalarOpts(PassRegistry &Registry) {
34f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  initializeADCELegacyPassPass(Registry);
35de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeBDCELegacyPassPass(Registry);
3637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  initializeAlignmentFromAssumptionsPass(Registry);
37de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeConstantHoistingLegacyPassPass(Registry);
381a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson  initializeConstantPropagationPass(Registry);
391a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson  initializeCorrelatedValuePropagationPass(Registry);
40de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeDCELegacyPassPass(Registry);
411a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson  initializeDeadInstEliminationPass(Registry);
4236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  initializeScalarizerPass(Registry);
43de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeDSELegacyPassPass(Registry);
44de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeGuardWideningLegacyPassPass(Registry);
45de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeGVNLegacyPassPass(Registry);
46ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  initializeEarlyCSELegacyPassPass(Registry);
4737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  initializeFlattenCFGPassPass(Registry);
48ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  initializeInductiveRangeCheckEliminationPass(Registry);
49de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeIndVarSimplifyLegacyPassPass(Registry);
501a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson  initializeJumpThreadingPass(Registry);
51de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeLegacyLICMPassPass(Registry);
52de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeLoopDataPrefetchPass(Registry);
53de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeLoopDeletionLegacyPassPass(Registry);
54de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeLoopAccessLegacyAnalysisPass(Registry);
55832f61117d69019376c4aabedd4de3831279e288Cameron Zwarich  initializeLoopInstSimplifyPass(Registry);
564c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar  initializeLoopInterchangePass(Registry);
57de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeLoopRotateLegacyPassPass(Registry);
581a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson  initializeLoopStrengthReducePass(Registry);
59bebe48dbfe00078329341945bfb11f778ace6d12Hal Finkel  initializeLoopRerollPass(Registry);
601a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson  initializeLoopUnrollPass(Registry);
611a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson  initializeLoopUnswitchPass(Registry);
62de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeLoopVersioningLICMPass(Registry);
63de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeLoopIdiomRecognizeLegacyPassPass(Registry);
64de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeLowerAtomicLegacyPassPass(Registry);
659da9934e27dfb48de77b80a3e20ed2d869b52024Jakub Staszak  initializeLowerExpectIntrinsicPass(Registry);
66de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeLowerGuardIntrinsicPass(Registry);
67de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeMemCpyOptLegacyPassPass(Registry);
68de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeMergedLoadStoreMotionLegacyPassPass(Registry);
690c7f116bb6950ef819323d855415b2f2b0aad987Pirama Arumuga Nainar  initializeNaryReassociatePass(Registry);
70de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializePartiallyInlineLibCallsLegacyPassPass(Registry);
71de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeReassociateLegacyPassPass(Registry);
721a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson  initializeRegToMemPass(Registry);
73ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  initializeRewriteStatepointsForGCPass(Registry);
74de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeSCCPLegacyPassPass(Registry);
75de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeIPSCCPLegacyPassPass(Registry);
76f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  initializeSROALegacyPassPass(Registry);
7701d7203ef8316fdd71c3cec59f8e68fb869e0dbfTom Stellard  initializeCFGSimplifyPassPass(Registry);
78ad966ea7a81a538425d5319f6d8568e460639e54Matt Arsenault  initializeStructurizeCFGPass(Registry);
79de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeSinkingLegacyPassPass(Registry);
801a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson  initializeTailCallElimPass(Registry);
81dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  initializeSeparateConstOffsetFromGEPPass(Registry);
826948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar  initializeSpeculativeExecutionPass(Registry);
83ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  initializeStraightLineStrengthReducePass(Registry);
84c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines  initializeLoadCombinePass(Registry);
85ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  initializePlaceBackedgeSafepointsImplPass(Registry);
86ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  initializePlaceSafepointsPass(Registry);
87de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeFloat2IntLegacyPassPass(Registry);
886948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar  initializeLoopDistributePass(Registry);
89f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  initializeLoopLoadEliminationPass(Registry);
90de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeLoopSimplifyCFGLegacyPassPass(Registry);
91de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  initializeLoopVersioningPassPass(Registry);
921a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson}
931a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson
941a3d23362168ae6d8e07efd547a92cc36738a789Owen Andersonvoid LLVMInitializeScalarOpts(LLVMPassRegistryRef R) {
951a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson  initializeScalarOpts(*unwrap(R));
961a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson}
971a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson
9857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM) {
9957c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createAggressiveDCEPass());
10057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner}
10157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner
102ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesvoid LLVMAddBitTrackingDCEPass(LLVMPassManagerRef PM) {
103ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  unwrap(PM)->add(createBitTrackingDCEPass());
104ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines}
105ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
10637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid LLVMAddAlignmentFromAssumptionsPass(LLVMPassManagerRef PM) {
10737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  unwrap(PM)->add(createAlignmentFromAssumptionsPass());
10837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines}
10937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
11057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM) {
11157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createCFGSimplificationPass());
11257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner}
11357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner
11457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM) {
11557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createDeadStoreEliminationPass());
11657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner}
11757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner
11836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesvoid LLVMAddScalarizerPass(LLVMPassManagerRef PM) {
11936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  unwrap(PM)->add(createScalarizerPass());
12036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
12136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
12257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddGVNPass(LLVMPassManagerRef PM) {
12357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createGVNPass());
12457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner}
12557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner
12637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid LLVMAddMergedLoadStoreMotionPass(LLVMPassManagerRef PM) {
12737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  unwrap(PM)->add(createMergedLoadStoreMotionPass());
12837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines}
12937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
13057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM) {
13157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createIndVarSimplifyPass());
13241ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen}
13341ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen
13441ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksenvoid LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM) {
13541ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen  unwrap(PM)->add(createInstructionCombiningPass());
13641ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen}
13741ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen
13857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddJumpThreadingPass(LLVMPassManagerRef PM) {
13957c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createJumpThreadingPass());
14069cf031ee33fc564c3888694cb1cd8ab5dae9fd2Gordon Henriksen}
14169cf031ee33fc564c3888694cb1cd8ab5dae9fd2Gordon Henriksen
14257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddLICMPass(LLVMPassManagerRef PM) {
14357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createLICMPass());
14457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner}
14557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner
14657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddLoopDeletionPass(LLVMPassManagerRef PM) {
14757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createLoopDeletionPass());
14857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner}
14957c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner
15045e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindolavoid LLVMAddLoopIdiomPass(LLVMPassManagerRef PM) {
15145e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola  unwrap(PM)->add(createLoopIdiomPass());
15245e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola}
15345e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola
15457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddLoopRotatePass(LLVMPassManagerRef PM) {
15557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createLoopRotatePass());
15657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner}
15757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner
158bebe48dbfe00078329341945bfb11f778ace6d12Hal Finkelvoid LLVMAddLoopRerollPass(LLVMPassManagerRef PM) {
159bebe48dbfe00078329341945bfb11f778ace6d12Hal Finkel  unwrap(PM)->add(createLoopRerollPass());
160bebe48dbfe00078329341945bfb11f778ace6d12Hal Finkel}
161bebe48dbfe00078329341945bfb11f778ace6d12Hal Finkel
162de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarvoid LLVMAddLoopSimplifyCFGPass(LLVMPassManagerRef PM) {
163de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  unwrap(PM)->add(createLoopSimplifyCFGPass());
164de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}
165de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
16657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddLoopUnrollPass(LLVMPassManagerRef PM) {
16757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createLoopUnrollPass());
16857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner}
16957c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner
17057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM) {
17157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createLoopUnswitchPass());
17257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner}
17357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner
17457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddMemCpyOptPass(LLVMPassManagerRef PM) {
17557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createMemCpyOptPass());
17657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner}
17757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner
178a8a7099c1849fcbb4a68642a292fd0250aa46505Richard Sandifordvoid LLVMAddPartiallyInlineLibCallsPass(LLVMPassManagerRef PM) {
179a8a7099c1849fcbb4a68642a292fd0250aa46505Richard Sandiford  unwrap(PM)->add(createPartiallyInlineLibCallsPass());
180a8a7099c1849fcbb4a68642a292fd0250aa46505Richard Sandiford}
181a8a7099c1849fcbb4a68642a292fd0250aa46505Richard Sandiford
18237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid LLVMAddLowerSwitchPass(LLVMPassManagerRef PM) {
18337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  unwrap(PM)->add(createLowerSwitchPass());
18437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines}
18537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
18657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM) {
18757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createPromoteMemoryToRegisterPass());
18869cf031ee33fc564c3888694cb1cd8ab5dae9fd2Gordon Henriksen}
18969cf031ee33fc564c3888694cb1cd8ab5dae9fd2Gordon Henriksen
19041ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksenvoid LLVMAddReassociatePass(LLVMPassManagerRef PM) {
19141ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen  unwrap(PM)->add(createReassociatePass());
19241ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen}
19341ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen
19457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddSCCPPass(LLVMPassManagerRef PM) {
19557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createSCCPPass());
19641ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen}
19741ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen
19857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM) {
199de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  unwrap(PM)->add(createSROAPass());
20057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner}
20157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner
20245e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindolavoid LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM) {
203de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  unwrap(PM)->add(createSROAPass());
20445e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola}
20545e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola
20647a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begemanvoid LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM,
20747a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begeman                                                  int Threshold) {
208de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  unwrap(PM)->add(createSROAPass());
20947a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begeman}
21047a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begeman
21157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM) {
212be87bce32bc9af9bc5918a6e08806b61e3088165Meador Inge  // NOTE: The simplify-libcalls pass has been removed.
21357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner}
21457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner
21557c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM) {
21657c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createTailCallEliminationPass());
21757c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner}
21857c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner
21957c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddConstantPropagationPass(LLVMPassManagerRef PM) {
22057c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createConstantPropagationPass());
22157c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner}
22257c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner
22357c03831ccaabd619d1d7eb164375e7e3027031dChris Lattnervoid LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM) {
22457c03831ccaabd619d1d7eb164375e7e3027031dChris Lattner  unwrap(PM)->add(createDemoteRegisterToMemoryPass());
22541ba1546eb46030e9994ee14f8052a1981ae2c54Gordon Henriksen}
22647a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begeman
22747a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begemanvoid LLVMAddVerifierPass(LLVMPassManagerRef PM) {
22847a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begeman  unwrap(PM)->add(createVerifierPass());
22947a53a6e4ca2e49284c800e9b9e0172e7df7217cNate Begeman}
23045e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola
23145e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindolavoid LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM) {
23245e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola  unwrap(PM)->add(createCorrelatedValuePropagationPass());
23345e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola}
23445e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola
23545e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindolavoid LLVMAddEarlyCSEPass(LLVMPassManagerRef PM) {
23645e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola  unwrap(PM)->add(createEarlyCSEPass());
23745e1a53efd40a594fa8bb59aee75bb0984770d29Rafael Espindola}
2380d9874b48d747298dcea7e4e6385b511c04a7842Rafael Espindola
2390d9874b48d747298dcea7e4e6385b511c04a7842Rafael Espindolavoid LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM) {
240f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  unwrap(PM)->add(createTypeBasedAAWrapperPass());
2410d9874b48d747298dcea7e4e6385b511c04a7842Rafael Espindola}
2420d9874b48d747298dcea7e4e6385b511c04a7842Rafael Espindola
24337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid LLVMAddScopedNoAliasAAPass(LLVMPassManagerRef PM) {
244f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  unwrap(PM)->add(createScopedNoAliasAAWrapperPass());
24537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines}
24637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
2470d9874b48d747298dcea7e4e6385b511c04a7842Rafael Espindolavoid LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM) {
248f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  unwrap(PM)->add(createBasicAAWrapperPass());
2490d9874b48d747298dcea7e4e6385b511c04a7842Rafael Espindola}
2500335a14ae771ce1793fb5401acfeb2fb59fc1c6fRafael Espindola
2510335a14ae771ce1793fb5401acfeb2fb59fc1c6fRafael Espindolavoid LLVMAddLowerExpectIntrinsicPass(LLVMPassManagerRef PM) {
2520335a14ae771ce1793fb5401acfeb2fb59fc1c6fRafael Espindola  unwrap(PM)->add(createLowerExpectIntrinsicPass());
2530335a14ae771ce1793fb5401acfeb2fb59fc1c6fRafael Espindola}
254