Scalar.cpp revision 249423
1193323Sed//===-- Scalar.cpp --------------------------------------------------------===// 2193323Sed// 3193323Sed// The LLVM Compiler Infrastructure 4193323Sed// 5193323Sed// This file is distributed under the University of Illinois Open Source 6193323Sed// License. See LICENSE.TXT for details. 7193323Sed// 8193323Sed//===----------------------------------------------------------------------===// 9193323Sed// 10239462Sdim// This file implements common infrastructure for libLLVMScalarOpts.a, which 11218893Sdim// implements several scalar transformations over the LLVM intermediate 12218893Sdim// representation, including the C bindings for that library. 13193323Sed// 14193323Sed//===----------------------------------------------------------------------===// 15193323Sed 16249423Sdim#include "llvm/Transforms/Scalar.h" 17249423Sdim#include "llvm-c/Initialization.h" 18193323Sed#include "llvm-c/Transforms/Scalar.h" 19249423Sdim#include "llvm/Analysis/Passes.h" 20249423Sdim#include "llvm/Analysis/Verifier.h" 21249423Sdim#include "llvm/IR/DataLayout.h" 22218893Sdim#include "llvm/InitializePasses.h" 23193323Sed#include "llvm/PassManager.h" 24193323Sed 25193323Sedusing namespace llvm; 26193323Sed 27239462Sdim/// initializeScalarOptsPasses - Initialize all passes linked into the 28218893Sdim/// ScalarOpts library. 29218893Sdimvoid llvm::initializeScalarOpts(PassRegistry &Registry) { 30218893Sdim initializeADCEPass(Registry); 31218893Sdim initializeBlockPlacementPass(Registry); 32218893Sdim initializeCodeGenPreparePass(Registry); 33218893Sdim initializeConstantPropagationPass(Registry); 34218893Sdim initializeCorrelatedValuePropagationPass(Registry); 35218893Sdim initializeDCEPass(Registry); 36218893Sdim initializeDeadInstEliminationPass(Registry); 37218893Sdim initializeDSEPass(Registry); 38218893Sdim initializeGVNPass(Registry); 39218893Sdim initializeEarlyCSEPass(Registry); 40218893Sdim initializeIndVarSimplifyPass(Registry); 41218893Sdim initializeJumpThreadingPass(Registry); 42218893Sdim initializeLICMPass(Registry); 43218893Sdim initializeLoopDeletionPass(Registry); 44218893Sdim initializeLoopInstSimplifyPass(Registry); 45218893Sdim initializeLoopRotatePass(Registry); 46218893Sdim initializeLoopStrengthReducePass(Registry); 47218893Sdim initializeLoopUnrollPass(Registry); 48218893Sdim initializeLoopUnswitchPass(Registry); 49218893Sdim initializeLoopIdiomRecognizePass(Registry); 50218893Sdim initializeLowerAtomicPass(Registry); 51224145Sdim initializeLowerExpectIntrinsicPass(Registry); 52218893Sdim initializeMemCpyOptPass(Registry); 53218893Sdim initializeReassociatePass(Registry); 54218893Sdim initializeRegToMemPass(Registry); 55218893Sdim initializeSCCPPass(Registry); 56218893Sdim initializeIPSCCPPass(Registry); 57243830Sdim initializeSROAPass(Registry); 58218893Sdim initializeSROA_DTPass(Registry); 59218893Sdim initializeSROA_SSAUpPass(Registry); 60218893Sdim initializeCFGSimplifyPassPass(Registry); 61218893Sdim initializeSimplifyLibCallsPass(Registry); 62218893Sdim initializeSinkingPass(Registry); 63218893Sdim initializeTailCallElimPass(Registry); 64218893Sdim} 65218893Sdim 66218893Sdimvoid LLVMInitializeScalarOpts(LLVMPassRegistryRef R) { 67218893Sdim initializeScalarOpts(*unwrap(R)); 68218893Sdim} 69218893Sdim 70193323Sedvoid LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM) { 71193323Sed unwrap(PM)->add(createAggressiveDCEPass()); 72193323Sed} 73193323Sed 74193323Sedvoid LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM) { 75193323Sed unwrap(PM)->add(createCFGSimplificationPass()); 76193323Sed} 77193323Sed 78193323Sedvoid LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM) { 79193323Sed unwrap(PM)->add(createDeadStoreEliminationPass()); 80193323Sed} 81193323Sed 82193323Sedvoid LLVMAddGVNPass(LLVMPassManagerRef PM) { 83193323Sed unwrap(PM)->add(createGVNPass()); 84193323Sed} 85193323Sed 86193323Sedvoid LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM) { 87193323Sed unwrap(PM)->add(createIndVarSimplifyPass()); 88193323Sed} 89193323Sed 90193323Sedvoid LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM) { 91193323Sed unwrap(PM)->add(createInstructionCombiningPass()); 92193323Sed} 93193323Sed 94193323Sedvoid LLVMAddJumpThreadingPass(LLVMPassManagerRef PM) { 95193323Sed unwrap(PM)->add(createJumpThreadingPass()); 96193323Sed} 97193323Sed 98193323Sedvoid LLVMAddLICMPass(LLVMPassManagerRef PM) { 99193323Sed unwrap(PM)->add(createLICMPass()); 100193323Sed} 101193323Sed 102193323Sedvoid LLVMAddLoopDeletionPass(LLVMPassManagerRef PM) { 103193323Sed unwrap(PM)->add(createLoopDeletionPass()); 104193323Sed} 105193323Sed 106221345Sdimvoid LLVMAddLoopIdiomPass(LLVMPassManagerRef PM) { 107221345Sdim unwrap(PM)->add(createLoopIdiomPass()); 108221345Sdim} 109221345Sdim 110193323Sedvoid LLVMAddLoopRotatePass(LLVMPassManagerRef PM) { 111193323Sed unwrap(PM)->add(createLoopRotatePass()); 112193323Sed} 113193323Sed 114193323Sedvoid LLVMAddLoopUnrollPass(LLVMPassManagerRef PM) { 115193323Sed unwrap(PM)->add(createLoopUnrollPass()); 116193323Sed} 117193323Sed 118193323Sedvoid LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM) { 119193323Sed unwrap(PM)->add(createLoopUnswitchPass()); 120193323Sed} 121193323Sed 122193323Sedvoid LLVMAddMemCpyOptPass(LLVMPassManagerRef PM) { 123193323Sed unwrap(PM)->add(createMemCpyOptPass()); 124193323Sed} 125193323Sed 126193323Sedvoid LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM) { 127193323Sed unwrap(PM)->add(createPromoteMemoryToRegisterPass()); 128193323Sed} 129193323Sed 130193323Sedvoid LLVMAddReassociatePass(LLVMPassManagerRef PM) { 131193323Sed unwrap(PM)->add(createReassociatePass()); 132193323Sed} 133193323Sed 134193323Sedvoid LLVMAddSCCPPass(LLVMPassManagerRef PM) { 135193323Sed unwrap(PM)->add(createSCCPPass()); 136193323Sed} 137193323Sed 138193323Sedvoid LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM) { 139193323Sed unwrap(PM)->add(createScalarReplAggregatesPass()); 140193323Sed} 141193323Sed 142221345Sdimvoid LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM) { 143221345Sdim unwrap(PM)->add(createScalarReplAggregatesPass(-1, false)); 144221345Sdim} 145221345Sdim 146205218Srdivackyvoid LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM, 147205218Srdivacky int Threshold) { 148205218Srdivacky unwrap(PM)->add(createScalarReplAggregatesPass(Threshold)); 149205218Srdivacky} 150205218Srdivacky 151193323Sedvoid LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM) { 152193323Sed unwrap(PM)->add(createSimplifyLibCallsPass()); 153193323Sed} 154193323Sed 155193323Sedvoid LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM) { 156193323Sed unwrap(PM)->add(createTailCallEliminationPass()); 157193323Sed} 158193323Sed 159193323Sedvoid LLVMAddConstantPropagationPass(LLVMPassManagerRef PM) { 160193323Sed unwrap(PM)->add(createConstantPropagationPass()); 161193323Sed} 162193323Sed 163193323Sedvoid LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM) { 164193323Sed unwrap(PM)->add(createDemoteRegisterToMemoryPass()); 165193323Sed} 166205218Srdivacky 167205218Srdivackyvoid LLVMAddVerifierPass(LLVMPassManagerRef PM) { 168205218Srdivacky unwrap(PM)->add(createVerifierPass()); 169205218Srdivacky} 170221345Sdim 171221345Sdimvoid LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM) { 172221345Sdim unwrap(PM)->add(createCorrelatedValuePropagationPass()); 173221345Sdim} 174221345Sdim 175221345Sdimvoid LLVMAddEarlyCSEPass(LLVMPassManagerRef PM) { 176221345Sdim unwrap(PM)->add(createEarlyCSEPass()); 177221345Sdim} 178221345Sdim 179221345Sdimvoid LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM) { 180221345Sdim unwrap(PM)->add(createTypeBasedAliasAnalysisPass()); 181221345Sdim} 182221345Sdim 183221345Sdimvoid LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM) { 184221345Sdim unwrap(PM)->add(createBasicAliasAnalysisPass()); 185221345Sdim} 186226633Sdim 187226633Sdimvoid LLVMAddLowerExpectIntrinsicPass(LLVMPassManagerRef PM) { 188226633Sdim unwrap(PM)->add(createLowerExpectIntrinsicPass()); 189226633Sdim} 190