Home | History | Annotate | Download | only in Scalar
      1 //===-- Scalar.cpp --------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file implements common infrastructure for libLLVMScalarOpts.a, which
     11 // implements several scalar transformations over the LLVM intermediate
     12 // representation, including the C bindings for that library.
     13 //
     14 //===----------------------------------------------------------------------===//
     15 
     16 #include "llvm/Transforms/Scalar.h"
     17 #include "llvm-c/Initialization.h"
     18 #include "llvm-c/Transforms/Scalar.h"
     19 #include "llvm/Analysis/Passes.h"
     20 #include "llvm/IR/DataLayout.h"
     21 #include "llvm/IR/Verifier.h"
     22 #include "llvm/InitializePasses.h"
     23 #include "llvm/PassManager.h"
     24 
     25 using namespace llvm;
     26 
     27 /// initializeScalarOptsPasses - Initialize all passes linked into the
     28 /// ScalarOpts library.
     29 void llvm::initializeScalarOpts(PassRegistry &Registry) {
     30   initializeADCEPass(Registry);
     31   initializeSampleProfileLoaderPass(Registry);
     32   initializeConstantHoistingPass(Registry);
     33   initializeConstantPropagationPass(Registry);
     34   initializeCorrelatedValuePropagationPass(Registry);
     35   initializeDCEPass(Registry);
     36   initializeDeadInstEliminationPass(Registry);
     37   initializeScalarizerPass(Registry);
     38   initializeDSEPass(Registry);
     39   initializeGVNPass(Registry);
     40   initializeEarlyCSEPass(Registry);
     41   initializeIndVarSimplifyPass(Registry);
     42   initializeJumpThreadingPass(Registry);
     43   initializeLICMPass(Registry);
     44   initializeLoopDeletionPass(Registry);
     45   initializeLoopInstSimplifyPass(Registry);
     46   initializeLoopRotatePass(Registry);
     47   initializeLoopStrengthReducePass(Registry);
     48   initializeLoopRerollPass(Registry);
     49   initializeLoopUnrollPass(Registry);
     50   initializeLoopUnswitchPass(Registry);
     51   initializeLoopIdiomRecognizePass(Registry);
     52   initializeLowerAtomicPass(Registry);
     53   initializeLowerExpectIntrinsicPass(Registry);
     54   initializeMemCpyOptPass(Registry);
     55   initializePartiallyInlineLibCallsPass(Registry);
     56   initializeReassociatePass(Registry);
     57   initializeRegToMemPass(Registry);
     58   initializeSCCPPass(Registry);
     59   initializeIPSCCPPass(Registry);
     60   initializeSROAPass(Registry);
     61   initializeSROA_DTPass(Registry);
     62   initializeSROA_SSAUpPass(Registry);
     63   initializeCFGSimplifyPassPass(Registry);
     64   initializeStructurizeCFGPass(Registry);
     65   initializeSinkingPass(Registry);
     66   initializeTailCallElimPass(Registry);
     67   initializeSeparateConstOffsetFromGEPPass(Registry);
     68   initializeLoadCombinePass(Registry);
     69 }
     70 
     71 void LLVMInitializeScalarOpts(LLVMPassRegistryRef R) {
     72   initializeScalarOpts(*unwrap(R));
     73 }
     74 
     75 void LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM) {
     76   unwrap(PM)->add(createAggressiveDCEPass());
     77 }
     78 
     79 void LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM) {
     80   unwrap(PM)->add(createCFGSimplificationPass());
     81 }
     82 
     83 void LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM) {
     84   unwrap(PM)->add(createDeadStoreEliminationPass());
     85 }
     86 
     87 void LLVMAddScalarizerPass(LLVMPassManagerRef PM) {
     88   unwrap(PM)->add(createScalarizerPass());
     89 }
     90 
     91 void LLVMAddGVNPass(LLVMPassManagerRef PM) {
     92   unwrap(PM)->add(createGVNPass());
     93 }
     94 
     95 void LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM) {
     96   unwrap(PM)->add(createIndVarSimplifyPass());
     97 }
     98 
     99 void LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM) {
    100   unwrap(PM)->add(createInstructionCombiningPass());
    101 }
    102 
    103 void LLVMAddJumpThreadingPass(LLVMPassManagerRef PM) {
    104   unwrap(PM)->add(createJumpThreadingPass());
    105 }
    106 
    107 void LLVMAddLICMPass(LLVMPassManagerRef PM) {
    108   unwrap(PM)->add(createLICMPass());
    109 }
    110 
    111 void LLVMAddLoopDeletionPass(LLVMPassManagerRef PM) {
    112   unwrap(PM)->add(createLoopDeletionPass());
    113 }
    114 
    115 void LLVMAddLoopIdiomPass(LLVMPassManagerRef PM) {
    116   unwrap(PM)->add(createLoopIdiomPass());
    117 }
    118 
    119 void LLVMAddLoopRotatePass(LLVMPassManagerRef PM) {
    120   unwrap(PM)->add(createLoopRotatePass());
    121 }
    122 
    123 void LLVMAddLoopRerollPass(LLVMPassManagerRef PM) {
    124   unwrap(PM)->add(createLoopRerollPass());
    125 }
    126 
    127 void LLVMAddLoopUnrollPass(LLVMPassManagerRef PM) {
    128   unwrap(PM)->add(createLoopUnrollPass());
    129 }
    130 
    131 void LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM) {
    132   unwrap(PM)->add(createLoopUnswitchPass());
    133 }
    134 
    135 void LLVMAddMemCpyOptPass(LLVMPassManagerRef PM) {
    136   unwrap(PM)->add(createMemCpyOptPass());
    137 }
    138 
    139 void LLVMAddPartiallyInlineLibCallsPass(LLVMPassManagerRef PM) {
    140   unwrap(PM)->add(createPartiallyInlineLibCallsPass());
    141 }
    142 
    143 void LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM) {
    144   unwrap(PM)->add(createPromoteMemoryToRegisterPass());
    145 }
    146 
    147 void LLVMAddReassociatePass(LLVMPassManagerRef PM) {
    148   unwrap(PM)->add(createReassociatePass());
    149 }
    150 
    151 void LLVMAddSCCPPass(LLVMPassManagerRef PM) {
    152   unwrap(PM)->add(createSCCPPass());
    153 }
    154 
    155 void LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM) {
    156   unwrap(PM)->add(createScalarReplAggregatesPass());
    157 }
    158 
    159 void LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM) {
    160   unwrap(PM)->add(createScalarReplAggregatesPass(-1, false));
    161 }
    162 
    163 void LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM,
    164                                                   int Threshold) {
    165   unwrap(PM)->add(createScalarReplAggregatesPass(Threshold));
    166 }
    167 
    168 void LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM) {
    169   // NOTE: The simplify-libcalls pass has been removed.
    170 }
    171 
    172 void LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM) {
    173   unwrap(PM)->add(createTailCallEliminationPass());
    174 }
    175 
    176 void LLVMAddConstantPropagationPass(LLVMPassManagerRef PM) {
    177   unwrap(PM)->add(createConstantPropagationPass());
    178 }
    179 
    180 void LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM) {
    181   unwrap(PM)->add(createDemoteRegisterToMemoryPass());
    182 }
    183 
    184 void LLVMAddVerifierPass(LLVMPassManagerRef PM) {
    185   unwrap(PM)->add(createVerifierPass());
    186   // FIXME: should this also add createDebugInfoVerifierPass()?
    187 }
    188 
    189 void LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM) {
    190   unwrap(PM)->add(createCorrelatedValuePropagationPass());
    191 }
    192 
    193 void LLVMAddEarlyCSEPass(LLVMPassManagerRef PM) {
    194   unwrap(PM)->add(createEarlyCSEPass());
    195 }
    196 
    197 void LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM) {
    198   unwrap(PM)->add(createTypeBasedAliasAnalysisPass());
    199 }
    200 
    201 void LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM) {
    202   unwrap(PM)->add(createBasicAliasAnalysisPass());
    203 }
    204 
    205 void LLVMAddLowerExpectIntrinsicPass(LLVMPassManagerRef PM) {
    206   unwrap(PM)->add(createLowerExpectIntrinsicPass());
    207 }
    208