aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/Transforms/Utils/DemoteRegToStack.h
blob: 915a19f1125cd2145fe3225b10ae7089214698a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//===- DemoteRegToStack.h - Move a virtual reg. to stack --------*- C++ -*-===//
// This file provides the function:
//     AllocaInst* DemoteRegToStack(Instruction& X):
//
// This function takes a virtual register computed by an
// Instruction& X and replaces it with a slot in the stack frame,
// allocated via alloca.  It has to:
// (1) Identify all Phi operations that have X as an operand and
//     transitively other Phis that use such Phis; 
// (2) Store all values merged with X via Phi operations to the stack slot;
// (3) Load the value from the stack slot just before any use of X or any
//     of the Phis that were eliminated; and
// (4) Delete X and all the Phis, which should all now be dead.
//
// Returns the pointer to the alloca inserted to create a stack slot for X.
//---------------------------------------------------------------------------- 

class Instruction;
class AllocaInst;

extern AllocaInst* DemoteRegToStack(Instruction& X);