1 //===- DemoteRegToStack.cpp - Move a virtual register to the stack --------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "llvm/ADT/DenseMap.h"
11 #include "llvm/Analysis/CFG.h"
12 #include "llvm/IR/Function.h"
13 #include "llvm/IR/Instructions.h"
14 #include "llvm/IR/Type.h"
15 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
16 #include "llvm/Transforms/Utils/Local.h"
19 /// DemoteRegToStack - This function takes a virtual register computed by an
20 /// Instruction and replaces it with a slot in the stack frame, allocated via
21 /// alloca. This allows the CFG to be changed around without fear of
22 /// invalidating the SSA information for the value. It returns the pointer to
23 /// the alloca inserted to create a stack slot for I.
24 AllocaInst
*llvm::DemoteRegToStack(Instruction
&I
, bool VolatileLoads
,
25 Instruction
*AllocaPoint
) {
31 Function
*F
= I
.getParent()->getParent();
32 const DataLayout
&DL
= F
->getParent()->getDataLayout();
34 // Create a stack slot to hold the value.
37 Slot
= new AllocaInst(I
.getType(), DL
.getAllocaAddrSpace(), nullptr,
38 I
.getName()+".reg2mem", AllocaPoint
);
40 Slot
= new AllocaInst(I
.getType(), DL
.getAllocaAddrSpace(), nullptr,
41 I
.getName() + ".reg2mem", &F
->getEntryBlock().front());
44 // We cannot demote invoke instructions to the stack if their normal edge
45 // is critical. Therefore, split the critical edge and create a basic block
46 // into which the store can be inserted.
47 if (InvokeInst
*II
= dyn_cast
<InvokeInst
>(&I
)) {
48 if (!II
->getNormalDest()->getSinglePredecessor()) {
49 unsigned SuccNum
= GetSuccessorNumber(II
->getParent(), II
->getNormalDest());
50 assert(isCriticalEdge(II
, SuccNum
) && "Expected a critical edge!");
51 BasicBlock
*BB
= SplitCriticalEdge(II
, SuccNum
);
52 assert(BB
&& "Unable to split critical edge.");
57 // Change all of the users of the instruction to read from the stack slot.
58 while (!I
.use_empty()) {
59 Instruction
*U
= cast
<Instruction
>(I
.user_back());
60 if (PHINode
*PN
= dyn_cast
<PHINode
>(U
)) {
61 // If this is a PHI node, we can't insert a load of the value before the
62 // use. Instead insert the load in the predecessor block corresponding
63 // to the incoming value.
65 // Note that if there are multiple edges from a basic block to this PHI
66 // node that we cannot have multiple loads. The problem is that the
67 // resulting PHI node will have multiple values (from each load) coming in
68 // from the same block, which is illegal SSA form. For this reason, we
69 // keep track of and reuse loads we insert.
70 DenseMap
<BasicBlock
*, Value
*> Loads
;
71 for (unsigned i
= 0, e
= PN
->getNumIncomingValues(); i
!= e
; ++i
)
72 if (PN
->getIncomingValue(i
) == &I
) {
73 Value
*&V
= Loads
[PN
->getIncomingBlock(i
)];
75 // Insert the load into the predecessor block
76 V
= new LoadInst(Slot
, I
.getName()+".reload", VolatileLoads
,
77 PN
->getIncomingBlock(i
)->getTerminator());
79 PN
->setIncomingValue(i
, V
);
83 // If this is a normal instruction, just insert a load.
84 Value
*V
= new LoadInst(Slot
, I
.getName()+".reload", VolatileLoads
, U
);
85 U
->replaceUsesOfWith(&I
, V
);
89 // Insert stores of the computed value into the stack slot. We have to be
90 // careful if I is an invoke instruction, because we can't insert the store
91 // AFTER the terminator instruction.
92 BasicBlock::iterator InsertPt
;
93 if (!isa
<TerminatorInst
>(I
)) {
94 InsertPt
= ++I
.getIterator();
95 for (; isa
<PHINode
>(InsertPt
) || InsertPt
->isEHPad(); ++InsertPt
)
96 /* empty */; // Don't insert before PHI nodes or landingpad instrs.
98 InvokeInst
&II
= cast
<InvokeInst
>(I
);
99 InsertPt
= II
.getNormalDest()->getFirstInsertionPt();
102 new StoreInst(&I
, Slot
, &*InsertPt
);
106 /// DemotePHIToStack - This function takes a virtual register computed by a PHI
107 /// node and replaces it with a slot in the stack frame allocated via alloca.
108 /// The PHI node is deleted. It returns the pointer to the alloca inserted.
109 AllocaInst
*llvm::DemotePHIToStack(PHINode
*P
, Instruction
*AllocaPoint
) {
110 if (P
->use_empty()) {
111 P
->eraseFromParent();
115 const DataLayout
&DL
= P
->getModule()->getDataLayout();
117 // Create a stack slot to hold the value.
120 Slot
= new AllocaInst(P
->getType(), DL
.getAllocaAddrSpace(), nullptr,
121 P
->getName()+".reg2mem", AllocaPoint
);
123 Function
*F
= P
->getParent()->getParent();
124 Slot
= new AllocaInst(P
->getType(), DL
.getAllocaAddrSpace(), nullptr,
125 P
->getName() + ".reg2mem",
126 &F
->getEntryBlock().front());
129 // Iterate over each operand inserting a store in each predecessor.
130 for (unsigned i
= 0, e
= P
->getNumIncomingValues(); i
< e
; ++i
) {
131 if (InvokeInst
*II
= dyn_cast
<InvokeInst
>(P
->getIncomingValue(i
))) {
132 assert(II
->getParent() != P
->getIncomingBlock(i
) &&
133 "Invoke edge not supported yet"); (void)II
;
135 new StoreInst(P
->getIncomingValue(i
), Slot
,
136 P
->getIncomingBlock(i
)->getTerminator());
139 // Insert a load in place of the PHI and replace all uses.
140 BasicBlock::iterator InsertPt
= P
->getIterator();
142 for (; isa
<PHINode
>(InsertPt
) || InsertPt
->isEHPad(); ++InsertPt
)
143 /* empty */; // Don't insert before PHI nodes or landingpad instrs.
145 Value
*V
= new LoadInst(Slot
, P
->getName() + ".reload", &*InsertPt
);
146 P
->replaceAllUsesWith(V
);
149 P
->eraseFromParent();