1
//===- PHITransAddr.cpp - PHI Translation for Addresses -------------------===//
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
// This file implements the PHITransAddr class.
12
//===----------------------------------------------------------------------===//
14
#include "llvm/Analysis/PHITransAddr.h"
15
#include "llvm/Analysis/Dominators.h"
16
#include "llvm/Analysis/InstructionSimplify.h"
17
#include "llvm/Support/Debug.h"
18
#include "llvm/Support/raw_ostream.h"
21
static bool CanPHITrans(Instruction *Inst) {
22
if (isa<PHINode>(Inst) ||
23
isa<BitCastInst>(Inst) ||
24
isa<GetElementPtrInst>(Inst))
27
if (Inst->getOpcode() == Instruction::Add &&
28
isa<ConstantInt>(Inst->getOperand(1)))
31
// cerr << "MEMDEP: Could not PHI translate: " << *Pointer;
32
// if (isa<BitCastInst>(PtrInst) || isa<GetElementPtrInst>(PtrInst))
33
// cerr << "OP:\t\t\t\t" << *PtrInst->getOperand(0);
37
void PHITransAddr::dump() const {
39
dbgs() << "PHITransAddr: null\n";
42
dbgs() << "PHITransAddr: " << *Addr << "\n";
43
for (unsigned i = 0, e = InstInputs.size(); i != e; ++i)
44
dbgs() << " Input #" << i << " is " << *InstInputs[i] << "\n";
48
static bool VerifySubExpr(Value *Expr,
49
SmallVectorImpl<Instruction*> &InstInputs) {
50
// If this is a non-instruction value, there is nothing to do.
51
Instruction *I = dyn_cast<Instruction>(Expr);
52
if (I == 0) return true;
54
// If it's an instruction, it is either in Tmp or its operands recursively
56
SmallVectorImpl<Instruction*>::iterator Entry =
57
std::find(InstInputs.begin(), InstInputs.end(), I);
58
if (Entry != InstInputs.end()) {
59
InstInputs.erase(Entry);
63
// If it isn't in the InstInputs list it is a subexpr incorporated into the
64
// address. Sanity check that it is phi translatable.
65
if (!CanPHITrans(I)) {
66
errs() << "Non phi translatable instruction found in PHITransAddr, either "
67
"something is missing from InstInputs or CanPHITrans is wrong:\n";
72
// Validate the operands of the instruction.
73
for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
74
if (!VerifySubExpr(I->getOperand(i), InstInputs))
80
/// Verify - Check internal consistency of this data structure. If the
81
/// structure is valid, it returns true. If invalid, it prints errors and
83
bool PHITransAddr::Verify() const {
84
if (Addr == 0) return true;
86
SmallVector<Instruction*, 8> Tmp(InstInputs.begin(), InstInputs.end());
88
if (!VerifySubExpr(Addr, Tmp))
92
errs() << "PHITransAddr inconsistent, contains extra instructions:\n";
93
for (unsigned i = 0, e = InstInputs.size(); i != e; ++i)
94
errs() << " InstInput #" << i << " is " << *InstInputs[i] << "\n";
103
/// IsPotentiallyPHITranslatable - If this needs PHI translation, return true
104
/// if we have some hope of doing it. This should be used as a filter to
105
/// avoid calling PHITranslateValue in hopeless situations.
106
bool PHITransAddr::IsPotentiallyPHITranslatable() const {
107
// If the input value is not an instruction, or if it is not defined in CurBB,
108
// then we don't need to phi translate it.
109
Instruction *Inst = dyn_cast<Instruction>(Addr);
110
return Inst == 0 || CanPHITrans(Inst);
114
static void RemoveInstInputs(Value *V,
115
SmallVectorImpl<Instruction*> &InstInputs) {
116
Instruction *I = dyn_cast<Instruction>(V);
119
// If the instruction is in the InstInputs list, remove it.
120
SmallVectorImpl<Instruction*>::iterator Entry =
121
std::find(InstInputs.begin(), InstInputs.end(), I);
122
if (Entry != InstInputs.end()) {
123
InstInputs.erase(Entry);
127
assert(!isa<PHINode>(I) && "Error, removing something that isn't an input");
129
// Otherwise, it must have instruction inputs itself. Zap them recursively.
130
for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) {
131
if (Instruction *Op = dyn_cast<Instruction>(I->getOperand(i)))
132
RemoveInstInputs(Op, InstInputs);
136
Value *PHITransAddr::PHITranslateSubExpr(Value *V, BasicBlock *CurBB,
138
const DominatorTree *DT) {
139
// If this is a non-instruction value, it can't require PHI translation.
140
Instruction *Inst = dyn_cast<Instruction>(V);
141
if (Inst == 0) return V;
143
// Determine whether 'Inst' is an input to our PHI translatable expression.
144
bool isInput = std::count(InstInputs.begin(), InstInputs.end(), Inst);
146
// Handle inputs instructions if needed.
148
if (Inst->getParent() != CurBB) {
149
// If it is an input defined in a different block, then it remains an
154
// If 'Inst' is defined in this block and is an input that needs to be phi
155
// translated, we need to incorporate the value into the expression or fail.
157
// In either case, the instruction itself isn't an input any longer.
158
InstInputs.erase(std::find(InstInputs.begin(), InstInputs.end(), Inst));
160
// If this is a PHI, go ahead and translate it.
161
if (PHINode *PN = dyn_cast<PHINode>(Inst))
162
return AddAsInput(PN->getIncomingValueForBlock(PredBB));
164
// If this is a non-phi value, and it is analyzable, we can incorporate it
165
// into the expression by making all instruction operands be inputs.
166
if (!CanPHITrans(Inst))
169
// All instruction operands are now inputs (and of course, they may also be
170
// defined in this block, so they may need to be phi translated themselves.
171
for (unsigned i = 0, e = Inst->getNumOperands(); i != e; ++i)
172
if (Instruction *Op = dyn_cast<Instruction>(Inst->getOperand(i)))
173
InstInputs.push_back(Op);
176
// Ok, it must be an intermediate result (either because it started that way
177
// or because we just incorporated it into the expression). See if its
178
// operands need to be phi translated, and if so, reconstruct it.
180
if (BitCastInst *BC = dyn_cast<BitCastInst>(Inst)) {
181
Value *PHIIn = PHITranslateSubExpr(BC->getOperand(0), CurBB, PredBB, DT);
182
if (PHIIn == 0) return 0;
183
if (PHIIn == BC->getOperand(0))
186
// Find an available version of this cast.
188
// Constants are trivial to find.
189
if (Constant *C = dyn_cast<Constant>(PHIIn))
190
return AddAsInput(ConstantExpr::getBitCast(C, BC->getType()));
192
// Otherwise we have to see if a bitcasted version of the incoming pointer
193
// is available. If so, we can use it, otherwise we have to fail.
194
for (Value::use_iterator UI = PHIIn->use_begin(), E = PHIIn->use_end();
196
if (BitCastInst *BCI = dyn_cast<BitCastInst>(*UI))
197
if (BCI->getType() == BC->getType() &&
198
(!DT || DT->dominates(BCI->getParent(), PredBB)))
204
// Handle getelementptr with at least one PHI translatable operand.
205
if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Inst)) {
206
SmallVector<Value*, 8> GEPOps;
207
bool AnyChanged = false;
208
for (unsigned i = 0, e = GEP->getNumOperands(); i != e; ++i) {
209
Value *GEPOp = PHITranslateSubExpr(GEP->getOperand(i), CurBB, PredBB, DT);
210
if (GEPOp == 0) return 0;
212
AnyChanged |= GEPOp != GEP->getOperand(i);
213
GEPOps.push_back(GEPOp);
219
// Simplify the GEP to handle 'gep x, 0' -> x etc.
220
if (Value *V = SimplifyGEPInst(&GEPOps[0], GEPOps.size(), TD)) {
221
for (unsigned i = 0, e = GEPOps.size(); i != e; ++i)
222
RemoveInstInputs(GEPOps[i], InstInputs);
224
return AddAsInput(V);
227
// Scan to see if we have this GEP available.
228
Value *APHIOp = GEPOps[0];
229
for (Value::use_iterator UI = APHIOp->use_begin(), E = APHIOp->use_end();
231
if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(*UI))
232
if (GEPI->getType() == GEP->getType() &&
233
GEPI->getNumOperands() == GEPOps.size() &&
234
GEPI->getParent()->getParent() == CurBB->getParent() &&
235
(!DT || DT->dominates(GEPI->getParent(), PredBB))) {
236
bool Mismatch = false;
237
for (unsigned i = 0, e = GEPOps.size(); i != e; ++i)
238
if (GEPI->getOperand(i) != GEPOps[i]) {
249
// Handle add with a constant RHS.
250
if (Inst->getOpcode() == Instruction::Add &&
251
isa<ConstantInt>(Inst->getOperand(1))) {
252
// PHI translate the LHS.
253
Constant *RHS = cast<ConstantInt>(Inst->getOperand(1));
254
bool isNSW = cast<BinaryOperator>(Inst)->hasNoSignedWrap();
255
bool isNUW = cast<BinaryOperator>(Inst)->hasNoUnsignedWrap();
257
Value *LHS = PHITranslateSubExpr(Inst->getOperand(0), CurBB, PredBB, DT);
258
if (LHS == 0) return 0;
260
// If the PHI translated LHS is an add of a constant, fold the immediates.
261
if (BinaryOperator *BOp = dyn_cast<BinaryOperator>(LHS))
262
if (BOp->getOpcode() == Instruction::Add)
263
if (ConstantInt *CI = dyn_cast<ConstantInt>(BOp->getOperand(1))) {
264
LHS = BOp->getOperand(0);
265
RHS = ConstantExpr::getAdd(RHS, CI);
266
isNSW = isNUW = false;
268
// If the old 'LHS' was an input, add the new 'LHS' as an input.
269
if (std::count(InstInputs.begin(), InstInputs.end(), BOp)) {
270
RemoveInstInputs(BOp, InstInputs);
275
// See if the add simplifies away.
276
if (Value *Res = SimplifyAddInst(LHS, RHS, isNSW, isNUW, TD)) {
277
// If we simplified the operands, the LHS is no longer an input, but Res
279
RemoveInstInputs(LHS, InstInputs);
280
return AddAsInput(Res);
283
// If we didn't modify the add, just return it.
284
if (LHS == Inst->getOperand(0) && RHS == Inst->getOperand(1))
287
// Otherwise, see if we have this add available somewhere.
288
for (Value::use_iterator UI = LHS->use_begin(), E = LHS->use_end();
290
if (BinaryOperator *BO = dyn_cast<BinaryOperator>(*UI))
291
if (BO->getOpcode() == Instruction::Add &&
292
BO->getOperand(0) == LHS && BO->getOperand(1) == RHS &&
293
BO->getParent()->getParent() == CurBB->getParent() &&
294
(!DT || DT->dominates(BO->getParent(), PredBB)))
301
// Otherwise, we failed.
306
/// PHITranslateValue - PHI translate the current address up the CFG from
307
/// CurBB to Pred, updating our state to reflect any needed changes. If the
308
/// dominator tree DT is non-null, the translated value must dominate
309
/// PredBB. This returns true on failure and sets Addr to null.
310
bool PHITransAddr::PHITranslateValue(BasicBlock *CurBB, BasicBlock *PredBB,
311
const DominatorTree *DT) {
312
assert(Verify() && "Invalid PHITransAddr!");
313
Addr = PHITranslateSubExpr(Addr, CurBB, PredBB, DT);
314
assert(Verify() && "Invalid PHITransAddr!");
317
// Make sure the value is live in the predecessor.
318
if (Instruction *Inst = dyn_cast_or_null<Instruction>(Addr))
319
if (!DT->dominates(Inst->getParent(), PredBB))
326
/// PHITranslateWithInsertion - PHI translate this value into the specified
327
/// predecessor block, inserting a computation of the value if it is
330
/// All newly created instructions are added to the NewInsts list. This
331
/// returns null on failure.
333
Value *PHITransAddr::
334
PHITranslateWithInsertion(BasicBlock *CurBB, BasicBlock *PredBB,
335
const DominatorTree &DT,
336
SmallVectorImpl<Instruction*> &NewInsts) {
337
unsigned NISize = NewInsts.size();
339
// Attempt to PHI translate with insertion.
340
Addr = InsertPHITranslatedSubExpr(Addr, CurBB, PredBB, DT, NewInsts);
342
// If successful, return the new value.
343
if (Addr) return Addr;
345
// If not, destroy any intermediate instructions inserted.
346
while (NewInsts.size() != NISize)
347
NewInsts.pop_back_val()->eraseFromParent();
352
/// InsertPHITranslatedPointer - Insert a computation of the PHI translated
353
/// version of 'V' for the edge PredBB->CurBB into the end of the PredBB
354
/// block. All newly created instructions are added to the NewInsts list.
355
/// This returns null on failure.
357
Value *PHITransAddr::
358
InsertPHITranslatedSubExpr(Value *InVal, BasicBlock *CurBB,
359
BasicBlock *PredBB, const DominatorTree &DT,
360
SmallVectorImpl<Instruction*> &NewInsts) {
361
// See if we have a version of this value already available and dominating
362
// PredBB. If so, there is no need to insert a new instance of it.
363
PHITransAddr Tmp(InVal, TD);
364
if (!Tmp.PHITranslateValue(CurBB, PredBB, &DT))
365
return Tmp.getAddr();
367
// If we don't have an available version of this value, it must be an
369
Instruction *Inst = cast<Instruction>(InVal);
371
// Handle bitcast of PHI translatable value.
372
if (BitCastInst *BC = dyn_cast<BitCastInst>(Inst)) {
373
Value *OpVal = InsertPHITranslatedSubExpr(BC->getOperand(0),
374
CurBB, PredBB, DT, NewInsts);
375
if (OpVal == 0) return 0;
377
// Otherwise insert a bitcast at the end of PredBB.
378
BitCastInst *New = new BitCastInst(OpVal, InVal->getType(),
379
InVal->getName()+".phi.trans.insert",
380
PredBB->getTerminator());
381
NewInsts.push_back(New);
385
// Handle getelementptr with at least one PHI operand.
386
if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Inst)) {
387
SmallVector<Value*, 8> GEPOps;
388
BasicBlock *CurBB = GEP->getParent();
389
for (unsigned i = 0, e = GEP->getNumOperands(); i != e; ++i) {
390
Value *OpVal = InsertPHITranslatedSubExpr(GEP->getOperand(i),
391
CurBB, PredBB, DT, NewInsts);
392
if (OpVal == 0) return 0;
393
GEPOps.push_back(OpVal);
396
GetElementPtrInst *Result =
397
GetElementPtrInst::Create(GEPOps[0], GEPOps.begin()+1, GEPOps.end(),
398
InVal->getName()+".phi.trans.insert",
399
PredBB->getTerminator());
400
Result->setIsInBounds(GEP->isInBounds());
401
NewInsts.push_back(Result);
406
// FIXME: This code works, but it is unclear that we actually want to insert
407
// a big chain of computation in order to make a value available in a block.
408
// This needs to be evaluated carefully to consider its cost trade offs.
410
// Handle add with a constant RHS.
411
if (Inst->getOpcode() == Instruction::Add &&
412
isa<ConstantInt>(Inst->getOperand(1))) {
413
// PHI translate the LHS.
414
Value *OpVal = InsertPHITranslatedSubExpr(Inst->getOperand(0),
415
CurBB, PredBB, DT, NewInsts);
416
if (OpVal == 0) return 0;
418
BinaryOperator *Res = BinaryOperator::CreateAdd(OpVal, Inst->getOperand(1),
419
InVal->getName()+".phi.trans.insert",
420
PredBB->getTerminator());
421
Res->setHasNoSignedWrap(cast<BinaryOperator>(Inst)->hasNoSignedWrap());
422
Res->setHasNoUnsignedWrap(cast<BinaryOperator>(Inst)->hasNoUnsignedWrap());
423
NewInsts.push_back(Res);