Scalar.cpp revision 221345
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); 51218893Sdim initializeMemCpyOptPass(Registry); 52218893Sdim initializeReassociatePass(Registry); 53218893Sdim initializeRegToMemPass(Registry); 54218893Sdim initializeSCCPPass(Registry); 55218893Sdim initializeIPSCCPPass(Registry); 56218893Sdim initializeSROA_DTPass(Registry); 57218893Sdim initializeSROA_SSAUpPass(Registry); 58218893Sdim initializeCFGSimplifyPassPass(Registry); 59218893Sdim initializeSimplifyLibCallsPass(Registry); 60218893Sdim initializeSinkingPass(Registry); 61218893Sdim initializeTailDupPass(Registry); 62218893Sdim initializeTailCallElimPass(Registry); 63218893Sdim} 64218893Sdim 65218893Sdimvoid LLVMInitializeScalarOpts(LLVMPassRegistryRef R) { 66218893Sdim initializeScalarOpts(*unwrap(R)); 67218893Sdim} 68218893Sdim 69193323Sedvoid LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM) { 70193323Sed unwrap(PM)->add(createAggressiveDCEPass()); 71193323Sed} 72193323Sed 73193323Sedvoid LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM) { 74193323Sed unwrap(PM)->add(createCFGSimplificationPass()); 75193323Sed} 76193323Sed 77193323Sedvoid LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM) { 78193323Sed unwrap(PM)->add(createDeadStoreEliminationPass()); 79193323Sed} 80193323Sed 81193323Sedvoid LLVMAddGVNPass(LLVMPassManagerRef PM) { 82193323Sed unwrap(PM)->add(createGVNPass()); 83193323Sed} 84193323Sed 85193323Sedvoid LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM) { 86193323Sed unwrap(PM)->add(createIndVarSimplifyPass()); 87193323Sed} 88193323Sed 89193323Sedvoid LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM) { 90193323Sed unwrap(PM)->add(createInstructionCombiningPass()); 91193323Sed} 92193323Sed 93193323Sedvoid LLVMAddJumpThreadingPass(LLVMPassManagerRef PM) { 94193323Sed unwrap(PM)->add(createJumpThreadingPass()); 95193323Sed} 96193323Sed 97193323Sedvoid LLVMAddLICMPass(LLVMPassManagerRef PM) { 98193323Sed unwrap(PM)->add(createLICMPass()); 99193323Sed} 100193323Sed 101193323Sedvoid LLVMAddLoopDeletionPass(LLVMPassManagerRef PM) { 102193323Sed unwrap(PM)->add(createLoopDeletionPass()); 103193323Sed} 104193323Sed 105221345Sdimvoid LLVMAddLoopIdiomPass(LLVMPassManagerRef PM) { 106221345Sdim unwrap(PM)->add(createLoopIdiomPass()); 107221345Sdim} 108221345Sdim 109193323Sedvoid LLVMAddLoopRotatePass(LLVMPassManagerRef PM) { 110193323Sed unwrap(PM)->add(createLoopRotatePass()); 111193323Sed} 112193323Sed 113193323Sedvoid LLVMAddLoopUnrollPass(LLVMPassManagerRef PM) { 114193323Sed unwrap(PM)->add(createLoopUnrollPass()); 115193323Sed} 116193323Sed 117193323Sedvoid LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM) { 118193323Sed unwrap(PM)->add(createLoopUnswitchPass()); 119193323Sed} 120193323Sed 121193323Sedvoid LLVMAddMemCpyOptPass(LLVMPassManagerRef PM) { 122193323Sed unwrap(PM)->add(createMemCpyOptPass()); 123193323Sed} 124193323Sed 125193323Sedvoid LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM) { 126193323Sed unwrap(PM)->add(createPromoteMemoryToRegisterPass()); 127193323Sed} 128193323Sed 129193323Sedvoid LLVMAddReassociatePass(LLVMPassManagerRef PM) { 130193323Sed unwrap(PM)->add(createReassociatePass()); 131193323Sed} 132193323Sed 133193323Sedvoid LLVMAddSCCPPass(LLVMPassManagerRef PM) { 134193323Sed unwrap(PM)->add(createSCCPPass()); 135193323Sed} 136193323Sed 137193323Sedvoid LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM) { 138193323Sed unwrap(PM)->add(createScalarReplAggregatesPass()); 139193323Sed} 140193323Sed 141221345Sdimvoid LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM) { 142221345Sdim unwrap(PM)->add(createScalarReplAggregatesPass(-1, false)); 143221345Sdim} 144221345Sdim 145205218Srdivackyvoid LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM, 146205218Srdivacky int Threshold) { 147205218Srdivacky unwrap(PM)->add(createScalarReplAggregatesPass(Threshold)); 148205218Srdivacky} 149205218Srdivacky 150193323Sedvoid LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM) { 151193323Sed unwrap(PM)->add(createSimplifyLibCallsPass()); 152193323Sed} 153193323Sed 154193323Sedvoid LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM) { 155193323Sed unwrap(PM)->add(createTailCallEliminationPass()); 156193323Sed} 157193323Sed 158193323Sedvoid LLVMAddConstantPropagationPass(LLVMPassManagerRef PM) { 159193323Sed unwrap(PM)->add(createConstantPropagationPass()); 160193323Sed} 161193323Sed 162193323Sedvoid LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM) { 163193323Sed unwrap(PM)->add(createDemoteRegisterToMemoryPass()); 164193323Sed} 165205218Srdivacky 166205218Srdivackyvoid LLVMAddVerifierPass(LLVMPassManagerRef PM) { 167205218Srdivacky unwrap(PM)->add(createVerifierPass()); 168205218Srdivacky} 169221345Sdim 170221345Sdimvoid LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM) { 171221345Sdim unwrap(PM)->add(createCorrelatedValuePropagationPass()); 172221345Sdim} 173221345Sdim 174221345Sdimvoid LLVMAddEarlyCSEPass(LLVMPassManagerRef PM) { 175221345Sdim unwrap(PM)->add(createEarlyCSEPass()); 176221345Sdim} 177221345Sdim 178221345Sdimvoid LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM) { 179221345Sdim unwrap(PM)->add(createTypeBasedAliasAnalysisPass()); 180221345Sdim} 181221345Sdim 182221345Sdimvoid LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM) { 183221345Sdim unwrap(PM)->add(createBasicAliasAnalysisPass()); 184221345Sdim} 185