45 lines
1.6 KiB
C
45 lines
1.6 KiB
C
|
//===- PromoteMemToReg.h - Promote Allocas to Scalars -----------*- C++ -*-===//
|
||
|
//
|
||
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||
|
// See https://llvm.org/LICENSE.txt for license information.
|
||
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
//
|
||
|
// This file exposes an interface to promote alloca instructions to SSA
|
||
|
// registers, by using the SSA construction algorithm.
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
|
||
|
#ifndef LLVM_TRANSFORMS_UTILS_PROMOTEMEMTOREG_H
|
||
|
#define LLVM_TRANSFORMS_UTILS_PROMOTEMEMTOREG_H
|
||
|
|
||
|
namespace llvm {
|
||
|
|
||
|
template <typename T> class ArrayRef;
|
||
|
class AllocaInst;
|
||
|
class DominatorTree;
|
||
|
class AssumptionCache;
|
||
|
|
||
|
/// Return true if this alloca is legal for promotion.
|
||
|
///
|
||
|
/// This is true if there are only loads, stores, and lifetime markers
|
||
|
/// (transitively) using this alloca. This also enforces that there is only
|
||
|
/// ever one layer of bitcasts or GEPs between the alloca and the lifetime
|
||
|
/// markers.
|
||
|
bool isAllocaPromotable(const AllocaInst *AI);
|
||
|
|
||
|
/// 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.
|
||
|
///
|
||
|
void PromoteMemToReg(ArrayRef<AllocaInst *> Allocas, DominatorTree &DT,
|
||
|
AssumptionCache *AC = nullptr);
|
||
|
|
||
|
} // End llvm namespace
|
||
|
|
||
|
#endif
|