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