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
20namespace llvm {
21
22class AllocaInst;
23class DominatorTree;
24class AliasSetTracker;
25
26/// isAllocaPromotable - Return true if this alloca is legal for promotion.
27/// This is true if there are only loads and stores to the alloca...
28///
29bool isAllocaPromotable(const AllocaInst *AI);
30
31/// PromoteMemToReg - Promote the specified list of alloca instructions into
32/// scalar registers, inserting PHI nodes as appropriate.  This function makes
33/// use of DominanceFrontier information.  This function does not modify the CFG
34/// of the function at all.  All allocas must be from the same function.
35///
36/// If AST is specified, the specified tracker is updated to reflect changes
37/// made to the IR.
38///
39void PromoteMemToReg(const std::vector<AllocaInst*> &Allocas,
40                     DominatorTree &DT, AliasSetTracker *AST = 0);
41
42} // End llvm namespace
43
44#endif
45