| //===- PromoteMemToReg.h - Promote Allocas to Scalars -----------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file exposes an interface to promote alloca instructions to SSA |
| // registers, by using the SSA construction algorithm. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef TRANSFORMS_UTILS_PROMOTEMEMTOREG_H |
| #define TRANSFORMS_UTILS_PROMOTEMEMTOREG_H |
| |
| #include <vector> |
| |
| namespace llvm { |
| |
| class AllocaInst; |
| class DominatorTree; |
| class DominanceFrontier; |
| class AliasSetTracker; |
| |
| /// isAllocaPromotable - Return true if this alloca is legal for promotion. |
| /// This is true if there are only loads and stores to the alloca... |
| /// |
| bool isAllocaPromotable(const AllocaInst *AI); |
| |
| /// PromoteMemToReg - Promote the specified list of alloca instructions into |
| /// scalar registers, inserting PHI nodes as appropriate. This function makes |
| /// use of DominanceFrontier information. This function does not modify the CFG |
| /// of the function at all. All allocas must be from the same function. |
| /// |
| /// If AST is specified, the specified tracker is updated to reflect changes |
| /// made to the IR. |
| /// |
| void PromoteMemToReg(const std::vector<AllocaInst*> &Allocas, |
| DominatorTree &DT, AliasSetTracker *AST = 0); |
| |
| } // End llvm namespace |
| |
| #endif |