reference, declaration → definition definition → references, declarations, derived classes, virtual overrides reference to multiple definitions → definitions unreferenced |
620 assert(Instr->getOpcode() == Instruction::UDiv || 621 Instr->getOpcode() == Instruction::URem); 622 if (Instr->getType()->isVectorTy()) 627 auto OrigWidth = Instr->getType()->getIntegerBitWidth(); 629 for (Value *Operand : Instr->operands()) { 631 LVI->getConstantRange(Operand, Instr->getParent())); 642 IRBuilder<> B{Instr}; 643 auto *TruncTy = Type::getIntNTy(Instr->getContext(), NewWidth); 644 auto *LHS = B.CreateTruncOrBitCast(Instr->getOperand(0), TruncTy, 645 Instr->getName() + ".lhs.trunc"); 646 auto *RHS = B.CreateTruncOrBitCast(Instr->getOperand(1), TruncTy, 647 Instr->getName() + ".rhs.trunc"); 648 auto *BO = B.CreateBinOp(Instr->getOpcode(), LHS, RHS, Instr->getName()); 648 auto *BO = B.CreateBinOp(Instr->getOpcode(), LHS, RHS, Instr->getName()); 649 auto *Zext = B.CreateZExt(BO, Instr->getType(), Instr->getName() + ".zext"); 649 auto *Zext = B.CreateZExt(BO, Instr->getType(), Instr->getName() + ".zext"); 652 BinOp->setIsExact(Instr->isExact()); 654 Instr->replaceAllUsesWith(Zext); 655 Instr->eraseFromParent();