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