LLVM 22.0.0git
InstCombinePHI.cpp
Go to the documentation of this file.
1//===- InstCombinePHI.cpp -------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file implements the visitPHINode function.
10//
11//===----------------------------------------------------------------------===//
12
13#include "InstCombineInternal.h"
14#include "llvm/ADT/STLExtras.h"
16#include "llvm/ADT/Statistic.h"
23#include <optional>
24
25using namespace llvm;
26using namespace llvm::PatternMatch;
27
28#define DEBUG_TYPE "instcombine"
29
31MaxNumPhis("instcombine-max-num-phis", cl::init(512),
32 cl::desc("Maximum number phis to handle in intptr/ptrint folding"));
33
34STATISTIC(NumPHIsOfInsertValues,
35 "Number of phi-of-insertvalue turned into insertvalue-of-phis");
36STATISTIC(NumPHIsOfExtractValues,
37 "Number of phi-of-extractvalue turned into extractvalue-of-phi");
38STATISTIC(NumPHICSEs, "Number of PHI's that got CSE'd");
39
40/// The PHI arguments will be folded into a single operation with a PHI node
41/// as input. The debug location of the single operation will be the merged
42/// locations of the original PHI node arguments.
44 auto *FirstInst = cast<Instruction>(PN.getIncomingValue(0));
45 Inst->setDebugLoc(FirstInst->getDebugLoc());
46 // We do not expect a CallInst here, otherwise, N-way merging of DebugLoc
47 // will be inefficient.
48 assert(!isa<CallInst>(Inst));
49
50 for (Value *V : drop_begin(PN.incoming_values())) {
51 auto *I = cast<Instruction>(V);
52 Inst->applyMergedLocation(Inst->getDebugLoc(), I->getDebugLoc());
53 }
54}
55
56/// If the phi is within a phi web, which is formed by the def-use chain
57/// of phis and all the phis in the web are only used in the other phis.
58/// In this case, these phis are dead and we will remove all of them.
62 Stack.push_back(&PN);
63 Visited.insert(&PN);
64 while (!Stack.empty()) {
65 PHINode *Phi = Stack.pop_back_val();
66 for (User *Use : Phi->users()) {
67 if (PHINode *PhiUse = dyn_cast<PHINode>(Use)) {
68 if (!Visited.insert(PhiUse).second)
69 continue;
70 // Early stop if the set of PHIs is large
71 if (Visited.size() >= 16)
72 return false;
73 Stack.push_back(PhiUse);
74 } else
75 return false;
76 }
77 }
78 for (PHINode *Phi : Visited)
79 replaceInstUsesWith(*Phi, PoisonValue::get(Phi->getType()));
80 for (PHINode *Phi : Visited)
82 return true;
83}
84
85// Replace Integer typed PHI PN if the PHI's value is used as a pointer value.
86// If there is an existing pointer typed PHI that produces the same value as PN,
87// replace PN and the IntToPtr operation with it. Otherwise, synthesize a new
88// PHI node:
89//
90// Case-1:
91// bb1:
92// int_init = PtrToInt(ptr_init)
93// br label %bb2
94// bb2:
95// int_val = PHI([int_init, %bb1], [int_val_inc, %bb2]
96// ptr_val = PHI([ptr_init, %bb1], [ptr_val_inc, %bb2]
97// ptr_val2 = IntToPtr(int_val)
98// ...
99// use(ptr_val2)
100// ptr_val_inc = ...
101// inc_val_inc = PtrToInt(ptr_val_inc)
102//
103// ==>
104// bb1:
105// br label %bb2
106// bb2:
107// ptr_val = PHI([ptr_init, %bb1], [ptr_val_inc, %bb2]
108// ...
109// use(ptr_val)
110// ptr_val_inc = ...
111//
112// Case-2:
113// bb1:
114// int_ptr = BitCast(ptr_ptr)
115// int_init = Load(int_ptr)
116// br label %bb2
117// bb2:
118// int_val = PHI([int_init, %bb1], [int_val_inc, %bb2]
119// ptr_val2 = IntToPtr(int_val)
120// ...
121// use(ptr_val2)
122// ptr_val_inc = ...
123// inc_val_inc = PtrToInt(ptr_val_inc)
124// ==>
125// bb1:
126// ptr_init = Load(ptr_ptr)
127// br label %bb2
128// bb2:
129// ptr_val = PHI([ptr_init, %bb1], [ptr_val_inc, %bb2]
130// ...
131// use(ptr_val)
132// ptr_val_inc = ...
133// ...
134//
136 if (!PN.getType()->isIntegerTy())
137 return false;
138 if (!PN.hasOneUse())
139 return false;
140
141 auto *IntToPtr = dyn_cast<IntToPtrInst>(PN.user_back());
142 if (!IntToPtr)
143 return false;
144
145 // Check if the pointer is actually used as pointer:
146 auto HasPointerUse = [](Instruction *IIP) {
147 for (User *U : IIP->users()) {
148 Value *Ptr = nullptr;
149 if (LoadInst *LoadI = dyn_cast<LoadInst>(U)) {
150 Ptr = LoadI->getPointerOperand();
151 } else if (StoreInst *SI = dyn_cast<StoreInst>(U)) {
152 Ptr = SI->getPointerOperand();
154 Ptr = GI->getPointerOperand();
155 }
156
157 if (Ptr && Ptr == IIP)
158 return true;
159 }
160 return false;
161 };
162
163 if (!HasPointerUse(IntToPtr))
164 return false;
165
166 if (DL.getPointerSizeInBits(IntToPtr->getAddressSpace()) !=
167 DL.getTypeSizeInBits(IntToPtr->getOperand(0)->getType()))
168 return false;
169
170 SmallVector<Value *, 4> AvailablePtrVals;
171 for (auto Incoming : zip(PN.blocks(), PN.incoming_values())) {
172 BasicBlock *BB = std::get<0>(Incoming);
173 Value *Arg = std::get<1>(Incoming);
174
175 // Arg could be a constant, constant expr, etc., which we don't cover here.
176 if (!isa<Instruction>(Arg) && !isa<Argument>(Arg))
177 return false;
178
179 // First look backward:
180 if (auto *PI = dyn_cast<PtrToIntInst>(Arg)) {
181 AvailablePtrVals.emplace_back(PI->getOperand(0));
182 continue;
183 }
184
185 // Next look forward:
186 Value *ArgIntToPtr = nullptr;
187 for (User *U : Arg->users()) {
188 if (isa<IntToPtrInst>(U) && U->getType() == IntToPtr->getType() &&
189 (DT.dominates(cast<Instruction>(U), BB) ||
190 cast<Instruction>(U)->getParent() == BB)) {
191 ArgIntToPtr = U;
192 break;
193 }
194 }
195
196 if (ArgIntToPtr) {
197 AvailablePtrVals.emplace_back(ArgIntToPtr);
198 continue;
199 }
200
201 // If Arg is defined by a PHI, allow it. This will also create
202 // more opportunities iteratively.
203 if (isa<PHINode>(Arg)) {
204 AvailablePtrVals.emplace_back(Arg);
205 continue;
206 }
207
208 // For a single use integer load:
209 auto *LoadI = dyn_cast<LoadInst>(Arg);
210 if (!LoadI)
211 return false;
212
213 if (!LoadI->hasOneUse())
214 return false;
215
216 // Push the integer typed Load instruction into the available
217 // value set, and fix it up later when the pointer typed PHI
218 // is synthesized.
219 AvailablePtrVals.emplace_back(LoadI);
220 }
221
222 // Now search for a matching PHI
223 auto *BB = PN.getParent();
224 assert(AvailablePtrVals.size() == PN.getNumIncomingValues() &&
225 "Not enough available ptr typed incoming values");
226 PHINode *MatchingPtrPHI = nullptr;
227 unsigned NumPhis = 0;
228 for (PHINode &PtrPHI : BB->phis()) {
229 // FIXME: consider handling this in AggressiveInstCombine
230 if (NumPhis++ > MaxNumPhis)
231 return false;
232 if (&PtrPHI == &PN || PtrPHI.getType() != IntToPtr->getType())
233 continue;
234 if (any_of(zip(PN.blocks(), AvailablePtrVals),
235 [&](const auto &BlockAndValue) {
236 BasicBlock *BB = std::get<0>(BlockAndValue);
237 Value *V = std::get<1>(BlockAndValue);
238 return PtrPHI.getIncomingValueForBlock(BB) != V;
239 }))
240 continue;
241 MatchingPtrPHI = &PtrPHI;
242 break;
243 }
244
245 if (MatchingPtrPHI) {
246 assert(MatchingPtrPHI->getType() == IntToPtr->getType() &&
247 "Phi's Type does not match with IntToPtr");
248 // Explicitly replace the inttoptr (rather than inserting a ptrtoint) here,
249 // to make sure another transform can't undo it in the meantime.
250 replaceInstUsesWith(*IntToPtr, MatchingPtrPHI);
251 eraseInstFromFunction(*IntToPtr);
253 return true;
254 }
255
256 // If it requires a conversion for every PHI operand, do not do it.
257 if (all_of(AvailablePtrVals, [&](Value *V) {
258 return (V->getType() != IntToPtr->getType()) || isa<IntToPtrInst>(V);
259 }))
260 return false;
261
262 // If any of the operand that requires casting is a terminator
263 // instruction, do not do it. Similarly, do not do the transform if the value
264 // is PHI in a block with no insertion point, for example, a catchswitch
265 // block, since we will not be able to insert a cast after the PHI.
266 if (any_of(AvailablePtrVals, [&](Value *V) {
267 if (V->getType() == IntToPtr->getType())
268 return false;
269 auto *Inst = dyn_cast<Instruction>(V);
270 if (!Inst)
271 return false;
272 if (Inst->isTerminator())
273 return true;
274 auto *BB = Inst->getParent();
275 if (isa<PHINode>(Inst) && BB->getFirstInsertionPt() == BB->end())
276 return true;
277 return false;
278 }))
279 return false;
280
281 PHINode *NewPtrPHI = PHINode::Create(
282 IntToPtr->getType(), PN.getNumIncomingValues(), PN.getName() + ".ptr");
283
284 InsertNewInstBefore(NewPtrPHI, PN.getIterator());
286 for (auto Incoming : zip(PN.blocks(), AvailablePtrVals)) {
287 auto *IncomingBB = std::get<0>(Incoming);
288 auto *IncomingVal = std::get<1>(Incoming);
289
290 if (IncomingVal->getType() == IntToPtr->getType()) {
291 NewPtrPHI->addIncoming(IncomingVal, IncomingBB);
292 continue;
293 }
294
295#ifndef NDEBUG
296 LoadInst *LoadI = dyn_cast<LoadInst>(IncomingVal);
297 assert((isa<PHINode>(IncomingVal) ||
298 IncomingVal->getType()->isPointerTy() ||
299 (LoadI && LoadI->hasOneUse())) &&
300 "Can not replace LoadInst with multiple uses");
301#endif
302 // Need to insert a BitCast.
303 // For an integer Load instruction with a single use, the load + IntToPtr
304 // cast will be simplified into a pointer load:
305 // %v = load i64, i64* %a.ip, align 8
306 // %v.cast = inttoptr i64 %v to float **
307 // ==>
308 // %v.ptrp = bitcast i64 * %a.ip to float **
309 // %v.cast = load float *, float ** %v.ptrp, align 8
310 Instruction *&CI = Casts[IncomingVal];
311 if (!CI) {
312 CI = CastInst::CreateBitOrPointerCast(IncomingVal, IntToPtr->getType(),
313 IncomingVal->getName() + ".ptr");
314 if (auto *IncomingI = dyn_cast<Instruction>(IncomingVal)) {
315 BasicBlock::iterator InsertPos(IncomingI);
316 InsertPos++;
317 BasicBlock *BB = IncomingI->getParent();
318 if (isa<PHINode>(IncomingI))
319 InsertPos = BB->getFirstInsertionPt();
320 assert(InsertPos != BB->end() && "should have checked above");
321 InsertNewInstBefore(CI, InsertPos);
322 } else {
323 auto *InsertBB = &IncomingBB->getParent()->getEntryBlock();
324 InsertNewInstBefore(CI, InsertBB->getFirstInsertionPt());
325 }
326 }
327 NewPtrPHI->addIncoming(CI, IncomingBB);
328 }
329
330 // Explicitly replace the inttoptr (rather than inserting a ptrtoint) here,
331 // to make sure another transform can't undo it in the meantime.
332 replaceInstUsesWith(*IntToPtr, NewPtrPHI);
333 eraseInstFromFunction(*IntToPtr);
335 return true;
336}
337
338// Remove RoundTrip IntToPtr/PtrToInt Cast on PHI-Operand and
339// fold Phi-operand to bitcast.
341 // convert ptr2int ( phi[ int2ptr(ptr2int(x))] ) --> ptr2int ( phi [ x ] )
342 // Make sure all uses of phi are ptr2int.
344 return nullptr;
345
346 // Iterating over all operands to check presence of target pointers for
347 // optimization.
348 bool OperandWithRoundTripCast = false;
349 for (unsigned OpNum = 0; OpNum != PN.getNumIncomingValues(); ++OpNum) {
350 if (auto *NewOp =
351 simplifyIntToPtrRoundTripCast(PN.getIncomingValue(OpNum))) {
352 replaceOperand(PN, OpNum, NewOp);
353 OperandWithRoundTripCast = true;
354 }
355 }
356 if (!OperandWithRoundTripCast)
357 return nullptr;
358 return &PN;
359}
360
361/// If we have something like phi [insertvalue(a,b,0), insertvalue(c,d,0)],
362/// turn this into a phi[a,c] and phi[b,d] and a single insertvalue.
365 auto *FirstIVI = cast<InsertValueInst>(PN.getIncomingValue(0));
366
367 // Scan to see if all operands are `insertvalue`'s with the same indices,
368 // and all have a single use.
369 for (Value *V : drop_begin(PN.incoming_values())) {
370 auto *I = dyn_cast<InsertValueInst>(V);
371 if (!I || !I->hasOneUser() || I->getIndices() != FirstIVI->getIndices())
372 return nullptr;
373 }
374
375 // For each operand of an `insertvalue`
376 std::array<PHINode *, 2> NewOperands;
377 for (int OpIdx : {0, 1}) {
378 auto *&NewOperand = NewOperands[OpIdx];
379 // Create a new PHI node to receive the values the operand has in each
380 // incoming basic block.
381 NewOperand = PHINode::Create(
382 FirstIVI->getOperand(OpIdx)->getType(), PN.getNumIncomingValues(),
383 FirstIVI->getOperand(OpIdx)->getName() + ".pn");
384 // And populate each operand's PHI with said values.
385 for (auto Incoming : zip(PN.blocks(), PN.incoming_values()))
386 NewOperand->addIncoming(
387 cast<InsertValueInst>(std::get<1>(Incoming))->getOperand(OpIdx),
388 std::get<0>(Incoming));
389 InsertNewInstBefore(NewOperand, PN.getIterator());
390 }
391
392 // And finally, create `insertvalue` over the newly-formed PHI nodes.
393 auto *NewIVI = InsertValueInst::Create(NewOperands[0], NewOperands[1],
394 FirstIVI->getIndices(), PN.getName());
395
396 PHIArgMergedDebugLoc(NewIVI, PN);
397 ++NumPHIsOfInsertValues;
398 return NewIVI;
399}
400
401/// If we have something like phi [extractvalue(a,0), extractvalue(b,0)],
402/// turn this into a phi[a,b] and a single extractvalue.
405 auto *FirstEVI = cast<ExtractValueInst>(PN.getIncomingValue(0));
406
407 // Scan to see if all operands are `extractvalue`'s with the same indices,
408 // and all have a single use.
409 for (Value *V : drop_begin(PN.incoming_values())) {
410 auto *I = dyn_cast<ExtractValueInst>(V);
411 if (!I || !I->hasOneUser() || I->getIndices() != FirstEVI->getIndices() ||
412 I->getAggregateOperand()->getType() !=
413 FirstEVI->getAggregateOperand()->getType())
414 return nullptr;
415 }
416
417 // Create a new PHI node to receive the values the aggregate operand has
418 // in each incoming basic block.
419 auto *NewAggregateOperand = PHINode::Create(
420 FirstEVI->getAggregateOperand()->getType(), PN.getNumIncomingValues(),
421 FirstEVI->getAggregateOperand()->getName() + ".pn");
422 // And populate the PHI with said values.
423 for (auto Incoming : zip(PN.blocks(), PN.incoming_values()))
424 NewAggregateOperand->addIncoming(
425 cast<ExtractValueInst>(std::get<1>(Incoming))->getAggregateOperand(),
426 std::get<0>(Incoming));
427 InsertNewInstBefore(NewAggregateOperand, PN.getIterator());
428
429 // And finally, create `extractvalue` over the newly-formed PHI nodes.
430 auto *NewEVI = ExtractValueInst::Create(NewAggregateOperand,
431 FirstEVI->getIndices(), PN.getName());
432
433 PHIArgMergedDebugLoc(NewEVI, PN);
434 ++NumPHIsOfExtractValues;
435 return NewEVI;
436}
437
438/// If we have something like phi [add (a,b), add(a,c)] and if a/b/c and the
439/// adds all have a single user, turn this into a phi and a single binop.
442 assert(isa<BinaryOperator>(FirstInst) || isa<CmpInst>(FirstInst));
443 unsigned Opc = FirstInst->getOpcode();
444 Value *LHSVal = FirstInst->getOperand(0);
445 Value *RHSVal = FirstInst->getOperand(1);
446
447 Type *LHSType = LHSVal->getType();
448 Type *RHSType = RHSVal->getType();
449
450 // Scan to see if all operands are the same opcode, and all have one user.
451 for (Value *V : drop_begin(PN.incoming_values())) {
453 if (!I || I->getOpcode() != Opc || !I->hasOneUser() ||
454 // Verify type of the LHS matches so we don't fold cmp's of different
455 // types.
456 I->getOperand(0)->getType() != LHSType ||
457 I->getOperand(1)->getType() != RHSType)
458 return nullptr;
459
460 // If they are CmpInst instructions, check their predicates
461 if (CmpInst *CI = dyn_cast<CmpInst>(I))
462 if (CI->getPredicate() != cast<CmpInst>(FirstInst)->getPredicate())
463 return nullptr;
464
465 // Keep track of which operand needs a phi node.
466 if (I->getOperand(0) != LHSVal) LHSVal = nullptr;
467 if (I->getOperand(1) != RHSVal) RHSVal = nullptr;
468 }
469
470 // If both LHS and RHS would need a PHI, don't do this transformation,
471 // because it would increase the number of PHIs entering the block,
472 // which leads to higher register pressure. This is especially
473 // bad when the PHIs are in the header of a loop.
474 if (!LHSVal && !RHSVal)
475 return nullptr;
476
477 // Otherwise, this is safe to transform!
478
479 Value *InLHS = FirstInst->getOperand(0);
480 Value *InRHS = FirstInst->getOperand(1);
481 PHINode *NewLHS = nullptr, *NewRHS = nullptr;
482 if (!LHSVal) {
483 NewLHS = PHINode::Create(LHSType, PN.getNumIncomingValues(),
484 FirstInst->getOperand(0)->getName() + ".pn");
485 NewLHS->addIncoming(InLHS, PN.getIncomingBlock(0));
486 InsertNewInstBefore(NewLHS, PN.getIterator());
487 LHSVal = NewLHS;
488 }
489
490 if (!RHSVal) {
491 NewRHS = PHINode::Create(RHSType, PN.getNumIncomingValues(),
492 FirstInst->getOperand(1)->getName() + ".pn");
493 NewRHS->addIncoming(InRHS, PN.getIncomingBlock(0));
494 InsertNewInstBefore(NewRHS, PN.getIterator());
495 RHSVal = NewRHS;
496 }
497
498 // Add all operands to the new PHIs.
499 if (NewLHS || NewRHS) {
500 for (auto Incoming : drop_begin(zip(PN.blocks(), PN.incoming_values()))) {
501 BasicBlock *InBB = std::get<0>(Incoming);
502 Value *InVal = std::get<1>(Incoming);
503 Instruction *InInst = cast<Instruction>(InVal);
504 if (NewLHS) {
505 Value *NewInLHS = InInst->getOperand(0);
506 NewLHS->addIncoming(NewInLHS, InBB);
507 }
508 if (NewRHS) {
509 Value *NewInRHS = InInst->getOperand(1);
510 NewRHS->addIncoming(NewInRHS, InBB);
511 }
512 }
513 }
514
515 if (CmpInst *CIOp = dyn_cast<CmpInst>(FirstInst)) {
516 CmpInst *NewCI = CmpInst::Create(CIOp->getOpcode(), CIOp->getPredicate(),
517 LHSVal, RHSVal);
518 PHIArgMergedDebugLoc(NewCI, PN);
519 return NewCI;
520 }
521
522 BinaryOperator *BinOp = cast<BinaryOperator>(FirstInst);
523 BinaryOperator *NewBinOp =
524 BinaryOperator::Create(BinOp->getOpcode(), LHSVal, RHSVal);
525
526 NewBinOp->copyIRFlags(PN.getIncomingValue(0));
527
528 for (Value *V : drop_begin(PN.incoming_values()))
529 NewBinOp->andIRFlags(V);
530
531 PHIArgMergedDebugLoc(NewBinOp, PN);
532 return NewBinOp;
533}
534
537
538 SmallVector<Value*, 16> FixedOperands(FirstInst->op_begin(),
539 FirstInst->op_end());
540 // This is true if all GEP bases are allocas and if all indices into them are
541 // constants.
542 bool AllBasePointersAreAllocas = true;
543
544 // We don't want to replace this phi if the replacement would require
545 // more than one phi, which leads to higher register pressure. This is
546 // especially bad when the PHIs are in the header of a loop.
547 bool NeededPhi = false;
548
549 // Remember flags of the first phi-operand getelementptr.
550 GEPNoWrapFlags NW = FirstInst->getNoWrapFlags();
551
552 // Scan to see if all operands are the same opcode, and all have one user.
553 for (Value *V : drop_begin(PN.incoming_values())) {
555 if (!GEP || !GEP->hasOneUser() ||
556 GEP->getSourceElementType() != FirstInst->getSourceElementType() ||
557 GEP->getNumOperands() != FirstInst->getNumOperands())
558 return nullptr;
559
560 NW &= GEP->getNoWrapFlags();
561
562 // Keep track of whether or not all GEPs are of alloca pointers.
563 if (AllBasePointersAreAllocas &&
564 (!isa<AllocaInst>(GEP->getOperand(0)) ||
565 !GEP->hasAllConstantIndices()))
566 AllBasePointersAreAllocas = false;
567
568 // Compare the operand lists.
569 for (unsigned Op = 0, E = FirstInst->getNumOperands(); Op != E; ++Op) {
570 if (FirstInst->getOperand(Op) == GEP->getOperand(Op))
571 continue;
572
573 // Don't merge two GEPs when two operands differ (introducing phi nodes)
574 // if one of the PHIs has a constant for the index. The index may be
575 // substantially cheaper to compute for the constants, so making it a
576 // variable index could pessimize the path. This also handles the case
577 // for struct indices, which must always be constant.
578 if (isa<Constant>(FirstInst->getOperand(Op)) ||
579 isa<Constant>(GEP->getOperand(Op)))
580 return nullptr;
581
582 if (FirstInst->getOperand(Op)->getType() !=
583 GEP->getOperand(Op)->getType())
584 return nullptr;
585
586 // If we already needed a PHI for an earlier operand, and another operand
587 // also requires a PHI, we'd be introducing more PHIs than we're
588 // eliminating, which increases register pressure on entry to the PHI's
589 // block.
590 if (NeededPhi)
591 return nullptr;
592
593 FixedOperands[Op] = nullptr; // Needs a PHI.
594 NeededPhi = true;
595 }
596 }
597
598 // If all of the base pointers of the PHI'd GEPs are from allocas, don't
599 // bother doing this transformation. At best, this will just save a bit of
600 // offset calculation, but all the predecessors will have to materialize the
601 // stack address into a register anyway. We'd actually rather *clone* the
602 // load up into the predecessors so that we have a load of a gep of an alloca,
603 // which can usually all be folded into the load.
604 if (AllBasePointersAreAllocas)
605 return nullptr;
606
607 // Otherwise, this is safe to transform. Insert PHI nodes for each operand
608 // that is variable.
609 SmallVector<PHINode*, 16> OperandPhis(FixedOperands.size());
610
611 bool HasAnyPHIs = false;
612 for (unsigned I = 0, E = FixedOperands.size(); I != E; ++I) {
613 if (FixedOperands[I])
614 continue; // operand doesn't need a phi.
615 Value *FirstOp = FirstInst->getOperand(I);
616 PHINode *NewPN =
617 PHINode::Create(FirstOp->getType(), E, FirstOp->getName() + ".pn");
618 InsertNewInstBefore(NewPN, PN.getIterator());
619
620 NewPN->addIncoming(FirstOp, PN.getIncomingBlock(0));
621 OperandPhis[I] = NewPN;
622 FixedOperands[I] = NewPN;
623 HasAnyPHIs = true;
624 }
625
626 // Add all operands to the new PHIs.
627 if (HasAnyPHIs) {
628 for (auto Incoming : drop_begin(zip(PN.blocks(), PN.incoming_values()))) {
629 BasicBlock *InBB = std::get<0>(Incoming);
630 Value *InVal = std::get<1>(Incoming);
632
633 for (unsigned Op = 0, E = OperandPhis.size(); Op != E; ++Op)
634 if (PHINode *OpPhi = OperandPhis[Op])
635 OpPhi->addIncoming(InGEP->getOperand(Op), InBB);
636 }
637 }
638
639 Value *Base = FixedOperands[0];
640 GetElementPtrInst *NewGEP =
642 ArrayRef(FixedOperands).slice(1), NW);
643 PHIArgMergedDebugLoc(NewGEP, PN);
644 return NewGEP;
645}
646
647/// Return true if we know that it is safe to sink the load out of the block
648/// that defines it. This means that it must be obvious the value of the load is
649/// not changed from the point of the load to the end of the block it is in.
650///
651/// Finally, it is safe, but not profitable, to sink a load targeting a
652/// non-address-taken alloca. Doing so will cause us to not promote the alloca
653/// to a register.
655 BasicBlock::iterator BBI = L->getIterator(), E = L->getParent()->end();
656
657 for (++BBI; BBI != E; ++BBI)
658 if (BBI->mayWriteToMemory()) {
659 // Calls that only access inaccessible memory do not block sinking the
660 // load.
661 if (auto *CB = dyn_cast<CallBase>(BBI))
662 if (CB->onlyAccessesInaccessibleMemory())
663 continue;
664 return false;
665 }
666
667 // Check for non-address taken alloca. If not address-taken already, it isn't
668 // profitable to do this xform.
669 if (AllocaInst *AI = dyn_cast<AllocaInst>(L->getOperand(0))) {
670 bool IsAddressTaken = false;
671 for (User *U : AI->users()) {
672 if (isa<LoadInst>(U)) continue;
673 if (StoreInst *SI = dyn_cast<StoreInst>(U)) {
674 // If storing TO the alloca, then the address isn't taken.
675 if (SI->getOperand(1) == AI) continue;
676 }
677 IsAddressTaken = true;
678 break;
679 }
680
681 if (!IsAddressTaken && AI->isStaticAlloca())
682 return false;
683 }
684
685 // If this load is a load from a GEP with a constant offset from an alloca,
686 // then we don't want to sink it. In its present form, it will be
687 // load [constant stack offset]. Sinking it will cause us to have to
688 // materialize the stack addresses in each predecessor in a register only to
689 // do a shared load from register in the successor.
690 if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(L->getOperand(0)))
691 if (AllocaInst *AI = dyn_cast<AllocaInst>(GEP->getOperand(0)))
692 if (AI->isStaticAlloca() && GEP->hasAllConstantIndices())
693 return false;
694
695 return true;
696}
697
699 LoadInst *FirstLI = cast<LoadInst>(PN.getIncomingValue(0));
700
701 if (!canReplaceOperandWithVariable(FirstLI, 0))
702 return nullptr;
703
704 // FIXME: This is overconservative; this transform is allowed in some cases
705 // for atomic operations.
706 if (FirstLI->isAtomic())
707 return nullptr;
708
709 // When processing loads, we need to propagate two bits of information to the
710 // sunk load: whether it is volatile, and what its alignment is.
711 bool IsVolatile = FirstLI->isVolatile();
712 Align LoadAlignment = FirstLI->getAlign();
713 const unsigned LoadAddrSpace = FirstLI->getPointerAddressSpace();
714
715 // We can't sink the load if the loaded value could be modified between the
716 // load and the PHI.
717 if (FirstLI->getParent() != PN.getIncomingBlock(0) ||
719 return nullptr;
720
721 // If the PHI is of volatile loads and the load block has multiple
722 // successors, sinking it would remove a load of the volatile value from
723 // the path through the other successor.
724 if (IsVolatile &&
725 FirstLI->getParent()->getTerminator()->getNumSuccessors() != 1)
726 return nullptr;
727
728 for (auto Incoming : drop_begin(zip(PN.blocks(), PN.incoming_values()))) {
729 BasicBlock *InBB = std::get<0>(Incoming);
730 Value *InVal = std::get<1>(Incoming);
731 LoadInst *LI = dyn_cast<LoadInst>(InVal);
732 if (!LI || !LI->hasOneUser() || LI->isAtomic())
733 return nullptr;
734
735 // Make sure all arguments are the same type of operation.
736 if (LI->isVolatile() != IsVolatile ||
737 LI->getPointerAddressSpace() != LoadAddrSpace)
738 return nullptr;
739
741 return nullptr;
742
743 // We can't sink the load if the loaded value could be modified between
744 // the load and the PHI.
745 if (LI->getParent() != InBB || !isSafeAndProfitableToSinkLoad(LI))
746 return nullptr;
747
748 LoadAlignment = std::min(LoadAlignment, LI->getAlign());
749
750 // If the PHI is of volatile loads and the load block has multiple
751 // successors, sinking it would remove a load of the volatile value from
752 // the path through the other successor.
753 if (IsVolatile && LI->getParent()->getTerminator()->getNumSuccessors() != 1)
754 return nullptr;
755 }
756
757 // Okay, they are all the same operation. Create a new PHI node of the
758 // correct type, and PHI together all of the LHS's of the instructions.
759 PHINode *NewPN = PHINode::Create(FirstLI->getOperand(0)->getType(),
761 PN.getName()+".in");
762
763 Value *InVal = FirstLI->getOperand(0);
764 NewPN->addIncoming(InVal, PN.getIncomingBlock(0));
765 LoadInst *NewLI =
766 new LoadInst(FirstLI->getType(), NewPN, "", IsVolatile, LoadAlignment);
767 NewLI->copyMetadata(*FirstLI);
768
769 // Add all operands to the new PHI and combine TBAA metadata.
770 for (auto Incoming : drop_begin(zip(PN.blocks(), PN.incoming_values()))) {
771 BasicBlock *BB = std::get<0>(Incoming);
772 Value *V = std::get<1>(Incoming);
773 LoadInst *LI = cast<LoadInst>(V);
774 combineMetadataForCSE(NewLI, LI, true);
775 Value *NewInVal = LI->getOperand(0);
776 if (NewInVal != InVal)
777 InVal = nullptr;
778 NewPN->addIncoming(NewInVal, BB);
779 }
780
781 if (InVal) {
782 // The new PHI unions all of the same values together. This is really
783 // common, so we handle it intelligently here for compile-time speed.
784 NewLI->setOperand(0, InVal);
785 delete NewPN;
786 } else {
787 InsertNewInstBefore(NewPN, PN.getIterator());
788 }
789
790 // If this was a volatile load that we are merging, make sure to loop through
791 // and mark all the input loads as non-volatile. If we don't do this, we will
792 // insert a new volatile load and the old ones will not be deletable.
793 if (IsVolatile)
794 for (Value *IncValue : PN.incoming_values())
795 cast<LoadInst>(IncValue)->setVolatile(false);
796
797 PHIArgMergedDebugLoc(NewLI, PN);
798 return NewLI;
799}
800
801/// TODO: This function could handle other cast types, but then it might
802/// require special-casing a cast from the 'i1' type. See the comment in
803/// FoldPHIArgOpIntoPHI() about pessimizing illegal integer types.
805 // We cannot create a new instruction after the PHI if the terminator is an
806 // EHPad because there is no valid insertion point.
807 if (Instruction *TI = Phi.getParent()->getTerminator())
808 if (TI->isEHPad())
809 return nullptr;
810
811 // Early exit for the common case of a phi with two operands. These are
812 // handled elsewhere. See the comment below where we check the count of zexts
813 // and constants for more details.
814 unsigned NumIncomingValues = Phi.getNumIncomingValues();
815 if (NumIncomingValues < 3)
816 return nullptr;
817
818 // Find the narrower type specified by the first zext.
819 Type *NarrowType = nullptr;
820 for (Value *V : Phi.incoming_values()) {
821 if (auto *Zext = dyn_cast<ZExtInst>(V)) {
822 NarrowType = Zext->getSrcTy();
823 break;
824 }
825 }
826 if (!NarrowType)
827 return nullptr;
828
829 // Walk the phi operands checking that we only have zexts or constants that
830 // we can shrink for free. Store the new operands for the new phi.
831 SmallVector<Value *, 4> NewIncoming;
832 unsigned NumZexts = 0;
833 unsigned NumConsts = 0;
834 for (Value *V : Phi.incoming_values()) {
835 if (auto *Zext = dyn_cast<ZExtInst>(V)) {
836 // All zexts must be identical and have one user.
837 if (Zext->getSrcTy() != NarrowType || !Zext->hasOneUser())
838 return nullptr;
839 NewIncoming.push_back(Zext->getOperand(0));
840 NumZexts++;
841 } else if (auto *C = dyn_cast<Constant>(V)) {
842 // Make sure that constants can fit in the new type.
843 Constant *Trunc = getLosslessUnsignedTrunc(C, NarrowType, DL);
844 if (!Trunc)
845 return nullptr;
846 NewIncoming.push_back(Trunc);
847 NumConsts++;
848 } else {
849 // If it's not a cast or a constant, bail out.
850 return nullptr;
851 }
852 }
853
854 // The more common cases of a phi with no constant operands or just one
855 // variable operand are handled by FoldPHIArgOpIntoPHI() and foldOpIntoPhi()
856 // respectively. foldOpIntoPhi() wants to do the opposite transform that is
857 // performed here. It tries to replicate a cast in the phi operand's basic
858 // block to expose other folding opportunities. Thus, InstCombine will
859 // infinite loop without this check.
860 if (NumConsts == 0 || NumZexts < 2)
861 return nullptr;
862
863 // All incoming values are zexts or constants that are safe to truncate.
864 // Create a new phi node of the narrow type, phi together all of the new
865 // operands, and zext the result back to the original type.
866 PHINode *NewPhi = PHINode::Create(NarrowType, NumIncomingValues,
867 Phi.getName() + ".shrunk");
868 for (unsigned I = 0; I != NumIncomingValues; ++I)
869 NewPhi->addIncoming(NewIncoming[I], Phi.getIncomingBlock(I));
870
871 InsertNewInstBefore(NewPhi, Phi.getIterator());
872 auto *CI = CastInst::CreateZExtOrBitCast(NewPhi, Phi.getType());
873
874 // We use a dropped location here because the new ZExt is necessarily a merge
875 // of ZExtInsts and at least one constant from incoming branches; the presence
876 // of the constant means we have no viable DebugLoc from that branch, and
877 // therefore we must use a dropped location.
878 CI->setDebugLoc(DebugLoc::getDropped());
879 return CI;
880}
881
882/// If all operands to a PHI node are the same "unary" operator and they all are
883/// only used by the PHI, PHI together their inputs, and do the operation once,
884/// to the result of the PHI.
886 // We cannot create a new instruction after the PHI if the terminator is an
887 // EHPad because there is no valid insertion point.
888 if (Instruction *TI = PN.getParent()->getTerminator())
889 if (TI->isEHPad())
890 return nullptr;
891
893
894 if (isa<GetElementPtrInst>(FirstInst))
895 return foldPHIArgGEPIntoPHI(PN);
896 if (isa<LoadInst>(FirstInst))
897 return foldPHIArgLoadIntoPHI(PN);
898 if (isa<InsertValueInst>(FirstInst))
900 if (isa<ExtractValueInst>(FirstInst))
902
903 // Scan the instruction, looking for input operations that can be folded away.
904 // If all input operands to the phi are the same instruction (e.g. a cast from
905 // the same type or "+42") we can pull the operation through the PHI, reducing
906 // code size and simplifying code.
907 Constant *ConstantOp = nullptr;
908 Type *CastSrcTy = nullptr;
909
910 if (isa<CastInst>(FirstInst)) {
911 CastSrcTy = FirstInst->getOperand(0)->getType();
912
913 // Be careful about transforming integer PHIs. We don't want to pessimize
914 // the code by turning an i32 into an i1293.
915 if (PN.getType()->isIntegerTy() && CastSrcTy->isIntegerTy()) {
916 if (!shouldChangeType(PN.getType(), CastSrcTy))
917 return nullptr;
918 }
919 } else if (isa<BinaryOperator>(FirstInst) || isa<CmpInst>(FirstInst)) {
920 // Can fold binop, compare or shift here if the RHS is a constant,
921 // otherwise call FoldPHIArgBinOpIntoPHI.
922 ConstantOp = dyn_cast<Constant>(FirstInst->getOperand(1));
923 if (!ConstantOp)
924 return foldPHIArgBinOpIntoPHI(PN);
925 } else {
926 return nullptr; // Cannot fold this operation.
927 }
928
929 // Check to see if all arguments are the same operation.
930 for (Value *V : drop_begin(PN.incoming_values())) {
932 if (!I || !I->hasOneUser() || !I->isSameOperationAs(FirstInst))
933 return nullptr;
934 if (CastSrcTy) {
935 if (I->getOperand(0)->getType() != CastSrcTy)
936 return nullptr; // Cast operation must match.
937 } else if (I->getOperand(1) != ConstantOp) {
938 return nullptr;
939 }
940 }
941
942 // Okay, they are all the same operation. Create a new PHI node of the
943 // correct type, and PHI together all of the LHS's of the instructions.
944 PHINode *NewPN = PHINode::Create(FirstInst->getOperand(0)->getType(),
946 PN.getName()+".in");
947
948 Value *InVal = FirstInst->getOperand(0);
949 NewPN->addIncoming(InVal, PN.getIncomingBlock(0));
950
951 // Add all operands to the new PHI.
952 for (auto Incoming : drop_begin(zip(PN.blocks(), PN.incoming_values()))) {
953 BasicBlock *BB = std::get<0>(Incoming);
954 Value *V = std::get<1>(Incoming);
955 Value *NewInVal = cast<Instruction>(V)->getOperand(0);
956 if (NewInVal != InVal)
957 InVal = nullptr;
958 NewPN->addIncoming(NewInVal, BB);
959 }
960
961 Value *PhiVal;
962 if (InVal) {
963 // The new PHI unions all of the same values together. This is really
964 // common, so we handle it intelligently here for compile-time speed.
965 PhiVal = InVal;
966 delete NewPN;
967 } else {
968 InsertNewInstBefore(NewPN, PN.getIterator());
969 PhiVal = NewPN;
970 }
971
972 // Insert and return the new operation.
973 if (CastInst *FirstCI = dyn_cast<CastInst>(FirstInst)) {
974 CastInst *NewCI = CastInst::Create(FirstCI->getOpcode(), PhiVal,
975 PN.getType());
976 PHIArgMergedDebugLoc(NewCI, PN);
977 return NewCI;
978 }
979
980 if (BinaryOperator *BinOp = dyn_cast<BinaryOperator>(FirstInst)) {
981 BinOp = BinaryOperator::Create(BinOp->getOpcode(), PhiVal, ConstantOp);
982 BinOp->copyIRFlags(PN.getIncomingValue(0));
983
984 for (Value *V : drop_begin(PN.incoming_values()))
985 BinOp->andIRFlags(V);
986
987 PHIArgMergedDebugLoc(BinOp, PN);
988 return BinOp;
989 }
990
991 CmpInst *CIOp = cast<CmpInst>(FirstInst);
992 CmpInst *NewCI = CmpInst::Create(CIOp->getOpcode(), CIOp->getPredicate(),
993 PhiVal, ConstantOp);
994 PHIArgMergedDebugLoc(NewCI, PN);
995 return NewCI;
996}
997
998/// Return true if this phi node is always equal to NonPhiInVal.
999/// This happens with mutually cyclic phi nodes like:
1000/// z = some value; x = phi (y, z); y = phi (x, z)
1001static bool PHIsEqualValue(PHINode *PN, Value *&NonPhiInVal,
1002 SmallPtrSetImpl<PHINode *> &ValueEqualPHIs) {
1003 // See if we already saw this PHI node.
1004 if (!ValueEqualPHIs.insert(PN).second)
1005 return true;
1006
1007 // Don't scan crazily complex things.
1008 if (ValueEqualPHIs.size() >= 16)
1009 return false;
1010
1011 // Scan the operands to see if they are either phi nodes or are equal to
1012 // the value.
1013 for (Value *Op : PN->incoming_values()) {
1014 if (PHINode *OpPN = dyn_cast<PHINode>(Op)) {
1015 if (!PHIsEqualValue(OpPN, NonPhiInVal, ValueEqualPHIs)) {
1016 if (NonPhiInVal)
1017 return false;
1018 NonPhiInVal = OpPN;
1019 }
1020 } else if (Op != NonPhiInVal)
1021 return false;
1022 }
1023
1024 return true;
1025}
1026
1027/// Return an existing non-zero constant if this phi node has one, otherwise
1028/// return constant 1.
1030 assert(isa<IntegerType>(PN.getType()) && "Expect only integer type phi");
1031 for (Value *V : PN.operands())
1032 if (auto *ConstVA = dyn_cast<ConstantInt>(V))
1033 if (!ConstVA->isZero())
1034 return ConstVA;
1035 return ConstantInt::get(cast<IntegerType>(PN.getType()), 1);
1036}
1037
1038namespace {
1039struct PHIUsageRecord {
1040 unsigned PHIId; // The ID # of the PHI (something determinstic to sort on)
1041 unsigned Shift; // The amount shifted.
1042 Instruction *Inst; // The trunc instruction.
1043
1044 PHIUsageRecord(unsigned Pn, unsigned Sh, Instruction *User)
1045 : PHIId(Pn), Shift(Sh), Inst(User) {}
1046
1047 bool operator<(const PHIUsageRecord &RHS) const {
1048 if (PHIId < RHS.PHIId) return true;
1049 if (PHIId > RHS.PHIId) return false;
1050 if (Shift < RHS.Shift) return true;
1051 if (Shift > RHS.Shift) return false;
1052 return Inst->getType()->getPrimitiveSizeInBits() <
1054 }
1055};
1056
1057struct LoweredPHIRecord {
1058 PHINode *PN; // The PHI that was lowered.
1059 unsigned Shift; // The amount shifted.
1060 unsigned Width; // The width extracted.
1061
1062 LoweredPHIRecord(PHINode *Phi, unsigned Sh, Type *Ty)
1063 : PN(Phi), Shift(Sh), Width(Ty->getPrimitiveSizeInBits()) {}
1064
1065 // Ctor form used by DenseMap.
1066 LoweredPHIRecord(PHINode *Phi, unsigned Sh) : PN(Phi), Shift(Sh), Width(0) {}
1067};
1068} // namespace
1069
1070template <> struct llvm::DenseMapInfo<LoweredPHIRecord> {
1071 static inline LoweredPHIRecord getEmptyKey() {
1072 return LoweredPHIRecord(nullptr, 0);
1073 }
1074 static inline LoweredPHIRecord getTombstoneKey() {
1075 return LoweredPHIRecord(nullptr, 1);
1076 }
1077 static unsigned getHashValue(const LoweredPHIRecord &Val) {
1078 return DenseMapInfo<PHINode *>::getHashValue(Val.PN) ^ (Val.Shift >> 3) ^
1079 (Val.Width >> 3);
1080 }
1081 static bool isEqual(const LoweredPHIRecord &LHS,
1082 const LoweredPHIRecord &RHS) {
1083 return LHS.PN == RHS.PN && LHS.Shift == RHS.Shift && LHS.Width == RHS.Width;
1084 }
1085};
1086
1087/// This is an integer PHI and we know that it has an illegal type: see if it is
1088/// only used by trunc or trunc(lshr) operations. If so, we split the PHI into
1089/// the various pieces being extracted. This sort of thing is introduced when
1090/// SROA promotes an aggregate to large integer values.
1091///
1092/// TODO: The user of the trunc may be an bitcast to float/double/vector or an
1093/// inttoptr. We should produce new PHIs in the right type.
1094///
1096 // PHIUsers - Keep track of all of the truncated values extracted from a set
1097 // of PHIs, along with their offset. These are the things we want to rewrite.
1099
1100 // PHIs are often mutually cyclic, so we keep track of a whole set of PHI
1101 // nodes which are extracted from. PHIsToSlice is a set we use to avoid
1102 // revisiting PHIs, PHIsInspected is a ordered list of PHIs that we need to
1103 // check the uses of (to ensure they are all extracts).
1104 SmallVector<PHINode*, 8> PHIsToSlice;
1105 SmallPtrSet<PHINode*, 8> PHIsInspected;
1106
1107 PHIsToSlice.push_back(&FirstPhi);
1108 PHIsInspected.insert(&FirstPhi);
1109
1110 for (unsigned PHIId = 0; PHIId != PHIsToSlice.size(); ++PHIId) {
1111 PHINode *PN = PHIsToSlice[PHIId];
1112
1113 // Scan the input list of the PHI. If any input is an invoke, and if the
1114 // input is defined in the predecessor, then we won't be split the critical
1115 // edge which is required to insert a truncate. Because of this, we have to
1116 // bail out.
1117 for (auto Incoming : zip(PN->blocks(), PN->incoming_values())) {
1118 BasicBlock *BB = std::get<0>(Incoming);
1119 Value *V = std::get<1>(Incoming);
1121 if (!II)
1122 continue;
1123 if (II->getParent() != BB)
1124 continue;
1125
1126 // If we have a phi, and if it's directly in the predecessor, then we have
1127 // a critical edge where we need to put the truncate. Since we can't
1128 // split the edge in instcombine, we have to bail out.
1129 return nullptr;
1130 }
1131
1132 // If the incoming value is a PHI node before a catchswitch, we cannot
1133 // extract the value within that BB because we cannot insert any non-PHI
1134 // instructions in the BB.
1135 for (auto *Pred : PN->blocks())
1136 if (Pred->getFirstInsertionPt() == Pred->end())
1137 return nullptr;
1138
1139 for (User *U : PN->users()) {
1140 Instruction *UserI = cast<Instruction>(U);
1141
1142 // If the user is a PHI, inspect its uses recursively.
1143 if (PHINode *UserPN = dyn_cast<PHINode>(UserI)) {
1144 if (PHIsInspected.insert(UserPN).second)
1145 PHIsToSlice.push_back(UserPN);
1146 continue;
1147 }
1148
1149 // Truncates are always ok.
1150 if (isa<TruncInst>(UserI)) {
1151 PHIUsers.push_back(PHIUsageRecord(PHIId, 0, UserI));
1152 continue;
1153 }
1154
1155 // Otherwise it must be a lshr which can only be used by one trunc.
1156 if (UserI->getOpcode() != Instruction::LShr ||
1157 !UserI->hasOneUse() || !isa<TruncInst>(UserI->user_back()) ||
1158 !isa<ConstantInt>(UserI->getOperand(1)))
1159 return nullptr;
1160
1161 // Bail on out of range shifts.
1162 unsigned SizeInBits = UserI->getType()->getScalarSizeInBits();
1163 if (cast<ConstantInt>(UserI->getOperand(1))->getValue().uge(SizeInBits))
1164 return nullptr;
1165
1166 unsigned Shift = cast<ConstantInt>(UserI->getOperand(1))->getZExtValue();
1167 PHIUsers.push_back(PHIUsageRecord(PHIId, Shift, UserI->user_back()));
1168 }
1169 }
1170
1171 // If we have no users, they must be all self uses, just nuke the PHI.
1172 if (PHIUsers.empty())
1173 return replaceInstUsesWith(FirstPhi, PoisonValue::get(FirstPhi.getType()));
1174
1175 // If this phi node is transformable, create new PHIs for all the pieces
1176 // extracted out of it. First, sort the users by their offset and size.
1177 array_pod_sort(PHIUsers.begin(), PHIUsers.end());
1178
1179 LLVM_DEBUG(dbgs() << "SLICING UP PHI: " << FirstPhi << '\n';
1180 for (unsigned I = 1; I != PHIsToSlice.size(); ++I) dbgs()
1181 << "AND USER PHI #" << I << ": " << *PHIsToSlice[I] << '\n');
1182
1183 // PredValues - This is a temporary used when rewriting PHI nodes. It is
1184 // hoisted out here to avoid construction/destruction thrashing.
1186
1187 // ExtractedVals - Each new PHI we introduce is saved here so we don't
1188 // introduce redundant PHIs.
1190
1191 for (unsigned UserI = 0, UserE = PHIUsers.size(); UserI != UserE; ++UserI) {
1192 unsigned PHIId = PHIUsers[UserI].PHIId;
1193 PHINode *PN = PHIsToSlice[PHIId];
1194 unsigned Offset = PHIUsers[UserI].Shift;
1195 Type *Ty = PHIUsers[UserI].Inst->getType();
1196
1197 PHINode *EltPHI;
1198
1199 // If we've already lowered a user like this, reuse the previously lowered
1200 // value.
1201 if ((EltPHI = ExtractedVals[LoweredPHIRecord(PN, Offset, Ty)]) == nullptr) {
1202
1203 // Otherwise, Create the new PHI node for this user.
1204 EltPHI = PHINode::Create(Ty, PN->getNumIncomingValues(),
1205 PN->getName() + ".off" + Twine(Offset),
1206 PN->getIterator());
1207 assert(EltPHI->getType() != PN->getType() &&
1208 "Truncate didn't shrink phi?");
1209
1210 for (auto Incoming : zip(PN->blocks(), PN->incoming_values())) {
1211 BasicBlock *Pred = std::get<0>(Incoming);
1212 Value *InVal = std::get<1>(Incoming);
1213 Value *&PredVal = PredValues[Pred];
1214
1215 // If we already have a value for this predecessor, reuse it.
1216 if (PredVal) {
1217 EltPHI->addIncoming(PredVal, Pred);
1218 continue;
1219 }
1220
1221 // Handle the PHI self-reuse case.
1222 if (InVal == PN) {
1223 PredVal = EltPHI;
1224 EltPHI->addIncoming(PredVal, Pred);
1225 continue;
1226 }
1227
1228 if (PHINode *InPHI = dyn_cast<PHINode>(PN)) {
1229 // If the incoming value was a PHI, and if it was one of the PHIs we
1230 // already rewrote it, just use the lowered value.
1231 if (Value *Res = ExtractedVals[LoweredPHIRecord(InPHI, Offset, Ty)]) {
1232 PredVal = Res;
1233 EltPHI->addIncoming(PredVal, Pred);
1234 continue;
1235 }
1236 }
1237
1238 // Otherwise, do an extract in the predecessor.
1239 Builder.SetInsertPoint(Pred->getTerminator());
1240 Value *Res = InVal;
1241 if (Offset)
1242 Res = Builder.CreateLShr(
1243 Res, ConstantInt::get(InVal->getType(), Offset), "extract");
1244 Res = Builder.CreateTrunc(Res, Ty, "extract.t");
1245 PredVal = Res;
1246 EltPHI->addIncoming(Res, Pred);
1247
1248 // If the incoming value was a PHI, and if it was one of the PHIs we are
1249 // rewriting, we will ultimately delete the code we inserted. This
1250 // means we need to revisit that PHI to make sure we extract out the
1251 // needed piece.
1252 if (PHINode *OldInVal = dyn_cast<PHINode>(InVal))
1253 if (PHIsInspected.count(OldInVal)) {
1254 unsigned RefPHIId =
1255 find(PHIsToSlice, OldInVal) - PHIsToSlice.begin();
1256 PHIUsers.push_back(
1257 PHIUsageRecord(RefPHIId, Offset, cast<Instruction>(Res)));
1258 ++UserE;
1259 }
1260 }
1261 PredValues.clear();
1262
1263 LLVM_DEBUG(dbgs() << " Made element PHI for offset " << Offset << ": "
1264 << *EltPHI << '\n');
1265 ExtractedVals[LoweredPHIRecord(PN, Offset, Ty)] = EltPHI;
1266 }
1267
1268 // Replace the use of this piece with the PHI node.
1269 replaceInstUsesWith(*PHIUsers[UserI].Inst, EltPHI);
1270 }
1271
1272 // Replace all the remaining uses of the PHI nodes (self uses and the lshrs)
1273 // with poison.
1274 Value *Poison = PoisonValue::get(FirstPhi.getType());
1275 for (PHINode *PHI : drop_begin(PHIsToSlice))
1277 return replaceInstUsesWith(FirstPhi, Poison);
1278}
1279
1281 const DominatorTree &DT) {
1282 // Simplify the following patterns:
1283 // if (cond)
1284 // / \
1285 // ... ...
1286 // \ /
1287 // phi [true] [false]
1288 // and
1289 // switch (cond)
1290 // case v1: / \ case v2:
1291 // ... ...
1292 // \ /
1293 // phi [v1] [v2]
1294 // Make sure all inputs are constants.
1296 return nullptr;
1297
1298 BasicBlock *BB = PN.getParent();
1299 // Do not bother with unreachable instructions.
1300 if (!DT.isReachableFromEntry(BB))
1301 return nullptr;
1302
1303 // Determine which value the condition of the idom has for which successor.
1304 LLVMContext &Context = PN.getContext();
1305 auto *IDom = DT.getNode(BB)->getIDom()->getBlock();
1306 Value *Cond;
1309 auto AddSucc = [&](ConstantInt *C, BasicBlock *Succ) {
1310 SuccForValue[C] = Succ;
1311 ++SuccCount[Succ];
1312 };
1313 if (auto *BI = dyn_cast<BranchInst>(IDom->getTerminator())) {
1314 if (BI->isUnconditional())
1315 return nullptr;
1316
1317 Cond = BI->getCondition();
1318 AddSucc(ConstantInt::getTrue(Context), BI->getSuccessor(0));
1319 AddSucc(ConstantInt::getFalse(Context), BI->getSuccessor(1));
1320 } else if (auto *SI = dyn_cast<SwitchInst>(IDom->getTerminator())) {
1321 Cond = SI->getCondition();
1322 ++SuccCount[SI->getDefaultDest()];
1323 for (auto Case : SI->cases())
1324 AddSucc(Case.getCaseValue(), Case.getCaseSuccessor());
1325 } else {
1326 return nullptr;
1327 }
1328
1329 if (Cond->getType() != PN.getType())
1330 return nullptr;
1331
1332 // Check that edges outgoing from the idom's terminators dominate respective
1333 // inputs of the Phi.
1334 std::optional<bool> Invert;
1335 for (auto Pair : zip(PN.incoming_values(), PN.blocks())) {
1336 auto *Input = cast<ConstantInt>(std::get<0>(Pair));
1337 BasicBlock *Pred = std::get<1>(Pair);
1338 auto IsCorrectInput = [&](ConstantInt *Input) {
1339 // The input needs to be dominated by the corresponding edge of the idom.
1340 // This edge cannot be a multi-edge, as that would imply that multiple
1341 // different condition values follow the same edge.
1342 auto It = SuccForValue.find(Input);
1343 return It != SuccForValue.end() && SuccCount[It->second] == 1 &&
1344 DT.dominates(BasicBlockEdge(IDom, It->second),
1345 BasicBlockEdge(Pred, BB));
1346 };
1347
1348 // Depending on the constant, the condition may need to be inverted.
1349 bool NeedsInvert;
1350 if (IsCorrectInput(Input))
1351 NeedsInvert = false;
1352 else if (IsCorrectInput(cast<ConstantInt>(ConstantExpr::getNot(Input))))
1353 NeedsInvert = true;
1354 else
1355 return nullptr;
1356
1357 // Make sure the inversion requirement is always the same.
1358 if (Invert && *Invert != NeedsInvert)
1359 return nullptr;
1360
1361 Invert = NeedsInvert;
1362 }
1363
1364 if (!*Invert)
1365 return Cond;
1366
1367 // This Phi is actually opposite to branching condition of IDom. We invert
1368 // the condition that will potentially open up some opportunities for
1369 // sinking.
1370 auto InsertPt = BB->getFirstInsertionPt();
1371 if (InsertPt != BB->end()) {
1372 Self.Builder.SetInsertPoint(&*BB, InsertPt);
1373 return Self.Builder.CreateNot(Cond);
1374 }
1375
1376 return nullptr;
1377}
1378
1379// Fold iv = phi(start, iv.next = iv2.next op start)
1380// where iv2 = phi(iv2.start, iv2.next = iv2 + iv2.step)
1381// and iv2.start op start = start
1382// to iv = iv2 op start
1384 BasicBlock *BB = PN.getParent();
1385 if (PN.getNumIncomingValues() != 2)
1386 return nullptr;
1387
1388 Value *Start;
1389 Instruction *IvNext;
1390 BinaryOperator *Iv2Next;
1391 auto MatchOuterIV = [&](Value *V1, Value *V2) {
1392 if (match(V2, m_c_BinOp(m_Specific(V1), m_BinOp(Iv2Next))) ||
1393 match(V2, m_GEP(m_Specific(V1), m_BinOp(Iv2Next)))) {
1394 Start = V1;
1395 IvNext = cast<Instruction>(V2);
1396 return true;
1397 }
1398 return false;
1399 };
1400
1401 if (!MatchOuterIV(PN.getIncomingValue(0), PN.getIncomingValue(1)) &&
1402 !MatchOuterIV(PN.getIncomingValue(1), PN.getIncomingValue(0)))
1403 return nullptr;
1404
1405 PHINode *Iv2;
1406 Value *Iv2Start, *Iv2Step;
1407 if (!matchSimpleRecurrence(Iv2Next, Iv2, Iv2Start, Iv2Step) ||
1408 Iv2->getParent() != BB)
1409 return nullptr;
1410
1411 auto *BO = dyn_cast<BinaryOperator>(IvNext);
1412 Constant *Identity =
1413 BO ? ConstantExpr::getBinOpIdentity(BO->getOpcode(), Iv2Start->getType())
1414 : Constant::getNullValue(Iv2Start->getType());
1415 if (Iv2Start != Identity)
1416 return nullptr;
1417
1418 Builder.SetInsertPoint(&*BB, BB->getFirstInsertionPt());
1419 if (!BO) {
1420 auto *GEP = cast<GEPOperator>(IvNext);
1421 return Builder.CreateGEP(GEP->getSourceElementType(), Start, Iv2, "",
1422 cast<GEPOperator>(IvNext)->getNoWrapFlags());
1423 }
1424
1425 assert(BO->isCommutative() && "Must be commutative");
1426 Value *Res = Builder.CreateBinOp(BO->getOpcode(), Iv2, Start);
1427 cast<Instruction>(Res)->copyIRFlags(BO);
1428 return Res;
1429}
1430
1431// PHINode simplification
1432//
1434 if (Value *V = simplifyInstruction(&PN, SQ.getWithInstruction(&PN)))
1435 return replaceInstUsesWith(PN, V);
1436
1437 if (Instruction *Result = foldPHIArgZextsIntoPHI(PN))
1438 return Result;
1439
1440 if (Instruction *Result = foldPHIArgIntToPtrToPHI(PN))
1441 return Result;
1442
1443 // If all PHI operands are the same operation, pull them through the PHI,
1444 // reducing code size.
1445 auto *Inst0 = dyn_cast<Instruction>(PN.getIncomingValue(0));
1446 auto *Inst1 = dyn_cast<Instruction>(PN.getIncomingValue(1));
1447 if (Inst0 && Inst1 && Inst0->getOpcode() == Inst1->getOpcode() &&
1448 Inst0->hasOneUser())
1449 if (Instruction *Result = foldPHIArgOpIntoPHI(PN))
1450 return Result;
1451
1452 // If the incoming values are pointer casts of the same original value,
1453 // replace the phi with a single cast iff we can insert a non-PHI instruction.
1454 if (PN.getType()->isPointerTy() &&
1455 PN.getParent()->getFirstInsertionPt() != PN.getParent()->end()) {
1456 Value *IV0 = PN.getIncomingValue(0);
1457 Value *IV0Stripped = IV0->stripPointerCasts();
1458 // Set to keep track of values known to be equal to IV0Stripped after
1459 // stripping pointer casts.
1460 SmallPtrSet<Value *, 4> CheckedIVs;
1461 CheckedIVs.insert(IV0);
1462 if (IV0 != IV0Stripped &&
1463 all_of(PN.incoming_values(), [&CheckedIVs, IV0Stripped](Value *IV) {
1464 return !CheckedIVs.insert(IV).second ||
1465 IV0Stripped == IV->stripPointerCasts();
1466 })) {
1467 return CastInst::CreatePointerCast(IV0Stripped, PN.getType());
1468 }
1469 }
1470
1471 if (foldDeadPhiWeb(PN))
1472 return nullptr;
1473
1474 // Optimization when the phi only has one use
1475 if (PN.hasOneUse()) {
1476 if (foldIntegerTypedPHI(PN))
1477 return nullptr;
1478
1479 // If this phi has a single use, and if that use just computes a value for
1480 // the next iteration of a loop, delete the phi. This occurs with unused
1481 // induction variables, e.g. "for (int j = 0; ; ++j);". Detecting this
1482 // common case here is good because the only other things that catch this
1483 // are induction variable analysis (sometimes) and ADCE, which is only run
1484 // late.
1485 Instruction *PHIUser = cast<Instruction>(PN.user_back());
1486 if (PHIUser->hasOneUse() &&
1487 (isa<BinaryOperator>(PHIUser) || isa<UnaryOperator>(PHIUser) ||
1488 isa<GetElementPtrInst>(PHIUser)) &&
1489 PHIUser->user_back() == &PN) {
1491 }
1492 }
1493
1494 // When a PHI is used only to be compared with zero, it is safe to replace
1495 // an incoming value proved as known nonzero with any non-zero constant.
1496 // For example, in the code below, the incoming value %v can be replaced
1497 // with any non-zero constant based on the fact that the PHI is only used to
1498 // be compared with zero and %v is a known non-zero value:
1499 // %v = select %cond, 1, 2
1500 // %p = phi [%v, BB] ...
1501 // icmp eq, %p, 0
1502 // FIXME: To be simple, handle only integer type for now.
1503 // This handles a small number of uses to keep the complexity down, and an
1504 // icmp(or(phi)) can equally be replaced with any non-zero constant as the
1505 // "or" will only add bits.
1506 if (!PN.hasNUsesOrMore(3)) {
1507 SmallVector<Instruction *> DropPoisonFlags;
1508 bool AllUsesOfPhiEndsInCmp = all_of(PN.users(), [&](User *U) {
1509 auto *CmpInst = dyn_cast<ICmpInst>(U);
1510 if (!CmpInst) {
1511 // This is always correct as OR only add bits and we are checking
1512 // against 0.
1513 if (U->hasOneUse() && match(U, m_c_Or(m_Specific(&PN), m_Value()))) {
1514 DropPoisonFlags.push_back(cast<Instruction>(U));
1515 CmpInst = dyn_cast<ICmpInst>(U->user_back());
1516 }
1517 }
1518 if (!CmpInst || !isa<IntegerType>(PN.getType()) ||
1519 !CmpInst->isEquality() || !match(CmpInst->getOperand(1), m_Zero())) {
1520 return false;
1521 }
1522 return true;
1523 });
1524 // All uses of PHI results in a compare with zero.
1525 if (AllUsesOfPhiEndsInCmp) {
1526 ConstantInt *NonZeroConst = nullptr;
1527 bool MadeChange = false;
1528 for (unsigned I = 0, E = PN.getNumIncomingValues(); I != E; ++I) {
1530 Value *VA = PN.getIncomingValue(I);
1531 if (isKnownNonZero(VA, getSimplifyQuery().getWithInstruction(CtxI))) {
1532 if (!NonZeroConst)
1533 NonZeroConst = getAnyNonZeroConstInt(PN);
1534 if (NonZeroConst != VA) {
1535 replaceOperand(PN, I, NonZeroConst);
1536 // The "disjoint" flag may no longer hold after the transform.
1537 for (Instruction *I : DropPoisonFlags)
1538 I->dropPoisonGeneratingFlags();
1539 MadeChange = true;
1540 }
1541 }
1542 }
1543 if (MadeChange)
1544 return &PN;
1545 }
1546 }
1547
1548 // We sometimes end up with phi cycles that non-obviously end up being the
1549 // same value, for example:
1550 // z = some value; x = phi (y, z); y = phi (x, z)
1551 // where the phi nodes don't necessarily need to be in the same block. Do a
1552 // quick check to see if the PHI node only contains a single non-phi value, if
1553 // so, scan to see if the phi cycle is actually equal to that value. If the
1554 // phi has no non-phi values then allow the "NonPhiInVal" to be set later if
1555 // one of the phis itself does not have a single input.
1556 {
1557 unsigned InValNo = 0, NumIncomingVals = PN.getNumIncomingValues();
1558 // Scan for the first non-phi operand.
1559 while (InValNo != NumIncomingVals &&
1560 isa<PHINode>(PN.getIncomingValue(InValNo)))
1561 ++InValNo;
1562
1563 Value *NonPhiInVal =
1564 InValNo != NumIncomingVals ? PN.getIncomingValue(InValNo) : nullptr;
1565
1566 // Scan the rest of the operands to see if there are any conflicts, if so
1567 // there is no need to recursively scan other phis.
1568 if (NonPhiInVal)
1569 for (++InValNo; InValNo != NumIncomingVals; ++InValNo) {
1570 Value *OpVal = PN.getIncomingValue(InValNo);
1571 if (OpVal != NonPhiInVal && !isa<PHINode>(OpVal))
1572 break;
1573 }
1574
1575 // If we scanned over all operands, then we have one unique value plus
1576 // phi values. Scan PHI nodes to see if they all merge in each other or
1577 // the value.
1578 if (InValNo == NumIncomingVals) {
1579 SmallPtrSet<PHINode *, 16> ValueEqualPHIs;
1580 if (PHIsEqualValue(&PN, NonPhiInVal, ValueEqualPHIs))
1581 return replaceInstUsesWith(PN, NonPhiInVal);
1582 }
1583 }
1584
1585 // If there are multiple PHIs, sort their operands so that they all list
1586 // the blocks in the same order. This will help identical PHIs be eliminated
1587 // by other passes. Other passes shouldn't depend on this for correctness
1588 // however.
1589 auto Res = PredOrder.try_emplace(PN.getParent());
1590 if (!Res.second) {
1591 const auto &Preds = Res.first->second;
1592 for (unsigned I = 0, E = PN.getNumIncomingValues(); I != E; ++I) {
1593 BasicBlock *BBA = PN.getIncomingBlock(I);
1594 BasicBlock *BBB = Preds[I];
1595 if (BBA != BBB) {
1596 Value *VA = PN.getIncomingValue(I);
1597 unsigned J = PN.getBasicBlockIndex(BBB);
1598 Value *VB = PN.getIncomingValue(J);
1599 PN.setIncomingBlock(I, BBB);
1600 PN.setIncomingValue(I, VB);
1601 PN.setIncomingBlock(J, BBA);
1602 PN.setIncomingValue(J, VA);
1603 // NOTE: Instcombine normally would want us to "return &PN" if we
1604 // modified any of the operands of an instruction. However, since we
1605 // aren't adding or removing uses (just rearranging them) we don't do
1606 // this in this case.
1607 }
1608 }
1609 } else {
1610 // Remember the block order of the first encountered phi node.
1611 append_range(Res.first->second, PN.blocks());
1612 }
1613
1614 // Is there an identical PHI node in this basic block?
1615 for (PHINode &IdenticalPN : PN.getParent()->phis()) {
1616 // Ignore the PHI node itself.
1617 if (&IdenticalPN == &PN)
1618 continue;
1619 // Note that even though we've just canonicalized this PHI, due to the
1620 // worklist visitation order, there are no guarantess that *every* PHI
1621 // has been canonicalized, so we can't just compare operands ranges.
1622 if (!PN.isIdenticalToWhenDefined(&IdenticalPN))
1623 continue;
1624 // Just use that PHI instead then.
1625 ++NumPHICSEs;
1626 return replaceInstUsesWith(PN, &IdenticalPN);
1627 }
1628
1629 // If this is an integer PHI and we know that it has an illegal type, see if
1630 // it is only used by trunc or trunc(lshr) operations. If so, we split the
1631 // PHI into the various pieces being extracted. This sort of thing is
1632 // introduced when SROA promotes an aggregate to a single large integer type.
1633 if (PN.getType()->isIntegerTy() &&
1634 !DL.isLegalInteger(PN.getType()->getPrimitiveSizeInBits()))
1635 if (Instruction *Res = SliceUpIllegalIntegerPHI(PN))
1636 return Res;
1637
1638 // Ultimately, try to replace this Phi with a dominating condition.
1639 if (auto *V = simplifyUsingControlFlow(*this, PN, DT))
1640 return replaceInstUsesWith(PN, V);
1641
1642 if (Value *Res = foldDependentIVs(PN, Builder))
1643 return replaceInstUsesWith(PN, Res);
1644
1645 return nullptr;
1646}
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
Rewrite undef for PHI
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
static const Function * getParent(const Value *V)
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
Hexagon Common GEP
This file provides internal interfaces used to implement the InstCombine.
static ConstantInt * getAnyNonZeroConstInt(PHINode &PN)
Return an existing non-zero constant if this phi node has one, otherwise return constant 1.
static Value * foldDependentIVs(PHINode &PN, IRBuilderBase &Builder)
static bool isSafeAndProfitableToSinkLoad(LoadInst *L)
Return true if we know that it is safe to sink the load out of the block that defines it.
static Value * simplifyUsingControlFlow(InstCombiner &Self, PHINode &PN, const DominatorTree &DT)
static bool PHIsEqualValue(PHINode *PN, Value *&NonPhiInVal, SmallPtrSetImpl< PHINode * > &ValueEqualPHIs)
Return true if this phi node is always equal to NonPhiInVal.
static cl::opt< unsigned > MaxNumPhis("instcombine-max-num-phis", cl::init(512), cl::desc("Maximum number phis to handle in intptr/ptrint folding"))
This file provides the interface for the instcombine pass implementation.
#define I(x, y, z)
Definition MD5.cpp:57
MachineInstr unsigned OpIdx
uint64_t IntrinsicInst * II
if(PassOpts->AAPipeline)
const SmallVectorImpl< MachineOperand > & Cond
This file contains some templates that are useful if you are working with the STL at all.
This file defines the SmallPtrSet class.
This file defines the 'Statistic' class, which is designed to be an easy way to expose various metric...
#define STATISTIC(VARNAME, DESC)
Definition Statistic.h:171
#define LLVM_DEBUG(...)
Definition Debug.h:114
Value * RHS
static const uint32_t IV[8]
Definition blake3_impl.h:83
The Input class is used to parse a yaml document into in-memory structs and vectors.
an instruction to allocate memory on the stack
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:40
LLVM Basic Block Representation.
Definition BasicBlock.h:62
iterator end()
Definition BasicBlock.h:472
LLVM_ABI const_iterator getFirstInsertionPt() const
Returns an iterator to the first instruction in this block that is suitable for inserting a non-PHI i...
const Function * getParent() const
Return the enclosing method, or null if none.
Definition BasicBlock.h:213
InstListType::iterator iterator
Instruction iterators...
Definition BasicBlock.h:170
const Instruction * getTerminator() const LLVM_READONLY
Returns the terminator instruction if the block is well formed or null if the block is not well forme...
Definition BasicBlock.h:233
BinaryOps getOpcode() const
Definition InstrTypes.h:374
static LLVM_ABI BinaryOperator * Create(BinaryOps Op, Value *S1, Value *S2, const Twine &Name=Twine(), InsertPosition InsertBefore=nullptr)
Construct a binary instruction, given the opcode and the two operands.
This is the base class for all instructions that perform data casts.
Definition InstrTypes.h:448
static LLVM_ABI CastInst * CreatePointerCast(Value *S, Type *Ty, const Twine &Name="", InsertPosition InsertBefore=nullptr)
Create a BitCast, AddrSpaceCast or a PtrToInt cast instruction.
static LLVM_ABI CastInst * CreateBitOrPointerCast(Value *S, Type *Ty, const Twine &Name="", InsertPosition InsertBefore=nullptr)
Create a BitCast, a PtrToInt, or an IntToPTr cast instruction.
static LLVM_ABI CastInst * CreateZExtOrBitCast(Value *S, Type *Ty, const Twine &Name="", InsertPosition InsertBefore=nullptr)
Create a ZExt or BitCast cast instruction.
static LLVM_ABI CastInst * Create(Instruction::CastOps, Value *S, Type *Ty, const Twine &Name="", InsertPosition InsertBefore=nullptr)
Provides a way to construct any of the CastInst subclasses using an opcode instead of the subclass's ...
This class is the base class for the comparison instructions.
Definition InstrTypes.h:664
static LLVM_ABI bool isEquality(Predicate pred)
Determine if this is an equals/not equals predicate.
static LLVM_ABI CmpInst * Create(OtherOps Op, Predicate Pred, Value *S1, Value *S2, const Twine &Name="", InsertPosition InsertBefore=nullptr)
Construct a compare instruction, given the opcode, the predicate and the two operands.
Predicate getPredicate() const
Return the predicate for this instruction.
Definition InstrTypes.h:765
OtherOps getOpcode() const
Get the opcode casted to the right type.
Definition InstrTypes.h:760
static LLVM_ABI Constant * getNot(Constant *C)
static LLVM_ABI Constant * getBinOpIdentity(unsigned Opcode, Type *Ty, bool AllowRHSConstant=false, bool NSZ=false)
Return the identity constant for a binary opcode.
This is the shared class of boolean and integer constants.
Definition Constants.h:87
static LLVM_ABI ConstantInt * getTrue(LLVMContext &Context)
static LLVM_ABI ConstantInt * getFalse(LLVMContext &Context)
This is an important base class in LLVM.
Definition Constant.h:43
static LLVM_ABI Constant * getNullValue(Type *Ty)
Constructor to create a '0' constant of arbitrary type.
static DebugLoc getDropped()
Definition DebugLoc.h:163
iterator find(const_arg_type_t< KeyT > Val)
Definition DenseMap.h:178
iterator end()
Definition DenseMap.h:81
DomTreeNodeBase * getIDom() const
NodeT * getBlock() const
DomTreeNodeBase< NodeT > * getNode(const NodeT *BB) const
getNode - return the (Post)DominatorTree node for the specified basic block.
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree.
Definition Dominators.h:164
LLVM_ABI bool isReachableFromEntry(const Use &U) const
Provide an overload for a Use.
LLVM_ABI bool dominates(const BasicBlock *BB, const Use &U) const
Return true if the (end of the) basic block BB dominates the use U.
static ExtractValueInst * Create(Value *Agg, ArrayRef< unsigned > Idxs, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
Represents flags for the getelementptr instruction/expression.
an instruction for type-safe pointer arithmetic to access elements of arrays and structs
static GetElementPtrInst * Create(Type *PointeeType, Value *Ptr, ArrayRef< Value * > IdxList, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
Type * getSourceElementType() const
LLVM_ABI GEPNoWrapFlags getNoWrapFlags() const
Get the nowrap flags for the GEP instruction.
Common base class shared among various IRBuilders.
Definition IRBuilder.h:114
Value * CreateNot(Value *V, const Twine &Name="")
Definition IRBuilder.h:1808
void SetInsertPoint(BasicBlock *TheBB)
This specifies that created instructions should be appended to the end of the specified block.
Definition IRBuilder.h:207
static InsertValueInst * Create(Value *Agg, Value *Val, ArrayRef< unsigned > Idxs, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
Instruction * foldPHIArgInsertValueInstructionIntoPHI(PHINode &PN)
If we have something like phi [insertvalue(a,b,0), insertvalue(c,d,0)], turn this into a phi[a,...
Instruction * foldPHIArgBinOpIntoPHI(PHINode &PN)
If we have something like phi [add (a,b), add(a,c)] and if a/b/c and the adds all have a single user,...
Instruction * eraseInstFromFunction(Instruction &I) override
Combiner aware instruction erasure.
Instruction * visitPHINode(PHINode &PN)
Instruction * foldPHIArgOpIntoPHI(PHINode &PN)
Try to rotate an operation below a PHI node, using PHI nodes for its operands.
Instruction * foldPHIArgZextsIntoPHI(PHINode &PN)
TODO: This function could handle other cast types, but then it might require special-casing a cast fr...
Instruction * foldPHIArgLoadIntoPHI(PHINode &PN)
bool foldIntegerTypedPHI(PHINode &PN)
If an integer typed PHI has only one use which is an IntToPtr operation, replace the PHI with an exis...
bool foldDeadPhiWeb(PHINode &PN)
If the phi is within a phi web, which is formed by the def-use chain of phis and all the phis in the ...
Instruction * foldPHIArgIntToPtrToPHI(PHINode &PN)
Instruction * SliceUpIllegalIntegerPHI(PHINode &PN)
This is an integer PHI and we know that it has an illegal type: see if it is only used by trunc or tr...
Instruction * foldPHIArgGEPIntoPHI(PHINode &PN)
void PHIArgMergedDebugLoc(Instruction *Inst, PHINode &PN)
Helper function for FoldPHIArgXIntoPHI() to set debug location for the folded operation.
Instruction * foldPHIArgExtractValueInstructionIntoPHI(PHINode &PN)
If we have something like phi [extractvalue(a,0), extractvalue(b,0)], turn this into a phi[a,...
The core instruction combiner logic.
SimplifyQuery SQ
Instruction * InsertNewInstBefore(Instruction *New, BasicBlock::iterator Old)
Inserts an instruction New before instruction Old.
Instruction * replaceInstUsesWith(Instruction &I, Value *V)
A combiner-aware RAUW-like routine.
const DataLayout & DL
Instruction * replaceOperand(Instruction &I, unsigned OpNum, Value *V)
Replace operand of instruction and add old operand to the worklist.
DominatorTree & DT
BuilderTy & Builder
const SimplifyQuery & getSimplifyQuery() const
LLVM_ABI void copyIRFlags(const Value *V, bool IncludeWrapFlags=true)
Convenience method to copy supported exact, fast-math, and (optionally) wrapping flags from V to this...
const DebugLoc & getDebugLoc() const
Return the debug location for this node as a DebugLoc.
LLVM_ABI void andIRFlags(const Value *V)
Logical 'and' of any supported wrapping, exact, and fast-math flags of V and this instruction.
LLVM_ABI bool isAtomic() const LLVM_READONLY
Return true if this instruction has an AtomicOrdering of unordered or higher.
Instruction * user_back()
Specialize the methods defined in Value, as we know that an instruction can only be used by other ins...
unsigned getOpcode() const
Returns a member of one of the enums like Instruction::Add.
void setDebugLoc(DebugLoc Loc)
Set the debug location information for this instruction.
LLVM_ABI void copyMetadata(const Instruction &SrcInst, ArrayRef< unsigned > WL=ArrayRef< unsigned >())
Copy metadata from SrcInst to this instruction.
LLVM_ABI void applyMergedLocation(DebugLoc LocA, DebugLoc LocB)
Merge 2 debug locations and apply it to the Instruction.
Invoke instruction.
This is an important class for using LLVM in a threaded context.
Definition LLVMContext.h:68
An instruction for reading from memory.
unsigned getPointerAddressSpace() const
Returns the address space of the pointer operand.
bool isVolatile() const
Return true if this is a load from a volatile memory location.
Align getAlign() const
Return the alignment of the access that is being performed.
void addIncoming(Value *V, BasicBlock *BB)
Add an incoming value to the end of the PHI list.
iterator_range< const_block_iterator > blocks() const
op_range incoming_values()
BasicBlock * getIncomingBlock(unsigned i) const
Return incoming basic block number i.
Value * getIncomingValue(unsigned i) const
Return incoming value number x.
unsigned getNumIncomingValues() const
Return the number of incoming edges.
static PHINode * Create(Type *Ty, unsigned NumReservedValues, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
Constructors - NumReservedValues is a hint for the number of incoming edges that this phi node will h...
static LLVM_ABI PoisonValue * get(Type *T)
Static factory methods - Return an 'poison' object of the specified type.
size_type size() const
Definition SmallPtrSet.h:99
A templated base class for SmallPtrSet which provides the typesafe interface that is common across al...
size_type count(ConstPtrType Ptr) const
count - Return 1 if the specified pointer is in the set, 0 otherwise.
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
reference emplace_back(ArgTypes &&... Args)
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
An instruction for storing to memory.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition Twine.h:82
The instances of the Type class are immutable: once they are created, they are never changed.
Definition Type.h:45
bool isPointerTy() const
True if this is an instance of PointerType.
Definition Type.h:267
LLVM_ABI TypeSize getPrimitiveSizeInBits() const LLVM_READONLY
Return the basic size of this type if it is a primitive type.
Definition Type.cpp:197
LLVM_ABI unsigned getScalarSizeInBits() const LLVM_READONLY
If this is a vector type, return the getPrimitiveSizeInBits value for the element type.
Definition Type.cpp:230
bool isIntegerTy() const
True if this is an instance of IntegerType.
Definition Type.h:240
A Use represents the edge between a Value definition and its users.
Definition Use.h:35
op_range operands()
Definition User.h:292
op_iterator op_begin()
Definition User.h:284
void setOperand(unsigned i, Value *Val)
Definition User.h:237
Value * getOperand(unsigned i) const
Definition User.h:232
unsigned getNumOperands() const
Definition User.h:254
op_iterator op_end()
Definition User.h:286
LLVM Value Representation.
Definition Value.h:75
Type * getType() const
All values are typed, get the type of this value.
Definition Value.h:256
LLVM_ABI bool hasOneUser() const
Return true if there is exactly one user of this value.
Definition Value.cpp:166
bool hasOneUse() const
Return true if there is exactly one use of this value.
Definition Value.h:439
iterator_range< user_iterator > users()
Definition Value.h:426
LLVM_ABI bool hasNUsesOrMore(unsigned N) const
Return true if this value has N uses or more.
Definition Value.cpp:158
LLVM_ABI const Value * stripPointerCasts() const
Strip off pointer casts, all-zero GEPs and address space casts.
Definition Value.cpp:701
LLVM_ABI LLVMContext & getContext() const
All values hold a context through their type.
Definition Value.cpp:1099
LLVM_ABI StringRef getName() const
Return a constant reference to the value's name.
Definition Value.cpp:322
const ParentTy * getParent() const
Definition ilist_node.h:34
self_iterator getIterator()
Definition ilist_node.h:123
@ C
The default llvm calling convention, compatible with C.
Definition CallingConv.h:34
class_match< BinaryOperator > m_BinOp()
Match an arbitrary binary operation and ignore it.
bool match(Val *V, const Pattern &P)
specificval_ty m_Specific(const Value *V)
Match if we have a specific specified value.
auto m_GEP(const OperandTypes &...Ops)
Matches GetElementPtrInst.
AnyBinaryOp_match< LHS, RHS, true > m_c_BinOp(const LHS &L, const RHS &R)
Matches a BinaryOperator with LHS and RHS in either order.
is_zero m_Zero()
Match any null constant or a vector with all elements equal to 0.
initializer< Ty > init(const Ty &Val)
@ User
could "use" a pointer
NodeAddr< PhiNode * > Phi
Definition RDFGraph.h:390
friend class Instruction
Iterator for Instructions in a `BasicBlock.
Definition BasicBlock.h:73
This is an optimization pass for GlobalISel generic memory operations.
auto drop_begin(T &&RangeOrContainer, size_t N=1)
Return a range covering RangeOrContainer with the first N elements excluded.
Definition STLExtras.h:316
@ Offset
Definition DWP.cpp:532
detail::zippy< detail::zip_shortest, T, U, Args... > zip(T &&t, U &&u, Args &&...args)
zip iterator for two or more iteratable types.
Definition STLExtras.h:829
bool operator<(int64_t V1, const APSInt &V2)
Definition APSInt.h:362
auto find(R &&Range, const T &Val)
Provide wrappers to std::find which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1763
bool all_of(R &&range, UnaryPredicate P)
Provide wrappers to std::all_of which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1737
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:643
void append_range(Container &C, Range &&R)
Wrapper function to append range R to container C.
Definition STLExtras.h:2148
LLVM_ABI Value * simplifyInstruction(Instruction *I, const SimplifyQuery &Q)
See if we can compute a simplified version of this instruction.
LLVM_ABI bool matchSimpleRecurrence(const PHINode *P, BinaryOperator *&BO, Value *&Start, Value *&Step)
Attempt to match a simple first order recurrence cycle of the form: iv = phi Ty [Start,...
bool any_of(R &&range, UnaryPredicate P)
Provide wrappers to std::any_of which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1744
LLVM_ABI Constant * getLosslessUnsignedTrunc(Constant *C, Type *DestTy, const DataLayout &DL, PreservedCastFlags *Flags=nullptr)
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Definition Debug.cpp:207
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
Definition Casting.h:547
LLVM_ABI bool isKnownNonZero(const Value *V, const SimplifyQuery &Q, unsigned Depth=0)
Return true if the given value is known to be non-zero when defined.
LLVM_ABI void combineMetadataForCSE(Instruction *K, const Instruction *J, bool DoesKMove)
Combine the metadata of two instructions so that K can replace J.
Definition Local.cpp:3094
LLVM_ABI bool canReplaceOperandWithVariable(const Instruction *I, unsigned OpIdx)
Given an instruction, is it legal to set operand OpIdx to a non-constant value?
Definition Local.cpp:3875
DWARFExpression::Operation Op
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:559
void array_pod_sort(IteratorTy Start, IteratorTy End)
array_pod_sort - This sorts an array with the specified start and end extent.
Definition STLExtras.h:1594
constexpr detail::IsaCheckPredicate< Types... > IsaPred
Function object wrapper for the llvm::isa type check.
Definition Casting.h:866
This struct is a compact representation of a valid (non-zero power of two) alignment.
Definition Alignment.h:39
static bool isEqual(const LoweredPHIRecord &LHS, const LoweredPHIRecord &RHS)
static unsigned getHashValue(const LoweredPHIRecord &Val)
static LoweredPHIRecord getTombstoneKey()
An information struct used to provide DenseMap with the various necessary components for a given valu...
Incoming for lane maks phi as machine instruction, incoming register Reg and incoming block Block are...