mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-21 00:32:23 +00:00
6c1fa7caae
However, opt -O2 doesn't run mem2reg directly so nobody noticed until r188146 when SROA started sending more things directly down the PromoteMemToReg path. In order to revert r187191, I also revert dependent revisions r187296, r187322 and r188146. Fixes PR16867. Does not add the testcases from that PR, but both of them should get added for both mem2reg and sroa when this revert gets unreverted. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188327 91177308-0d34-0410-b5e6-96231b3b80d8
49 lines
1.6 KiB
C++
49 lines
1.6 KiB
C++
//===- 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 LLVM_TRANSFORMS_UTILS_PROMOTEMEMTOREG_H
|
|
#define LLVM_TRANSFORMS_UTILS_PROMOTEMEMTOREG_H
|
|
|
|
#include "llvm/ADT/ArrayRef.h"
|
|
|
|
namespace llvm {
|
|
|
|
class AllocaInst;
|
|
class DominatorTree;
|
|
class AliasSetTracker;
|
|
|
|
/// \brief 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);
|
|
|
|
/// \brief 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(ArrayRef<AllocaInst *> Allocas, DominatorTree &DT,
|
|
AliasSetTracker *AST = 0);
|
|
|
|
} // End llvm namespace
|
|
|
|
#endif
|