Scalar.cpp revision 224145
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 initializeTailDupPass(Registry); 67218893Sdim initializeTailCallElimPass(Registry); 68218893Sdim} 69218893Sdim 70218893Sdimvoid LLVMInitializeScalarOpts(LLVMPassRegistryRef R) { 71218893Sdim initializeScalarOpts(*unwrap(R)); 72218893Sdim} 73218893Sdim 74193323Sedvoid LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM) { 75193323Sed unwrap(PM)->add(createAggressiveDCEPass()); 76193323Sed} 77193323Sed 78193323Sedvoid LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM) { 79193323Sed unwrap(PM)->add(createCFGSimplificationPass()); 80193323Sed} 81193323Sed 82193323Sedvoid LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM) { 83193323Sed unwrap(PM)->add(createDeadStoreEliminationPass()); 84193323Sed} 85193323Sed 86193323Sedvoid LLVMAddGVNPass(LLVMPassManagerRef PM) { 87193323Sed unwrap(PM)->add(createGVNPass()); 88193323Sed} 89193323Sed 90193323Sedvoid LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM) { 91193323Sed unwrap(PM)->add(createIndVarSimplifyPass()); 92193323Sed} 93193323Sed 94193323Sedvoid LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM) { 95193323Sed unwrap(PM)->add(createInstructionCombiningPass()); 96193323Sed} 97193323Sed 98193323Sedvoid LLVMAddJumpThreadingPass(LLVMPassManagerRef PM) { 99193323Sed unwrap(PM)->add(createJumpThreadingPass()); 100193323Sed} 101193323Sed 102193323Sedvoid LLVMAddLICMPass(LLVMPassManagerRef PM) { 103193323Sed unwrap(PM)->add(createLICMPass()); 104193323Sed} 105193323Sed 106193323Sedvoid LLVMAddLoopDeletionPass(LLVMPassManagerRef PM) { 107193323Sed unwrap(PM)->add(createLoopDeletionPass()); 108193323Sed} 109193323Sed 110221345Sdimvoid LLVMAddLoopIdiomPass(LLVMPassManagerRef PM) { 111221345Sdim unwrap(PM)->add(createLoopIdiomPass()); 112221345Sdim} 113221345Sdim 114193323Sedvoid LLVMAddLoopRotatePass(LLVMPassManagerRef PM) { 115193323Sed unwrap(PM)->add(createLoopRotatePass()); 116193323Sed} 117193323Sed 118193323Sedvoid LLVMAddLoopUnrollPass(LLVMPassManagerRef PM) { 119193323Sed unwrap(PM)->add(createLoopUnrollPass()); 120193323Sed} 121193323Sed 122193323Sedvoid LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM) { 123193323Sed unwrap(PM)->add(createLoopUnswitchPass()); 124193323Sed} 125193323Sed 126193323Sedvoid LLVMAddMemCpyOptPass(LLVMPassManagerRef PM) { 127193323Sed unwrap(PM)->add(createMemCpyOptPass()); 128193323Sed} 129193323Sed 130193323Sedvoid LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM) { 131193323Sed unwrap(PM)->add(createPromoteMemoryToRegisterPass()); 132193323Sed} 133193323Sed 134193323Sedvoid LLVMAddReassociatePass(LLVMPassManagerRef PM) { 135193323Sed unwrap(PM)->add(createReassociatePass()); 136193323Sed} 137193323Sed 138193323Sedvoid LLVMAddSCCPPass(LLVMPassManagerRef PM) { 139193323Sed unwrap(PM)->add(createSCCPPass()); 140193323Sed} 141193323Sed 142193323Sedvoid LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM) { 143193323Sed unwrap(PM)->add(createScalarReplAggregatesPass()); 144193323Sed} 145193323Sed 146221345Sdimvoid LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM) { 147221345Sdim unwrap(PM)->add(createScalarReplAggregatesPass(-1, false)); 148221345Sdim} 149221345Sdim 150205218Srdivackyvoid LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM, 151205218Srdivacky int Threshold) { 152205218Srdivacky unwrap(PM)->add(createScalarReplAggregatesPass(Threshold)); 153205218Srdivacky} 154205218Srdivacky 155193323Sedvoid LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM) { 156193323Sed unwrap(PM)->add(createSimplifyLibCallsPass()); 157193323Sed} 158193323Sed 159193323Sedvoid LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM) { 160193323Sed unwrap(PM)->add(createTailCallEliminationPass()); 161193323Sed} 162193323Sed 163193323Sedvoid LLVMAddConstantPropagationPass(LLVMPassManagerRef PM) { 164193323Sed unwrap(PM)->add(createConstantPropagationPass()); 165193323Sed} 166193323Sed 167193323Sedvoid LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM) { 168193323Sed unwrap(PM)->add(createDemoteRegisterToMemoryPass()); 169193323Sed} 170205218Srdivacky 171205218Srdivackyvoid LLVMAddVerifierPass(LLVMPassManagerRef PM) { 172205218Srdivacky unwrap(PM)->add(createVerifierPass()); 173205218Srdivacky} 174221345Sdim 175221345Sdimvoid LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM) { 176221345Sdim unwrap(PM)->add(createCorrelatedValuePropagationPass()); 177221345Sdim} 178221345Sdim 179221345Sdimvoid LLVMAddEarlyCSEPass(LLVMPassManagerRef PM) { 180221345Sdim unwrap(PM)->add(createEarlyCSEPass()); 181221345Sdim} 182221345Sdim 183221345Sdimvoid LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM) { 184221345Sdim unwrap(PM)->add(createTypeBasedAliasAnalysisPass()); 185221345Sdim} 186221345Sdim 187221345Sdimvoid LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM) { 188221345Sdim unwrap(PM)->add(createBasicAliasAnalysisPass()); 189221345Sdim} 190