Scalar.cpp revision 226633
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// 10218893Sdim// 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 16193323Sed#include "llvm-c/Transforms/Scalar.h" 17218893Sdim#include "llvm-c/Initialization.h" 18218893Sdim#include "llvm/InitializePasses.h" 19193323Sed#include "llvm/PassManager.h" 20221345Sdim#include "llvm/Analysis/Passes.h" 21205218Srdivacky#include "llvm/Analysis/Verifier.h" 22205218Srdivacky#include "llvm/Target/TargetData.h" 23193323Sed#include "llvm/Transforms/Scalar.h" 24193323Sed 25193323Sedusing namespace llvm; 26193323Sed 27218893Sdim/// 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); 53224145Sdim initializeObjCARCAliasAnalysisPass(Registry); 54224145Sdim initializeObjCARCExpandPass(Registry); 55224145Sdim initializeObjCARCContractPass(Registry); 56224145Sdim initializeObjCARCOptPass(Registry); 57218893Sdim initializeReassociatePass(Registry); 58218893Sdim initializeRegToMemPass(Registry); 59218893Sdim initializeSCCPPass(Registry); 60218893Sdim initializeIPSCCPPass(Registry); 61218893Sdim initializeSROA_DTPass(Registry); 62218893Sdim initializeSROA_SSAUpPass(Registry); 63218893Sdim initializeCFGSimplifyPassPass(Registry); 64218893Sdim initializeSimplifyLibCallsPass(Registry); 65218893Sdim initializeSinkingPass(Registry); 66218893Sdim initializeTailCallElimPass(Registry); 67218893Sdim} 68218893Sdim 69218893Sdimvoid LLVMInitializeScalarOpts(LLVMPassRegistryRef R) { 70218893Sdim initializeScalarOpts(*unwrap(R)); 71218893Sdim} 72218893Sdim 73193323Sedvoid LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM) { 74193323Sed unwrap(PM)->add(createAggressiveDCEPass()); 75193323Sed} 76193323Sed 77193323Sedvoid LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM) { 78193323Sed unwrap(PM)->add(createCFGSimplificationPass()); 79193323Sed} 80193323Sed 81193323Sedvoid LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM) { 82193323Sed unwrap(PM)->add(createDeadStoreEliminationPass()); 83193323Sed} 84193323Sed 85193323Sedvoid LLVMAddGVNPass(LLVMPassManagerRef PM) { 86193323Sed unwrap(PM)->add(createGVNPass()); 87193323Sed} 88193323Sed 89193323Sedvoid LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM) { 90193323Sed unwrap(PM)->add(createIndVarSimplifyPass()); 91193323Sed} 92193323Sed 93193323Sedvoid LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM) { 94193323Sed unwrap(PM)->add(createInstructionCombiningPass()); 95193323Sed} 96193323Sed 97193323Sedvoid LLVMAddJumpThreadingPass(LLVMPassManagerRef PM) { 98193323Sed unwrap(PM)->add(createJumpThreadingPass()); 99193323Sed} 100193323Sed 101193323Sedvoid LLVMAddLICMPass(LLVMPassManagerRef PM) { 102193323Sed unwrap(PM)->add(createLICMPass()); 103193323Sed} 104193323Sed 105193323Sedvoid LLVMAddLoopDeletionPass(LLVMPassManagerRef PM) { 106193323Sed unwrap(PM)->add(createLoopDeletionPass()); 107193323Sed} 108193323Sed 109221345Sdimvoid LLVMAddLoopIdiomPass(LLVMPassManagerRef PM) { 110221345Sdim unwrap(PM)->add(createLoopIdiomPass()); 111221345Sdim} 112221345Sdim 113193323Sedvoid LLVMAddLoopRotatePass(LLVMPassManagerRef PM) { 114193323Sed unwrap(PM)->add(createLoopRotatePass()); 115193323Sed} 116193323Sed 117193323Sedvoid LLVMAddLoopUnrollPass(LLVMPassManagerRef PM) { 118193323Sed unwrap(PM)->add(createLoopUnrollPass()); 119193323Sed} 120193323Sed 121193323Sedvoid LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM) { 122193323Sed unwrap(PM)->add(createLoopUnswitchPass()); 123193323Sed} 124193323Sed 125193323Sedvoid LLVMAddMemCpyOptPass(LLVMPassManagerRef PM) { 126193323Sed unwrap(PM)->add(createMemCpyOptPass()); 127193323Sed} 128193323Sed 129193323Sedvoid LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM) { 130193323Sed unwrap(PM)->add(createPromoteMemoryToRegisterPass()); 131193323Sed} 132193323Sed 133193323Sedvoid LLVMAddReassociatePass(LLVMPassManagerRef PM) { 134193323Sed unwrap(PM)->add(createReassociatePass()); 135193323Sed} 136193323Sed 137193323Sedvoid LLVMAddSCCPPass(LLVMPassManagerRef PM) { 138193323Sed unwrap(PM)->add(createSCCPPass()); 139193323Sed} 140193323Sed 141193323Sedvoid LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM) { 142193323Sed unwrap(PM)->add(createScalarReplAggregatesPass()); 143193323Sed} 144193323Sed 145221345Sdimvoid LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM) { 146221345Sdim unwrap(PM)->add(createScalarReplAggregatesPass(-1, false)); 147221345Sdim} 148221345Sdim 149205218Srdivackyvoid LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM, 150205218Srdivacky int Threshold) { 151205218Srdivacky unwrap(PM)->add(createScalarReplAggregatesPass(Threshold)); 152205218Srdivacky} 153205218Srdivacky 154193323Sedvoid LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM) { 155193323Sed unwrap(PM)->add(createSimplifyLibCallsPass()); 156193323Sed} 157193323Sed 158193323Sedvoid LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM) { 159193323Sed unwrap(PM)->add(createTailCallEliminationPass()); 160193323Sed} 161193323Sed 162193323Sedvoid LLVMAddConstantPropagationPass(LLVMPassManagerRef PM) { 163193323Sed unwrap(PM)->add(createConstantPropagationPass()); 164193323Sed} 165193323Sed 166193323Sedvoid LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM) { 167193323Sed unwrap(PM)->add(createDemoteRegisterToMemoryPass()); 168193323Sed} 169205218Srdivacky 170205218Srdivackyvoid LLVMAddVerifierPass(LLVMPassManagerRef PM) { 171205218Srdivacky unwrap(PM)->add(createVerifierPass()); 172205218Srdivacky} 173221345Sdim 174221345Sdimvoid LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM) { 175221345Sdim unwrap(PM)->add(createCorrelatedValuePropagationPass()); 176221345Sdim} 177221345Sdim 178221345Sdimvoid LLVMAddEarlyCSEPass(LLVMPassManagerRef PM) { 179221345Sdim unwrap(PM)->add(createEarlyCSEPass()); 180221345Sdim} 181221345Sdim 182221345Sdimvoid LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM) { 183221345Sdim unwrap(PM)->add(createTypeBasedAliasAnalysisPass()); 184221345Sdim} 185221345Sdim 186221345Sdimvoid LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM) { 187221345Sdim unwrap(PM)->add(createBasicAliasAnalysisPass()); 188221345Sdim} 189226633Sdim 190226633Sdimvoid LLVMAddLowerExpectIntrinsicPass(LLVMPassManagerRef PM) { 191226633Sdim unwrap(PM)->add(createLowerExpectIntrinsicPass()); 192226633Sdim} 193