Home | History | Annotate | Download | only in InstCombine
      1 //===- InstCombinePHI.cpp -------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file implements the visitPHINode function.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "InstCombineInternal.h"
     15 #include "llvm/ADT/STLExtras.h"
     16 #include "llvm/ADT/SmallPtrSet.h"
     17 #include "llvm/Analysis/InstructionSimplify.h"
     18 #include "llvm/Transforms/Utils/Local.h"
     19 using namespace llvm;
     20 
     21 #define DEBUG_TYPE "instcombine"
     22 
     23 /// If we have something like phi [add (a,b), add(a,c)] and if a/b/c and the
     24 /// adds all have a single use, turn this into a phi and a single binop.
     25 Instruction *InstCombiner::FoldPHIArgBinOpIntoPHI(PHINode &PN) {
     26   Instruction *FirstInst = cast<Instruction>(PN.getIncomingValue(0));
     27   assert(isa<BinaryOperator>(FirstInst) || isa<CmpInst>(FirstInst));
     28   unsigned Opc = FirstInst->getOpcode();
     29   Value *LHSVal = FirstInst->getOperand(0);
     30   Value *RHSVal = FirstInst->getOperand(1);
     31 
     32   Type *LHSType = LHSVal->getType();
     33   Type *RHSType = RHSVal->getType();
     34 
     35   bool isNUW = false, isNSW = false, isExact = false;
     36   if (OverflowingBinaryOperator *BO =
     37         dyn_cast<OverflowingBinaryOperator>(FirstInst)) {
     38     isNUW = BO->hasNoUnsignedWrap();
     39     isNSW = BO->hasNoSignedWrap();
     40   } else if (PossiblyExactOperator *PEO =
     41                dyn_cast<PossiblyExactOperator>(FirstInst))
     42     isExact = PEO->isExact();
     43 
     44   // Scan to see if all operands are the same opcode, and all have one use.
     45   for (unsigned i = 1; i != PN.getNumIncomingValues(); ++i) {
     46     Instruction *I = dyn_cast<Instruction>(PN.getIncomingValue(i));
     47     if (!I || I->getOpcode() != Opc || !I->hasOneUse() ||
     48         // Verify type of the LHS matches so we don't fold cmp's of different
     49         // types.
     50         I->getOperand(0)->getType() != LHSType ||
     51         I->getOperand(1)->getType() != RHSType)
     52       return nullptr;
     53 
     54     // If they are CmpInst instructions, check their predicates
     55     if (CmpInst *CI = dyn_cast<CmpInst>(I))
     56       if (CI->getPredicate() != cast<CmpInst>(FirstInst)->getPredicate())
     57         return nullptr;
     58 
     59     if (isNUW)
     60       isNUW = cast<OverflowingBinaryOperator>(I)->hasNoUnsignedWrap();
     61     if (isNSW)
     62       isNSW = cast<OverflowingBinaryOperator>(I)->hasNoSignedWrap();
     63     if (isExact)
     64       isExact = cast<PossiblyExactOperator>(I)->isExact();
     65 
     66     // Keep track of which operand needs a phi node.
     67     if (I->getOperand(0) != LHSVal) LHSVal = nullptr;
     68     if (I->getOperand(1) != RHSVal) RHSVal = nullptr;
     69   }
     70 
     71   // If both LHS and RHS would need a PHI, don't do this transformation,
     72   // because it would increase the number of PHIs entering the block,
     73   // which leads to higher register pressure. This is especially
     74   // bad when the PHIs are in the header of a loop.
     75   if (!LHSVal && !RHSVal)
     76     return nullptr;
     77 
     78   // Otherwise, this is safe to transform!
     79 
     80   Value *InLHS = FirstInst->getOperand(0);
     81   Value *InRHS = FirstInst->getOperand(1);
     82   PHINode *NewLHS = nullptr, *NewRHS = nullptr;
     83   if (!LHSVal) {
     84     NewLHS = PHINode::Create(LHSType, PN.getNumIncomingValues(),
     85                              FirstInst->getOperand(0)->getName() + ".pn");
     86     NewLHS->addIncoming(InLHS, PN.getIncomingBlock(0));
     87     InsertNewInstBefore(NewLHS, PN);
     88     LHSVal = NewLHS;
     89   }
     90 
     91   if (!RHSVal) {
     92     NewRHS = PHINode::Create(RHSType, PN.getNumIncomingValues(),
     93                              FirstInst->getOperand(1)->getName() + ".pn");
     94     NewRHS->addIncoming(InRHS, PN.getIncomingBlock(0));
     95     InsertNewInstBefore(NewRHS, PN);
     96     RHSVal = NewRHS;
     97   }
     98 
     99   // Add all operands to the new PHIs.
    100   if (NewLHS || NewRHS) {
    101     for (unsigned i = 1, e = PN.getNumIncomingValues(); i != e; ++i) {
    102       Instruction *InInst = cast<Instruction>(PN.getIncomingValue(i));
    103       if (NewLHS) {
    104         Value *NewInLHS = InInst->getOperand(0);
    105         NewLHS->addIncoming(NewInLHS, PN.getIncomingBlock(i));
    106       }
    107       if (NewRHS) {
    108         Value *NewInRHS = InInst->getOperand(1);
    109         NewRHS->addIncoming(NewInRHS, PN.getIncomingBlock(i));
    110       }
    111     }
    112   }
    113 
    114   if (CmpInst *CIOp = dyn_cast<CmpInst>(FirstInst)) {
    115     CmpInst *NewCI = CmpInst::Create(CIOp->getOpcode(), CIOp->getPredicate(),
    116                                      LHSVal, RHSVal);
    117     NewCI->setDebugLoc(FirstInst->getDebugLoc());
    118     return NewCI;
    119   }
    120 
    121   BinaryOperator *BinOp = cast<BinaryOperator>(FirstInst);
    122   BinaryOperator *NewBinOp =
    123     BinaryOperator::Create(BinOp->getOpcode(), LHSVal, RHSVal);
    124   if (isNUW) NewBinOp->setHasNoUnsignedWrap();
    125   if (isNSW) NewBinOp->setHasNoSignedWrap();
    126   if (isExact) NewBinOp->setIsExact();
    127   NewBinOp->setDebugLoc(FirstInst->getDebugLoc());
    128   return NewBinOp;
    129 }
    130 
    131 Instruction *InstCombiner::FoldPHIArgGEPIntoPHI(PHINode &PN) {
    132   GetElementPtrInst *FirstInst =cast<GetElementPtrInst>(PN.getIncomingValue(0));
    133 
    134   SmallVector<Value*, 16> FixedOperands(FirstInst->op_begin(),
    135                                         FirstInst->op_end());
    136   // This is true if all GEP bases are allocas and if all indices into them are
    137   // constants.
    138   bool AllBasePointersAreAllocas = true;
    139 
    140   // We don't want to replace this phi if the replacement would require
    141   // more than one phi, which leads to higher register pressure. This is
    142   // especially bad when the PHIs are in the header of a loop.
    143   bool NeededPhi = false;
    144 
    145   bool AllInBounds = true;
    146 
    147   // Scan to see if all operands are the same opcode, and all have one use.
    148   for (unsigned i = 1; i != PN.getNumIncomingValues(); ++i) {
    149     GetElementPtrInst *GEP= dyn_cast<GetElementPtrInst>(PN.getIncomingValue(i));
    150     if (!GEP || !GEP->hasOneUse() || GEP->getType() != FirstInst->getType() ||
    151       GEP->getNumOperands() != FirstInst->getNumOperands())
    152       return nullptr;
    153 
    154     AllInBounds &= GEP->isInBounds();
    155 
    156     // Keep track of whether or not all GEPs are of alloca pointers.
    157     if (AllBasePointersAreAllocas &&
    158         (!isa<AllocaInst>(GEP->getOperand(0)) ||
    159          !GEP->hasAllConstantIndices()))
    160       AllBasePointersAreAllocas = false;
    161 
    162     // Compare the operand lists.
    163     for (unsigned op = 0, e = FirstInst->getNumOperands(); op != e; ++op) {
    164       if (FirstInst->getOperand(op) == GEP->getOperand(op))
    165         continue;
    166 
    167       // Don't merge two GEPs when two operands differ (introducing phi nodes)
    168       // if one of the PHIs has a constant for the index.  The index may be
    169       // substantially cheaper to compute for the constants, so making it a
    170       // variable index could pessimize the path.  This also handles the case
    171       // for struct indices, which must always be constant.
    172       if (isa<ConstantInt>(FirstInst->getOperand(op)) ||
    173           isa<ConstantInt>(GEP->getOperand(op)))
    174         return nullptr;
    175 
    176       if (FirstInst->getOperand(op)->getType() !=GEP->getOperand(op)->getType())
    177         return nullptr;
    178 
    179       // If we already needed a PHI for an earlier operand, and another operand
    180       // also requires a PHI, we'd be introducing more PHIs than we're
    181       // eliminating, which increases register pressure on entry to the PHI's
    182       // block.
    183       if (NeededPhi)
    184         return nullptr;
    185 
    186       FixedOperands[op] = nullptr;  // Needs a PHI.
    187       NeededPhi = true;
    188     }
    189   }
    190 
    191   // If all of the base pointers of the PHI'd GEPs are from allocas, don't
    192   // bother doing this transformation.  At best, this will just save a bit of
    193   // offset calculation, but all the predecessors will have to materialize the
    194   // stack address into a register anyway.  We'd actually rather *clone* the
    195   // load up into the predecessors so that we have a load of a gep of an alloca,
    196   // which can usually all be folded into the load.
    197   if (AllBasePointersAreAllocas)
    198     return nullptr;
    199 
    200   // Otherwise, this is safe to transform.  Insert PHI nodes for each operand
    201   // that is variable.
    202   SmallVector<PHINode*, 16> OperandPhis(FixedOperands.size());
    203 
    204   bool HasAnyPHIs = false;
    205   for (unsigned i = 0, e = FixedOperands.size(); i != e; ++i) {
    206     if (FixedOperands[i]) continue;  // operand doesn't need a phi.
    207     Value *FirstOp = FirstInst->getOperand(i);
    208     PHINode *NewPN = PHINode::Create(FirstOp->getType(), e,
    209                                      FirstOp->getName()+".pn");
    210     InsertNewInstBefore(NewPN, PN);
    211 
    212     NewPN->addIncoming(FirstOp, PN.getIncomingBlock(0));
    213     OperandPhis[i] = NewPN;
    214     FixedOperands[i] = NewPN;
    215     HasAnyPHIs = true;
    216   }
    217 
    218 
    219   // Add all operands to the new PHIs.
    220   if (HasAnyPHIs) {
    221     for (unsigned i = 1, e = PN.getNumIncomingValues(); i != e; ++i) {
    222       GetElementPtrInst *InGEP =cast<GetElementPtrInst>(PN.getIncomingValue(i));
    223       BasicBlock *InBB = PN.getIncomingBlock(i);
    224 
    225       for (unsigned op = 0, e = OperandPhis.size(); op != e; ++op)
    226         if (PHINode *OpPhi = OperandPhis[op])
    227           OpPhi->addIncoming(InGEP->getOperand(op), InBB);
    228     }
    229   }
    230 
    231   Value *Base = FixedOperands[0];
    232   GetElementPtrInst *NewGEP =
    233       GetElementPtrInst::Create(FirstInst->getSourceElementType(), Base,
    234                                 makeArrayRef(FixedOperands).slice(1));
    235   if (AllInBounds) NewGEP->setIsInBounds();
    236   NewGEP->setDebugLoc(FirstInst->getDebugLoc());
    237   return NewGEP;
    238 }
    239 
    240 
    241 /// Return true if we know that it is safe to sink the load out of the block
    242 /// that defines it. This means that it must be obvious the value of the load is
    243 /// not changed from the point of the load to the end of the block it is in.
    244 ///
    245 /// Finally, it is safe, but not profitable, to sink a load targeting a
    246 /// non-address-taken alloca.  Doing so will cause us to not promote the alloca
    247 /// to a register.
    248 static bool isSafeAndProfitableToSinkLoad(LoadInst *L) {
    249   BasicBlock::iterator BBI = L->getIterator(), E = L->getParent()->end();
    250 
    251   for (++BBI; BBI != E; ++BBI)
    252     if (BBI->mayWriteToMemory())
    253       return false;
    254 
    255   // Check for non-address taken alloca.  If not address-taken already, it isn't
    256   // profitable to do this xform.
    257   if (AllocaInst *AI = dyn_cast<AllocaInst>(L->getOperand(0))) {
    258     bool isAddressTaken = false;
    259     for (User *U : AI->users()) {
    260       if (isa<LoadInst>(U)) continue;
    261       if (StoreInst *SI = dyn_cast<StoreInst>(U)) {
    262         // If storing TO the alloca, then the address isn't taken.
    263         if (SI->getOperand(1) == AI) continue;
    264       }
    265       isAddressTaken = true;
    266       break;
    267     }
    268 
    269     if (!isAddressTaken && AI->isStaticAlloca())
    270       return false;
    271   }
    272 
    273   // If this load is a load from a GEP with a constant offset from an alloca,
    274   // then we don't want to sink it.  In its present form, it will be
    275   // load [constant stack offset].  Sinking it will cause us to have to
    276   // materialize the stack addresses in each predecessor in a register only to
    277   // do a shared load from register in the successor.
    278   if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(L->getOperand(0)))
    279     if (AllocaInst *AI = dyn_cast<AllocaInst>(GEP->getOperand(0)))
    280       if (AI->isStaticAlloca() && GEP->hasAllConstantIndices())
    281         return false;
    282 
    283   return true;
    284 }
    285 
    286 Instruction *InstCombiner::FoldPHIArgLoadIntoPHI(PHINode &PN) {
    287   LoadInst *FirstLI = cast<LoadInst>(PN.getIncomingValue(0));
    288 
    289   // FIXME: This is overconservative; this transform is allowed in some cases
    290   // for atomic operations.
    291   if (FirstLI->isAtomic())
    292     return nullptr;
    293 
    294   // When processing loads, we need to propagate two bits of information to the
    295   // sunk load: whether it is volatile, and what its alignment is.  We currently
    296   // don't sink loads when some have their alignment specified and some don't.
    297   // visitLoadInst will propagate an alignment onto the load when TD is around,
    298   // and if TD isn't around, we can't handle the mixed case.
    299   bool isVolatile = FirstLI->isVolatile();
    300   unsigned LoadAlignment = FirstLI->getAlignment();
    301   unsigned LoadAddrSpace = FirstLI->getPointerAddressSpace();
    302 
    303   // We can't sink the load if the loaded value could be modified between the
    304   // load and the PHI.
    305   if (FirstLI->getParent() != PN.getIncomingBlock(0) ||
    306       !isSafeAndProfitableToSinkLoad(FirstLI))
    307     return nullptr;
    308 
    309   // If the PHI is of volatile loads and the load block has multiple
    310   // successors, sinking it would remove a load of the volatile value from
    311   // the path through the other successor.
    312   if (isVolatile &&
    313       FirstLI->getParent()->getTerminator()->getNumSuccessors() != 1)
    314     return nullptr;
    315 
    316   // Check to see if all arguments are the same operation.
    317   for (unsigned i = 1, e = PN.getNumIncomingValues(); i != e; ++i) {
    318     LoadInst *LI = dyn_cast<LoadInst>(PN.getIncomingValue(i));
    319     if (!LI || !LI->hasOneUse())
    320       return nullptr;
    321 
    322     // We can't sink the load if the loaded value could be modified between
    323     // the load and the PHI.
    324     if (LI->isVolatile() != isVolatile ||
    325         LI->getParent() != PN.getIncomingBlock(i) ||
    326         LI->getPointerAddressSpace() != LoadAddrSpace ||
    327         !isSafeAndProfitableToSinkLoad(LI))
    328       return nullptr;
    329 
    330     // If some of the loads have an alignment specified but not all of them,
    331     // we can't do the transformation.
    332     if ((LoadAlignment != 0) != (LI->getAlignment() != 0))
    333       return nullptr;
    334 
    335     LoadAlignment = std::min(LoadAlignment, LI->getAlignment());
    336 
    337     // If the PHI is of volatile loads and the load block has multiple
    338     // successors, sinking it would remove a load of the volatile value from
    339     // the path through the other successor.
    340     if (isVolatile &&
    341         LI->getParent()->getTerminator()->getNumSuccessors() != 1)
    342       return nullptr;
    343   }
    344 
    345   // Okay, they are all the same operation.  Create a new PHI node of the
    346   // correct type, and PHI together all of the LHS's of the instructions.
    347   PHINode *NewPN = PHINode::Create(FirstLI->getOperand(0)->getType(),
    348                                    PN.getNumIncomingValues(),
    349                                    PN.getName()+".in");
    350 
    351   Value *InVal = FirstLI->getOperand(0);
    352   NewPN->addIncoming(InVal, PN.getIncomingBlock(0));
    353   LoadInst *NewLI = new LoadInst(NewPN, "", isVolatile, LoadAlignment);
    354 
    355   unsigned KnownIDs[] = {
    356     LLVMContext::MD_tbaa,
    357     LLVMContext::MD_range,
    358     LLVMContext::MD_invariant_load,
    359     LLVMContext::MD_alias_scope,
    360     LLVMContext::MD_noalias,
    361     LLVMContext::MD_nonnull,
    362     LLVMContext::MD_align,
    363     LLVMContext::MD_dereferenceable,
    364     LLVMContext::MD_dereferenceable_or_null,
    365   };
    366 
    367   for (unsigned ID : KnownIDs)
    368     NewLI->setMetadata(ID, FirstLI->getMetadata(ID));
    369 
    370   // Add all operands to the new PHI and combine TBAA metadata.
    371   for (unsigned i = 1, e = PN.getNumIncomingValues(); i != e; ++i) {
    372     LoadInst *LI = cast<LoadInst>(PN.getIncomingValue(i));
    373     combineMetadata(NewLI, LI, KnownIDs);
    374     Value *NewInVal = LI->getOperand(0);
    375     if (NewInVal != InVal)
    376       InVal = nullptr;
    377     NewPN->addIncoming(NewInVal, PN.getIncomingBlock(i));
    378   }
    379 
    380   if (InVal) {
    381     // The new PHI unions all of the same values together.  This is really
    382     // common, so we handle it intelligently here for compile-time speed.
    383     NewLI->setOperand(0, InVal);
    384     delete NewPN;
    385   } else {
    386     InsertNewInstBefore(NewPN, PN);
    387   }
    388 
    389   // If this was a volatile load that we are merging, make sure to loop through
    390   // and mark all the input loads as non-volatile.  If we don't do this, we will
    391   // insert a new volatile load and the old ones will not be deletable.
    392   if (isVolatile)
    393     for (Value *IncValue : PN.incoming_values())
    394       cast<LoadInst>(IncValue)->setVolatile(false);
    395 
    396   NewLI->setDebugLoc(FirstLI->getDebugLoc());
    397   return NewLI;
    398 }
    399 
    400 /// TODO: This function could handle other cast types, but then it might
    401 /// require special-casing a cast from the 'i1' type. See the comment in
    402 /// FoldPHIArgOpIntoPHI() about pessimizing illegal integer types.
    403 Instruction *InstCombiner::FoldPHIArgZextsIntoPHI(PHINode &Phi) {
    404   // We cannot create a new instruction after the PHI if the terminator is an
    405   // EHPad because there is no valid insertion point.
    406   if (TerminatorInst *TI = Phi.getParent()->getTerminator())
    407     if (TI->isEHPad())
    408       return nullptr;
    409 
    410   // Early exit for the common case of a phi with two operands. These are
    411   // handled elsewhere. See the comment below where we check the count of zexts
    412   // and constants for more details.
    413   unsigned NumIncomingValues = Phi.getNumIncomingValues();
    414   if (NumIncomingValues < 3)
    415     return nullptr;
    416 
    417   // Find the narrower type specified by the first zext.
    418   Type *NarrowType = nullptr;
    419   for (Value *V : Phi.incoming_values()) {
    420     if (auto *Zext = dyn_cast<ZExtInst>(V)) {
    421       NarrowType = Zext->getSrcTy();
    422       break;
    423     }
    424   }
    425   if (!NarrowType)
    426     return nullptr;
    427 
    428   // Walk the phi operands checking that we only have zexts or constants that
    429   // we can shrink for free. Store the new operands for the new phi.
    430   SmallVector<Value *, 4> NewIncoming;
    431   unsigned NumZexts = 0;
    432   unsigned NumConsts = 0;
    433   for (Value *V : Phi.incoming_values()) {
    434     if (auto *Zext = dyn_cast<ZExtInst>(V)) {
    435       // All zexts must be identical and have one use.
    436       if (Zext->getSrcTy() != NarrowType || !Zext->hasOneUse())
    437         return nullptr;
    438       NewIncoming.push_back(Zext->getOperand(0));
    439       NumZexts++;
    440     } else if (auto *C = dyn_cast<Constant>(V)) {
    441       // Make sure that constants can fit in the new type.
    442       Constant *Trunc = ConstantExpr::getTrunc(C, NarrowType);
    443       if (ConstantExpr::getZExt(Trunc, C->getType()) != C)
    444         return nullptr;
    445       NewIncoming.push_back(Trunc);
    446       NumConsts++;
    447     } else {
    448       // If it's not a cast or a constant, bail out.
    449       return nullptr;
    450     }
    451   }
    452 
    453   // The more common cases of a phi with no constant operands or just one
    454   // variable operand are handled by FoldPHIArgOpIntoPHI() and FoldOpIntoPhi()
    455   // respectively. FoldOpIntoPhi() wants to do the opposite transform that is
    456   // performed here. It tries to replicate a cast in the phi operand's basic
    457   // block to expose other folding opportunities. Thus, InstCombine will
    458   // infinite loop without this check.
    459   if (NumConsts == 0 || NumZexts < 2)
    460     return nullptr;
    461 
    462   // All incoming values are zexts or constants that are safe to truncate.
    463   // Create a new phi node of the narrow type, phi together all of the new
    464   // operands, and zext the result back to the original type.
    465   PHINode *NewPhi = PHINode::Create(NarrowType, NumIncomingValues,
    466                                     Phi.getName() + ".shrunk");
    467   for (unsigned i = 0; i != NumIncomingValues; ++i)
    468     NewPhi->addIncoming(NewIncoming[i], Phi.getIncomingBlock(i));
    469 
    470   InsertNewInstBefore(NewPhi, Phi);
    471   return CastInst::CreateZExtOrBitCast(NewPhi, Phi.getType());
    472 }
    473 
    474 /// If all operands to a PHI node are the same "unary" operator and they all are
    475 /// only used by the PHI, PHI together their inputs, and do the operation once,
    476 /// to the result of the PHI.
    477 Instruction *InstCombiner::FoldPHIArgOpIntoPHI(PHINode &PN) {
    478   // We cannot create a new instruction after the PHI if the terminator is an
    479   // EHPad because there is no valid insertion point.
    480   if (TerminatorInst *TI = PN.getParent()->getTerminator())
    481     if (TI->isEHPad())
    482       return nullptr;
    483 
    484   Instruction *FirstInst = cast<Instruction>(PN.getIncomingValue(0));
    485 
    486   if (isa<GetElementPtrInst>(FirstInst))
    487     return FoldPHIArgGEPIntoPHI(PN);
    488   if (isa<LoadInst>(FirstInst))
    489     return FoldPHIArgLoadIntoPHI(PN);
    490 
    491   // Scan the instruction, looking for input operations that can be folded away.
    492   // If all input operands to the phi are the same instruction (e.g. a cast from
    493   // the same type or "+42") we can pull the operation through the PHI, reducing
    494   // code size and simplifying code.
    495   Constant *ConstantOp = nullptr;
    496   Type *CastSrcTy = nullptr;
    497   bool isNUW = false, isNSW = false, isExact = false;
    498 
    499   if (isa<CastInst>(FirstInst)) {
    500     CastSrcTy = FirstInst->getOperand(0)->getType();
    501 
    502     // Be careful about transforming integer PHIs.  We don't want to pessimize
    503     // the code by turning an i32 into an i1293.
    504     if (PN.getType()->isIntegerTy() && CastSrcTy->isIntegerTy()) {
    505       if (!ShouldChangeType(PN.getType(), CastSrcTy))
    506         return nullptr;
    507     }
    508   } else if (isa<BinaryOperator>(FirstInst) || isa<CmpInst>(FirstInst)) {
    509     // Can fold binop, compare or shift here if the RHS is a constant,
    510     // otherwise call FoldPHIArgBinOpIntoPHI.
    511     ConstantOp = dyn_cast<Constant>(FirstInst->getOperand(1));
    512     if (!ConstantOp)
    513       return FoldPHIArgBinOpIntoPHI(PN);
    514 
    515     if (OverflowingBinaryOperator *BO =
    516         dyn_cast<OverflowingBinaryOperator>(FirstInst)) {
    517       isNUW = BO->hasNoUnsignedWrap();
    518       isNSW = BO->hasNoSignedWrap();
    519     } else if (PossiblyExactOperator *PEO =
    520                dyn_cast<PossiblyExactOperator>(FirstInst))
    521       isExact = PEO->isExact();
    522   } else {
    523     return nullptr;  // Cannot fold this operation.
    524   }
    525 
    526   // Check to see if all arguments are the same operation.
    527   for (unsigned i = 1, e = PN.getNumIncomingValues(); i != e; ++i) {
    528     Instruction *I = dyn_cast<Instruction>(PN.getIncomingValue(i));
    529     if (!I || !I->hasOneUse() || !I->isSameOperationAs(FirstInst))
    530       return nullptr;
    531     if (CastSrcTy) {
    532       if (I->getOperand(0)->getType() != CastSrcTy)
    533         return nullptr;  // Cast operation must match.
    534     } else if (I->getOperand(1) != ConstantOp) {
    535       return nullptr;
    536     }
    537 
    538     if (isNUW)
    539       isNUW = cast<OverflowingBinaryOperator>(I)->hasNoUnsignedWrap();
    540     if (isNSW)
    541       isNSW = cast<OverflowingBinaryOperator>(I)->hasNoSignedWrap();
    542     if (isExact)
    543       isExact = cast<PossiblyExactOperator>(I)->isExact();
    544   }
    545 
    546   // Okay, they are all the same operation.  Create a new PHI node of the
    547   // correct type, and PHI together all of the LHS's of the instructions.
    548   PHINode *NewPN = PHINode::Create(FirstInst->getOperand(0)->getType(),
    549                                    PN.getNumIncomingValues(),
    550                                    PN.getName()+".in");
    551 
    552   Value *InVal = FirstInst->getOperand(0);
    553   NewPN->addIncoming(InVal, PN.getIncomingBlock(0));
    554 
    555   // Add all operands to the new PHI.
    556   for (unsigned i = 1, e = PN.getNumIncomingValues(); i != e; ++i) {
    557     Value *NewInVal = cast<Instruction>(PN.getIncomingValue(i))->getOperand(0);
    558     if (NewInVal != InVal)
    559       InVal = nullptr;
    560     NewPN->addIncoming(NewInVal, PN.getIncomingBlock(i));
    561   }
    562 
    563   Value *PhiVal;
    564   if (InVal) {
    565     // The new PHI unions all of the same values together.  This is really
    566     // common, so we handle it intelligently here for compile-time speed.
    567     PhiVal = InVal;
    568     delete NewPN;
    569   } else {
    570     InsertNewInstBefore(NewPN, PN);
    571     PhiVal = NewPN;
    572   }
    573 
    574   // Insert and return the new operation.
    575   if (CastInst *FirstCI = dyn_cast<CastInst>(FirstInst)) {
    576     CastInst *NewCI = CastInst::Create(FirstCI->getOpcode(), PhiVal,
    577                                        PN.getType());
    578     NewCI->setDebugLoc(FirstInst->getDebugLoc());
    579     return NewCI;
    580   }
    581 
    582   if (BinaryOperator *BinOp = dyn_cast<BinaryOperator>(FirstInst)) {
    583     BinOp = BinaryOperator::Create(BinOp->getOpcode(), PhiVal, ConstantOp);
    584     if (isNUW) BinOp->setHasNoUnsignedWrap();
    585     if (isNSW) BinOp->setHasNoSignedWrap();
    586     if (isExact) BinOp->setIsExact();
    587     BinOp->setDebugLoc(FirstInst->getDebugLoc());
    588     return BinOp;
    589   }
    590 
    591   CmpInst *CIOp = cast<CmpInst>(FirstInst);
    592   CmpInst *NewCI = CmpInst::Create(CIOp->getOpcode(), CIOp->getPredicate(),
    593                                    PhiVal, ConstantOp);
    594   NewCI->setDebugLoc(FirstInst->getDebugLoc());
    595   return NewCI;
    596 }
    597 
    598 /// Return true if this PHI node is only used by a PHI node cycle that is dead.
    599 static bool DeadPHICycle(PHINode *PN,
    600                          SmallPtrSetImpl<PHINode*> &PotentiallyDeadPHIs) {
    601   if (PN->use_empty()) return true;
    602   if (!PN->hasOneUse()) return false;
    603 
    604   // Remember this node, and if we find the cycle, return.
    605   if (!PotentiallyDeadPHIs.insert(PN).second)
    606     return true;
    607 
    608   // Don't scan crazily complex things.
    609   if (PotentiallyDeadPHIs.size() == 16)
    610     return false;
    611 
    612   if (PHINode *PU = dyn_cast<PHINode>(PN->user_back()))
    613     return DeadPHICycle(PU, PotentiallyDeadPHIs);
    614 
    615   return false;
    616 }
    617 
    618 /// Return true if this phi node is always equal to NonPhiInVal.
    619 /// This happens with mutually cyclic phi nodes like:
    620 ///   z = some value; x = phi (y, z); y = phi (x, z)
    621 static bool PHIsEqualValue(PHINode *PN, Value *NonPhiInVal,
    622                            SmallPtrSetImpl<PHINode*> &ValueEqualPHIs) {
    623   // See if we already saw this PHI node.
    624   if (!ValueEqualPHIs.insert(PN).second)
    625     return true;
    626 
    627   // Don't scan crazily complex things.
    628   if (ValueEqualPHIs.size() == 16)
    629     return false;
    630 
    631   // Scan the operands to see if they are either phi nodes or are equal to
    632   // the value.
    633   for (Value *Op : PN->incoming_values()) {
    634     if (PHINode *OpPN = dyn_cast<PHINode>(Op)) {
    635       if (!PHIsEqualValue(OpPN, NonPhiInVal, ValueEqualPHIs))
    636         return false;
    637     } else if (Op != NonPhiInVal)
    638       return false;
    639   }
    640 
    641   return true;
    642 }
    643 
    644 
    645 namespace {
    646 struct PHIUsageRecord {
    647   unsigned PHIId;     // The ID # of the PHI (something determinstic to sort on)
    648   unsigned Shift;     // The amount shifted.
    649   Instruction *Inst;  // The trunc instruction.
    650 
    651   PHIUsageRecord(unsigned pn, unsigned Sh, Instruction *User)
    652     : PHIId(pn), Shift(Sh), Inst(User) {}
    653 
    654   bool operator<(const PHIUsageRecord &RHS) const {
    655     if (PHIId < RHS.PHIId) return true;
    656     if (PHIId > RHS.PHIId) return false;
    657     if (Shift < RHS.Shift) return true;
    658     if (Shift > RHS.Shift) return false;
    659     return Inst->getType()->getPrimitiveSizeInBits() <
    660            RHS.Inst->getType()->getPrimitiveSizeInBits();
    661   }
    662 };
    663 
    664 struct LoweredPHIRecord {
    665   PHINode *PN;        // The PHI that was lowered.
    666   unsigned Shift;     // The amount shifted.
    667   unsigned Width;     // The width extracted.
    668 
    669   LoweredPHIRecord(PHINode *pn, unsigned Sh, Type *Ty)
    670     : PN(pn), Shift(Sh), Width(Ty->getPrimitiveSizeInBits()) {}
    671 
    672   // Ctor form used by DenseMap.
    673   LoweredPHIRecord(PHINode *pn, unsigned Sh)
    674     : PN(pn), Shift(Sh), Width(0) {}
    675 };
    676 }
    677 
    678 namespace llvm {
    679   template<>
    680   struct DenseMapInfo<LoweredPHIRecord> {
    681     static inline LoweredPHIRecord getEmptyKey() {
    682       return LoweredPHIRecord(nullptr, 0);
    683     }
    684     static inline LoweredPHIRecord getTombstoneKey() {
    685       return LoweredPHIRecord(nullptr, 1);
    686     }
    687     static unsigned getHashValue(const LoweredPHIRecord &Val) {
    688       return DenseMapInfo<PHINode*>::getHashValue(Val.PN) ^ (Val.Shift>>3) ^
    689              (Val.Width>>3);
    690     }
    691     static bool isEqual(const LoweredPHIRecord &LHS,
    692                         const LoweredPHIRecord &RHS) {
    693       return LHS.PN == RHS.PN && LHS.Shift == RHS.Shift &&
    694              LHS.Width == RHS.Width;
    695     }
    696   };
    697 }
    698 
    699 
    700 /// This is an integer PHI and we know that it has an illegal type: see if it is
    701 /// only used by trunc or trunc(lshr) operations. If so, we split the PHI into
    702 /// the various pieces being extracted. This sort of thing is introduced when
    703 /// SROA promotes an aggregate to large integer values.
    704 ///
    705 /// TODO: The user of the trunc may be an bitcast to float/double/vector or an
    706 /// inttoptr.  We should produce new PHIs in the right type.
    707 ///
    708 Instruction *InstCombiner::SliceUpIllegalIntegerPHI(PHINode &FirstPhi) {
    709   // PHIUsers - Keep track of all of the truncated values extracted from a set
    710   // of PHIs, along with their offset.  These are the things we want to rewrite.
    711   SmallVector<PHIUsageRecord, 16> PHIUsers;
    712 
    713   // PHIs are often mutually cyclic, so we keep track of a whole set of PHI
    714   // nodes which are extracted from. PHIsToSlice is a set we use to avoid
    715   // revisiting PHIs, PHIsInspected is a ordered list of PHIs that we need to
    716   // check the uses of (to ensure they are all extracts).
    717   SmallVector<PHINode*, 8> PHIsToSlice;
    718   SmallPtrSet<PHINode*, 8> PHIsInspected;
    719 
    720   PHIsToSlice.push_back(&FirstPhi);
    721   PHIsInspected.insert(&FirstPhi);
    722 
    723   for (unsigned PHIId = 0; PHIId != PHIsToSlice.size(); ++PHIId) {
    724     PHINode *PN = PHIsToSlice[PHIId];
    725 
    726     // Scan the input list of the PHI.  If any input is an invoke, and if the
    727     // input is defined in the predecessor, then we won't be split the critical
    728     // edge which is required to insert a truncate.  Because of this, we have to
    729     // bail out.
    730     for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
    731       InvokeInst *II = dyn_cast<InvokeInst>(PN->getIncomingValue(i));
    732       if (!II) continue;
    733       if (II->getParent() != PN->getIncomingBlock(i))
    734         continue;
    735 
    736       // If we have a phi, and if it's directly in the predecessor, then we have
    737       // a critical edge where we need to put the truncate.  Since we can't
    738       // split the edge in instcombine, we have to bail out.
    739       return nullptr;
    740     }
    741 
    742     for (User *U : PN->users()) {
    743       Instruction *UserI = cast<Instruction>(U);
    744 
    745       // If the user is a PHI, inspect its uses recursively.
    746       if (PHINode *UserPN = dyn_cast<PHINode>(UserI)) {
    747         if (PHIsInspected.insert(UserPN).second)
    748           PHIsToSlice.push_back(UserPN);
    749         continue;
    750       }
    751 
    752       // Truncates are always ok.
    753       if (isa<TruncInst>(UserI)) {
    754         PHIUsers.push_back(PHIUsageRecord(PHIId, 0, UserI));
    755         continue;
    756       }
    757 
    758       // Otherwise it must be a lshr which can only be used by one trunc.
    759       if (UserI->getOpcode() != Instruction::LShr ||
    760           !UserI->hasOneUse() || !isa<TruncInst>(UserI->user_back()) ||
    761           !isa<ConstantInt>(UserI->getOperand(1)))
    762         return nullptr;
    763 
    764       unsigned Shift = cast<ConstantInt>(UserI->getOperand(1))->getZExtValue();
    765       PHIUsers.push_back(PHIUsageRecord(PHIId, Shift, UserI->user_back()));
    766     }
    767   }
    768 
    769   // If we have no users, they must be all self uses, just nuke the PHI.
    770   if (PHIUsers.empty())
    771     return ReplaceInstUsesWith(FirstPhi, UndefValue::get(FirstPhi.getType()));
    772 
    773   // If this phi node is transformable, create new PHIs for all the pieces
    774   // extracted out of it.  First, sort the users by their offset and size.
    775   array_pod_sort(PHIUsers.begin(), PHIUsers.end());
    776 
    777   DEBUG(dbgs() << "SLICING UP PHI: " << FirstPhi << '\n';
    778         for (unsigned i = 1, e = PHIsToSlice.size(); i != e; ++i)
    779           dbgs() << "AND USER PHI #" << i << ": " << *PHIsToSlice[i] << '\n';
    780     );
    781 
    782   // PredValues - This is a temporary used when rewriting PHI nodes.  It is
    783   // hoisted out here to avoid construction/destruction thrashing.
    784   DenseMap<BasicBlock*, Value*> PredValues;
    785 
    786   // ExtractedVals - Each new PHI we introduce is saved here so we don't
    787   // introduce redundant PHIs.
    788   DenseMap<LoweredPHIRecord, PHINode*> ExtractedVals;
    789 
    790   for (unsigned UserI = 0, UserE = PHIUsers.size(); UserI != UserE; ++UserI) {
    791     unsigned PHIId = PHIUsers[UserI].PHIId;
    792     PHINode *PN = PHIsToSlice[PHIId];
    793     unsigned Offset = PHIUsers[UserI].Shift;
    794     Type *Ty = PHIUsers[UserI].Inst->getType();
    795 
    796     PHINode *EltPHI;
    797 
    798     // If we've already lowered a user like this, reuse the previously lowered
    799     // value.
    800     if ((EltPHI = ExtractedVals[LoweredPHIRecord(PN, Offset, Ty)]) == nullptr) {
    801 
    802       // Otherwise, Create the new PHI node for this user.
    803       EltPHI = PHINode::Create(Ty, PN->getNumIncomingValues(),
    804                                PN->getName()+".off"+Twine(Offset), PN);
    805       assert(EltPHI->getType() != PN->getType() &&
    806              "Truncate didn't shrink phi?");
    807 
    808       for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
    809         BasicBlock *Pred = PN->getIncomingBlock(i);
    810         Value *&PredVal = PredValues[Pred];
    811 
    812         // If we already have a value for this predecessor, reuse it.
    813         if (PredVal) {
    814           EltPHI->addIncoming(PredVal, Pred);
    815           continue;
    816         }
    817 
    818         // Handle the PHI self-reuse case.
    819         Value *InVal = PN->getIncomingValue(i);
    820         if (InVal == PN) {
    821           PredVal = EltPHI;
    822           EltPHI->addIncoming(PredVal, Pred);
    823           continue;
    824         }
    825 
    826         if (PHINode *InPHI = dyn_cast<PHINode>(PN)) {
    827           // If the incoming value was a PHI, and if it was one of the PHIs we
    828           // already rewrote it, just use the lowered value.
    829           if (Value *Res = ExtractedVals[LoweredPHIRecord(InPHI, Offset, Ty)]) {
    830             PredVal = Res;
    831             EltPHI->addIncoming(PredVal, Pred);
    832             continue;
    833           }
    834         }
    835 
    836         // Otherwise, do an extract in the predecessor.
    837         Builder->SetInsertPoint(Pred->getTerminator());
    838         Value *Res = InVal;
    839         if (Offset)
    840           Res = Builder->CreateLShr(Res, ConstantInt::get(InVal->getType(),
    841                                                           Offset), "extract");
    842         Res = Builder->CreateTrunc(Res, Ty, "extract.t");
    843         PredVal = Res;
    844         EltPHI->addIncoming(Res, Pred);
    845 
    846         // If the incoming value was a PHI, and if it was one of the PHIs we are
    847         // rewriting, we will ultimately delete the code we inserted.  This
    848         // means we need to revisit that PHI to make sure we extract out the
    849         // needed piece.
    850         if (PHINode *OldInVal = dyn_cast<PHINode>(PN->getIncomingValue(i)))
    851           if (PHIsInspected.count(OldInVal)) {
    852             unsigned RefPHIId = std::find(PHIsToSlice.begin(),PHIsToSlice.end(),
    853                                           OldInVal)-PHIsToSlice.begin();
    854             PHIUsers.push_back(PHIUsageRecord(RefPHIId, Offset,
    855                                               cast<Instruction>(Res)));
    856             ++UserE;
    857           }
    858       }
    859       PredValues.clear();
    860 
    861       DEBUG(dbgs() << "  Made element PHI for offset " << Offset << ": "
    862                    << *EltPHI << '\n');
    863       ExtractedVals[LoweredPHIRecord(PN, Offset, Ty)] = EltPHI;
    864     }
    865 
    866     // Replace the use of this piece with the PHI node.
    867     ReplaceInstUsesWith(*PHIUsers[UserI].Inst, EltPHI);
    868   }
    869 
    870   // Replace all the remaining uses of the PHI nodes (self uses and the lshrs)
    871   // with undefs.
    872   Value *Undef = UndefValue::get(FirstPhi.getType());
    873   for (unsigned i = 1, e = PHIsToSlice.size(); i != e; ++i)
    874     ReplaceInstUsesWith(*PHIsToSlice[i], Undef);
    875   return ReplaceInstUsesWith(FirstPhi, Undef);
    876 }
    877 
    878 // PHINode simplification
    879 //
    880 Instruction *InstCombiner::visitPHINode(PHINode &PN) {
    881   if (Value *V = SimplifyInstruction(&PN, DL, TLI, DT, AC))
    882     return ReplaceInstUsesWith(PN, V);
    883 
    884   if (Instruction *Result = FoldPHIArgZextsIntoPHI(PN))
    885     return Result;
    886 
    887   // If all PHI operands are the same operation, pull them through the PHI,
    888   // reducing code size.
    889   if (isa<Instruction>(PN.getIncomingValue(0)) &&
    890       isa<Instruction>(PN.getIncomingValue(1)) &&
    891       cast<Instruction>(PN.getIncomingValue(0))->getOpcode() ==
    892       cast<Instruction>(PN.getIncomingValue(1))->getOpcode() &&
    893       // FIXME: The hasOneUse check will fail for PHIs that use the value more
    894       // than themselves more than once.
    895       PN.getIncomingValue(0)->hasOneUse())
    896     if (Instruction *Result = FoldPHIArgOpIntoPHI(PN))
    897       return Result;
    898 
    899   // If this is a trivial cycle in the PHI node graph, remove it.  Basically, if
    900   // this PHI only has a single use (a PHI), and if that PHI only has one use (a
    901   // PHI)... break the cycle.
    902   if (PN.hasOneUse()) {
    903     Instruction *PHIUser = cast<Instruction>(PN.user_back());
    904     if (PHINode *PU = dyn_cast<PHINode>(PHIUser)) {
    905       SmallPtrSet<PHINode*, 16> PotentiallyDeadPHIs;
    906       PotentiallyDeadPHIs.insert(&PN);
    907       if (DeadPHICycle(PU, PotentiallyDeadPHIs))
    908         return ReplaceInstUsesWith(PN, UndefValue::get(PN.getType()));
    909     }
    910 
    911     // If this phi has a single use, and if that use just computes a value for
    912     // the next iteration of a loop, delete the phi.  This occurs with unused
    913     // induction variables, e.g. "for (int j = 0; ; ++j);".  Detecting this
    914     // common case here is good because the only other things that catch this
    915     // are induction variable analysis (sometimes) and ADCE, which is only run
    916     // late.
    917     if (PHIUser->hasOneUse() &&
    918         (isa<BinaryOperator>(PHIUser) || isa<GetElementPtrInst>(PHIUser)) &&
    919         PHIUser->user_back() == &PN) {
    920       return ReplaceInstUsesWith(PN, UndefValue::get(PN.getType()));
    921     }
    922   }
    923 
    924   // We sometimes end up with phi cycles that non-obviously end up being the
    925   // same value, for example:
    926   //   z = some value; x = phi (y, z); y = phi (x, z)
    927   // where the phi nodes don't necessarily need to be in the same block.  Do a
    928   // quick check to see if the PHI node only contains a single non-phi value, if
    929   // so, scan to see if the phi cycle is actually equal to that value.
    930   {
    931     unsigned InValNo = 0, NumIncomingVals = PN.getNumIncomingValues();
    932     // Scan for the first non-phi operand.
    933     while (InValNo != NumIncomingVals &&
    934            isa<PHINode>(PN.getIncomingValue(InValNo)))
    935       ++InValNo;
    936 
    937     if (InValNo != NumIncomingVals) {
    938       Value *NonPhiInVal = PN.getIncomingValue(InValNo);
    939 
    940       // Scan the rest of the operands to see if there are any conflicts, if so
    941       // there is no need to recursively scan other phis.
    942       for (++InValNo; InValNo != NumIncomingVals; ++InValNo) {
    943         Value *OpVal = PN.getIncomingValue(InValNo);
    944         if (OpVal != NonPhiInVal && !isa<PHINode>(OpVal))
    945           break;
    946       }
    947 
    948       // If we scanned over all operands, then we have one unique value plus
    949       // phi values.  Scan PHI nodes to see if they all merge in each other or
    950       // the value.
    951       if (InValNo == NumIncomingVals) {
    952         SmallPtrSet<PHINode*, 16> ValueEqualPHIs;
    953         if (PHIsEqualValue(&PN, NonPhiInVal, ValueEqualPHIs))
    954           return ReplaceInstUsesWith(PN, NonPhiInVal);
    955       }
    956     }
    957   }
    958 
    959   // If there are multiple PHIs, sort their operands so that they all list
    960   // the blocks in the same order. This will help identical PHIs be eliminated
    961   // by other passes. Other passes shouldn't depend on this for correctness
    962   // however.
    963   PHINode *FirstPN = cast<PHINode>(PN.getParent()->begin());
    964   if (&PN != FirstPN)
    965     for (unsigned i = 0, e = FirstPN->getNumIncomingValues(); i != e; ++i) {
    966       BasicBlock *BBA = PN.getIncomingBlock(i);
    967       BasicBlock *BBB = FirstPN->getIncomingBlock(i);
    968       if (BBA != BBB) {
    969         Value *VA = PN.getIncomingValue(i);
    970         unsigned j = PN.getBasicBlockIndex(BBB);
    971         Value *VB = PN.getIncomingValue(j);
    972         PN.setIncomingBlock(i, BBB);
    973         PN.setIncomingValue(i, VB);
    974         PN.setIncomingBlock(j, BBA);
    975         PN.setIncomingValue(j, VA);
    976         // NOTE: Instcombine normally would want us to "return &PN" if we
    977         // modified any of the operands of an instruction.  However, since we
    978         // aren't adding or removing uses (just rearranging them) we don't do
    979         // this in this case.
    980       }
    981     }
    982 
    983   // If this is an integer PHI and we know that it has an illegal type, see if
    984   // it is only used by trunc or trunc(lshr) operations.  If so, we split the
    985   // PHI into the various pieces being extracted.  This sort of thing is
    986   // introduced when SROA promotes an aggregate to a single large integer type.
    987   if (PN.getType()->isIntegerTy() &&
    988       !DL.isLegalInteger(PN.getType()->getPrimitiveSizeInBits()))
    989     if (Instruction *Res = SliceUpIllegalIntegerPHI(PN))
    990       return Res;
    991 
    992   return nullptr;
    993 }
    994