1 //===- PromoteMemToReg.h - Promote Allocas to Scalars -----------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file exposes an interface to promote alloca instructions to SSA 10 // registers, by using the SSA construction algorithm. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_TRANSFORMS_UTILS_PROMOTEMEMTOREG_H 15 #define LLVM_TRANSFORMS_UTILS_PROMOTEMEMTOREG_H 16 17 namespace llvm { 18 19 template <typename T> class ArrayRef; 20 class AllocaInst; 21 class DominatorTree; 22 class AssumptionCache; 23 24 /// Return true if this alloca is legal for promotion. 25 /// 26 /// This is true if there are only loads, stores, and lifetime markers 27 /// (transitively) using this alloca. This also enforces that there is only 28 /// ever one layer of bitcasts or GEPs between the alloca and the lifetime 29 /// markers. 30 bool isAllocaPromotable(const AllocaInst *AI); 31 32 /// Promote the specified list of alloca instructions into scalar 33 /// registers, inserting PHI nodes as appropriate. 34 /// 35 /// This function makes use of DominanceFrontier information. This function 36 /// does not modify the CFG of the function at all. All allocas must be from 37 /// the same function. 38 /// 39 void PromoteMemToReg(ArrayRef<AllocaInst *> Allocas, DominatorTree &DT, 40 AssumptionCache *AC = nullptr); 41 42 } // End llvm namespace 43 44 #endif 45