NVPTXAllocaHoisting.h revision 239310
1198892Srdivacky//===-- AllocaHoisting.h - Hosist allocas to the entry block ----*- C++ -*-===// 2198892Srdivacky// 3198892Srdivacky// The LLVM Compiler Infrastructure 4198892Srdivacky// 5198892Srdivacky// This file is distributed under the University of Illinois Open Source 6198892Srdivacky// License. See LICENSE.TXT for details. 7198892Srdivacky// 8198892Srdivacky//===----------------------------------------------------------------------===// 9198892Srdivacky// 10198892Srdivacky// Hoist the alloca instructions in the non-entry blocks to the entry blocks. 11198892Srdivacky// 12198892Srdivacky//===----------------------------------------------------------------------===// 13198892Srdivacky 14198892Srdivacky#ifndef NVPTX_ALLOCA_HOISTING_H_ 15198892Srdivacky#define NVPTX_ALLOCA_HOISTING_H_ 16198892Srdivacky 17198892Srdivacky#include "llvm/CodeGen/MachineFunctionAnalysis.h" 18198892Srdivacky#include "llvm/Pass.h" 19198892Srdivacky#include "llvm/Target/TargetData.h" 20198892Srdivacky 21198892Srdivackynamespace llvm { 22198892Srdivacky 23198892Srdivackyclass FunctionPass; 24198892Srdivackyclass Function; 25198892Srdivacky 26198892Srdivacky// Hoisting the alloca instructions in the non-entry blocks to the entry 27198892Srdivacky// block. 28198892Srdivackyclass NVPTXAllocaHoisting : public FunctionPass { 29198892Srdivackypublic: 30198892Srdivacky static char ID; // Pass ID 31198892Srdivacky NVPTXAllocaHoisting() : FunctionPass(ID) {} 32198892Srdivacky 33198892Srdivacky void getAnalysisUsage(AnalysisUsage &AU) const { 34198892Srdivacky AU.addRequired<TargetData>(); 35198892Srdivacky AU.addPreserved<MachineFunctionAnalysis>(); 36198892Srdivacky } 37198892Srdivacky 38198892Srdivacky virtual const char *getPassName() const { 39198892Srdivacky return "NVPTX specific alloca hoisting"; 40198892Srdivacky } 41198892Srdivacky 42198892Srdivacky virtual bool runOnFunction(Function &function); 43198892Srdivacky}; 44198892Srdivacky 45198892Srdivackyextern FunctionPass *createAllocaHoisting(); 46198892Srdivacky 47198892Srdivacky} // end namespace llvm 48198892Srdivacky 49198892Srdivacky#endif // NVPTX_ALLOCA_HOISTING_H_ 50198892Srdivacky