Home | History | Annotate | Download | only in Utils
      1 //===- PromoteMemToReg.h - Promote Allocas to Scalars -----------*- C++ -*-===//
      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 exposes an interface to promote alloca instructions to SSA
     11 // registers, by using the SSA construction algorithm.
     12 //
     13 //===----------------------------------------------------------------------===//
     14 
     15 #ifndef TRANSFORMS_UTILS_PROMOTEMEMTOREG_H
     16 #define TRANSFORMS_UTILS_PROMOTEMEMTOREG_H
     17 
     18 #include <vector>
     19 
     20 namespace llvm {
     21 
     22 class AllocaInst;
     23 class DominatorTree;
     24 class DominanceFrontier;
     25 class AliasSetTracker;
     26 
     27 /// isAllocaPromotable - Return true if this alloca is legal for promotion.
     28 /// This is true if there are only loads and stores to the alloca...
     29 ///
     30 bool isAllocaPromotable(const AllocaInst *AI);
     31 
     32 /// PromoteMemToReg - Promote the specified list of alloca instructions into
     33 /// scalar registers, inserting PHI nodes as appropriate.  This function makes
     34 /// use of DominanceFrontier information.  This function does not modify the CFG
     35 /// of the function at all.  All allocas must be from the same function.
     36 ///
     37 /// If AST is specified, the specified tracker is updated to reflect changes
     38 /// made to the IR.
     39 ///
     40 void PromoteMemToReg(const std::vector<AllocaInst*> &Allocas,
     41                      DominatorTree &DT, AliasSetTracker *AST = 0);
     42 
     43 } // End llvm namespace
     44 
     45 #endif
     46