Scalar.cpp revision 263508
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); 31263508Sdim initializeSampleProfileLoaderPass(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); 47263508Sdim initializeLoopRerollPass(Registry); 48218893Sdim initializeLoopUnrollPass(Registry); 49218893Sdim initializeLoopUnswitchPass(Registry); 50218893Sdim initializeLoopIdiomRecognizePass(Registry); 51218893Sdim initializeLowerAtomicPass(Registry); 52224145Sdim initializeLowerExpectIntrinsicPass(Registry); 53218893Sdim initializeMemCpyOptPass(Registry); 54263508Sdim initializePartiallyInlineLibCallsPass(Registry); 55218893Sdim initializeReassociatePass(Registry); 56218893Sdim initializeRegToMemPass(Registry); 57218893Sdim initializeSCCPPass(Registry); 58218893Sdim initializeIPSCCPPass(Registry); 59243830Sdim initializeSROAPass(Registry); 60218893Sdim initializeSROA_DTPass(Registry); 61218893Sdim initializeSROA_SSAUpPass(Registry); 62218893Sdim initializeCFGSimplifyPassPass(Registry); 63263508Sdim initializeStructurizeCFGPass(Registry); 64218893Sdim initializeSinkingPass(Registry); 65218893Sdim initializeTailCallElimPass(Registry); 66218893Sdim} 67218893Sdim 68218893Sdimvoid LLVMInitializeScalarOpts(LLVMPassRegistryRef R) { 69218893Sdim initializeScalarOpts(*unwrap(R)); 70218893Sdim} 71218893Sdim 72193323Sedvoid LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM) { 73193323Sed unwrap(PM)->add(createAggressiveDCEPass()); 74193323Sed} 75193323Sed 76193323Sedvoid LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM) { 77193323Sed unwrap(PM)->add(createCFGSimplificationPass()); 78193323Sed} 79193323Sed 80193323Sedvoid LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM) { 81193323Sed unwrap(PM)->add(createDeadStoreEliminationPass()); 82193323Sed} 83193323Sed 84193323Sedvoid LLVMAddGVNPass(LLVMPassManagerRef PM) { 85193323Sed unwrap(PM)->add(createGVNPass()); 86193323Sed} 87193323Sed 88193323Sedvoid LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM) { 89193323Sed unwrap(PM)->add(createIndVarSimplifyPass()); 90193323Sed} 91193323Sed 92193323Sedvoid LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM) { 93193323Sed unwrap(PM)->add(createInstructionCombiningPass()); 94193323Sed} 95193323Sed 96193323Sedvoid LLVMAddJumpThreadingPass(LLVMPassManagerRef PM) { 97193323Sed unwrap(PM)->add(createJumpThreadingPass()); 98193323Sed} 99193323Sed 100193323Sedvoid LLVMAddLICMPass(LLVMPassManagerRef PM) { 101193323Sed unwrap(PM)->add(createLICMPass()); 102193323Sed} 103193323Sed 104193323Sedvoid LLVMAddLoopDeletionPass(LLVMPassManagerRef PM) { 105193323Sed unwrap(PM)->add(createLoopDeletionPass()); 106193323Sed} 107193323Sed 108221345Sdimvoid LLVMAddLoopIdiomPass(LLVMPassManagerRef PM) { 109221345Sdim unwrap(PM)->add(createLoopIdiomPass()); 110221345Sdim} 111221345Sdim 112193323Sedvoid LLVMAddLoopRotatePass(LLVMPassManagerRef PM) { 113193323Sed unwrap(PM)->add(createLoopRotatePass()); 114193323Sed} 115193323Sed 116263508Sdimvoid LLVMAddLoopRerollPass(LLVMPassManagerRef PM) { 117263508Sdim unwrap(PM)->add(createLoopRerollPass()); 118263508Sdim} 119263508Sdim 120193323Sedvoid LLVMAddLoopUnrollPass(LLVMPassManagerRef PM) { 121193323Sed unwrap(PM)->add(createLoopUnrollPass()); 122193323Sed} 123193323Sed 124193323Sedvoid LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM) { 125193323Sed unwrap(PM)->add(createLoopUnswitchPass()); 126193323Sed} 127193323Sed 128193323Sedvoid LLVMAddMemCpyOptPass(LLVMPassManagerRef PM) { 129193323Sed unwrap(PM)->add(createMemCpyOptPass()); 130193323Sed} 131193323Sed 132263508Sdimvoid LLVMAddPartiallyInlineLibCallsPass(LLVMPassManagerRef PM) { 133263508Sdim unwrap(PM)->add(createPartiallyInlineLibCallsPass()); 134263508Sdim} 135263508Sdim 136193323Sedvoid LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM) { 137193323Sed unwrap(PM)->add(createPromoteMemoryToRegisterPass()); 138193323Sed} 139193323Sed 140193323Sedvoid LLVMAddReassociatePass(LLVMPassManagerRef PM) { 141193323Sed unwrap(PM)->add(createReassociatePass()); 142193323Sed} 143193323Sed 144193323Sedvoid LLVMAddSCCPPass(LLVMPassManagerRef PM) { 145193323Sed unwrap(PM)->add(createSCCPPass()); 146193323Sed} 147193323Sed 148193323Sedvoid LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM) { 149193323Sed unwrap(PM)->add(createScalarReplAggregatesPass()); 150193323Sed} 151193323Sed 152221345Sdimvoid LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM) { 153221345Sdim unwrap(PM)->add(createScalarReplAggregatesPass(-1, false)); 154221345Sdim} 155221345Sdim 156205218Srdivackyvoid LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM, 157205218Srdivacky int Threshold) { 158205218Srdivacky unwrap(PM)->add(createScalarReplAggregatesPass(Threshold)); 159205218Srdivacky} 160205218Srdivacky 161193323Sedvoid LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM) { 162263508Sdim // NOTE: The simplify-libcalls pass has been removed. 163193323Sed} 164193323Sed 165193323Sedvoid LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM) { 166193323Sed unwrap(PM)->add(createTailCallEliminationPass()); 167193323Sed} 168193323Sed 169193323Sedvoid LLVMAddConstantPropagationPass(LLVMPassManagerRef PM) { 170193323Sed unwrap(PM)->add(createConstantPropagationPass()); 171193323Sed} 172193323Sed 173193323Sedvoid LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM) { 174193323Sed unwrap(PM)->add(createDemoteRegisterToMemoryPass()); 175193323Sed} 176205218Srdivacky 177205218Srdivackyvoid LLVMAddVerifierPass(LLVMPassManagerRef PM) { 178205218Srdivacky unwrap(PM)->add(createVerifierPass()); 179205218Srdivacky} 180221345Sdim 181221345Sdimvoid LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM) { 182221345Sdim unwrap(PM)->add(createCorrelatedValuePropagationPass()); 183221345Sdim} 184221345Sdim 185221345Sdimvoid LLVMAddEarlyCSEPass(LLVMPassManagerRef PM) { 186221345Sdim unwrap(PM)->add(createEarlyCSEPass()); 187221345Sdim} 188221345Sdim 189221345Sdimvoid LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM) { 190221345Sdim unwrap(PM)->add(createTypeBasedAliasAnalysisPass()); 191221345Sdim} 192221345Sdim 193221345Sdimvoid LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM) { 194221345Sdim unwrap(PM)->add(createBasicAliasAnalysisPass()); 195221345Sdim} 196226633Sdim 197226633Sdimvoid LLVMAddLowerExpectIntrinsicPass(LLVMPassManagerRef PM) { 198226633Sdim unwrap(PM)->add(createLowerExpectIntrinsicPass()); 199226633Sdim} 200