PromoteMemToReg.h revision 263508
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 LLVM_TRANSFORMS_UTILS_PROMOTEMEMTOREG_H 16#define LLVM_TRANSFORMS_UTILS_PROMOTEMEMTOREG_H 17 18#include "llvm/ADT/ArrayRef.h" 19 20namespace llvm { 21 22class AllocaInst; 23class DominatorTree; 24class AliasSetTracker; 25 26/// \brief Return true if this alloca is legal for promotion. 27/// 28/// This is true if there are only loads, stores, and lifetime markers 29/// (transitively) using this alloca. This also enforces that there is only 30/// ever one layer of bitcasts or GEPs between the alloca and the lifetime 31/// markers. 32bool isAllocaPromotable(const AllocaInst *AI); 33 34/// \brief Promote the specified list of alloca instructions into scalar 35/// registers, inserting PHI nodes as appropriate. 36/// 37/// This function makes use of DominanceFrontier information. This function 38/// does not modify the CFG of the function at all. All allocas must be from 39/// the same function. 40/// 41/// If AST is specified, the specified tracker is updated to reflect changes 42/// made to the IR. 43void PromoteMemToReg(ArrayRef<AllocaInst *> Allocas, DominatorTree &DT, 44 AliasSetTracker *AST = 0); 45 46} // End llvm namespace 47 48#endif 49