Lines Matching refs:I

99               IRBuilderCallbackInserter([&](Instruction *I) {  in Negator()  argument
101 NewInstructions.push_back(I); in Negator()
115 std::array<Value *, 2> Negator::getSortedOperandsOfBinOp(Instruction *I) { in getSortedOperandsOfBinOp() argument
116 assert(I->getNumOperands() == 2 && "Only for binops!"); in getSortedOperandsOfBinOp()
117 std::array<Value *, 2> Ops{I->getOperand(0), I->getOperand(1)}; in getSortedOperandsOfBinOp()
118 if (I->isCommutative() && InstCombiner::getComplexity(I->getOperand(0)) < in getSortedOperandsOfBinOp()
119 InstCombiner::getComplexity(I->getOperand(1))) in getSortedOperandsOfBinOp()
156 auto *I = cast<Instruction>(V); in visitImpl() local
157 unsigned BitWidth = I->getType()->getScalarSizeInBits(); in visitImpl()
164 Builder.SetInsertPoint(I); in visitImpl()
167 switch (I->getOpcode()) { in visitImpl()
169 std::array<Value *, 2> Ops = getSortedOperandsOfBinOp(I); in visitImpl()
172 return Builder.CreateNot(Ops[0], I->getName() + ".neg"); in visitImpl()
177 if (match(I, m_Not(m_Value(X)))) in visitImpl()
179 I->getName() + ".neg"); in visitImpl()
185 if (match(I->getOperand(1), m_APInt(Op1Val)) && *Op1Val == BitWidth - 1) { in visitImpl()
186 Value *BO = I->getOpcode() == Instruction::AShr in visitImpl()
187 ? Builder.CreateLShr(I->getOperand(0), I->getOperand(1)) in visitImpl()
188 : Builder.CreateAShr(I->getOperand(0), I->getOperand(1)); in visitImpl()
190 NewInstr->copyIRFlags(I); in visitImpl()
191 NewInstr->setName(I->getName() + ".neg"); in visitImpl()
204 if (I->getOperand(0)->getType()->isIntOrIntVectorTy(1)) in visitImpl()
205 return I->getOpcode() == Instruction::SExt in visitImpl()
206 ? Builder.CreateZExt(I->getOperand(0), I->getType(), in visitImpl()
207 I->getName() + ".neg") in visitImpl()
208 : Builder.CreateSExt(I->getOperand(0), I->getType(), in visitImpl()
209 I->getName() + ".neg"); in visitImpl()
214 auto *Sel = cast<SelectInst>(I); in visitImpl()
221 I->getName() + ".neg", /*MDFrom=*/I); in visitImpl()
229 if (I->getOpcode() == Instruction::Sub && in visitImpl()
230 (I->hasOneUse() || match(I->getOperand(0), m_ImmConstant()))) { in visitImpl()
234 return Builder.CreateSub(I->getOperand(1), I->getOperand(0), in visitImpl()
235 I->getName() + ".neg", /* HasNUW */ false, in visitImpl()
236 IsNSW && I->hasNoSignedWrap()); in visitImpl()
244 switch (I->getOpcode()) { in visitImpl()
248 Value *SrcOp = I->getOperand(0); in visitImpl()
254 return Builder.CreateSExt(Ashr, I->getType()); in visitImpl()
261 if (match(I, m_c_And(m_OneUse(m_TruncOrSelf( in visitImpl()
268 return Builder.CreateTruncOrBitCast(R, I->getType()); in visitImpl()
276 if (auto *Op1C = dyn_cast<Constant>(I->getOperand(1))) { in visitImpl()
280 Builder.CreateSDiv(I->getOperand(0), ConstantExpr::getNeg(Op1C), in visitImpl()
281 I->getName() + ".neg"); in visitImpl()
283 NewInstr->setIsExact(I->isExact()); in visitImpl()
298 switch (I->getOpcode()) { in visitImpl()
301 Value *NegOp = negate(I->getOperand(0), IsNSW, Depth + 1); in visitImpl()
304 return Builder.CreateFreeze(NegOp, I->getName() + ".neg"); in visitImpl()
308 auto *PHI = cast<PHINode>(I); in visitImpl()
310 for (auto I : zip(PHI->incoming_values(), NegatedIncomingValues)) { in visitImpl() local
311 if (!(std::get<1>(I) = in visitImpl()
312 negate(std::get<0>(I), IsNSW, Depth + 1))) // Early return. in visitImpl()
318 for (auto I : zip(NegatedIncomingValues, PHI->blocks())) in visitImpl() local
319 NegatedPHI->addIncoming(std::get<0>(I), std::get<1>(I)); in visitImpl()
323 if (isKnownNegation(I->getOperand(1), I->getOperand(2))) { in visitImpl()
326 auto *NewSelect = cast<SelectInst>(I->clone()); in visitImpl()
330 NewSelect->setName(I->getName() + ".neg"); in visitImpl()
335 Value *NegOp1 = negate(I->getOperand(1), IsNSW, Depth + 1); in visitImpl()
338 Value *NegOp2 = negate(I->getOperand(2), IsNSW, Depth + 1); in visitImpl()
342 return Builder.CreateSelect(I->getOperand(0), NegOp1, NegOp2, in visitImpl()
343 I->getName() + ".neg", /*MDFrom=*/I); in visitImpl()
347 auto *Shuf = cast<ShuffleVectorInst>(I); in visitImpl()
348 Value *NegOp0 = negate(I->getOperand(0), IsNSW, Depth + 1); in visitImpl()
351 Value *NegOp1 = negate(I->getOperand(1), IsNSW, Depth + 1); in visitImpl()
355 I->getName() + ".neg"); in visitImpl()
359 auto *EEI = cast<ExtractElementInst>(I); in visitImpl()
364 I->getName() + ".neg"); in visitImpl()
369 auto *IEI = cast<InsertElementInst>(I); in visitImpl()
377 I->getName() + ".neg"); in visitImpl()
381 Value *NegOp = negate(I->getOperand(0), /* IsNSW */ false, Depth + 1); in visitImpl()
384 return Builder.CreateTrunc(NegOp, I->getType(), I->getName() + ".neg"); in visitImpl()
388 IsNSW &= I->hasNoSignedWrap(); in visitImpl()
389 if (Value *NegOp0 = negate(I->getOperand(0), IsNSW, Depth + 1)) in visitImpl()
390 return Builder.CreateShl(NegOp0, I->getOperand(1), I->getName() + ".neg", in visitImpl()
393 auto *Op1C = dyn_cast<Constant>(I->getOperand(1)); in visitImpl()
397 I->getOperand(0), in visitImpl()
399 I->getName() + ".neg", /* HasNUW */ false, IsNSW); in visitImpl()
402 if (!cast<PossiblyDisjointInst>(I)->isDisjoint()) in visitImpl()
404 std::array<Value *, 2> Ops = getSortedOperandsOfBinOp(I); in visitImpl()
408 return Builder.CreateNot(Ops[0], I->getName() + ".neg"); in visitImpl()
415 for (Value *Op : I->operands()) { in visitImpl()
432 I->getName() + ".neg"); in visitImpl()
439 I->getName() + ".neg"); in visitImpl()
442 std::array<Value *, 2> Ops = getSortedOperandsOfBinOp(I); in visitImpl()
449 I->getName() + ".neg"); in visitImpl()
455 std::array<Value *, 2> Ops = getSortedOperandsOfBinOp(I); in visitImpl()
469 return Builder.CreateMul(NegatedOp, OtherOp, I->getName() + ".neg", in visitImpl()
470 /* HasNUW */ false, IsNSW && I->hasNoSignedWrap()); in visitImpl()
522 for (Instruction *I : llvm::reverse(NewInstructions)) in run()
523 I->eraseFromParent(); in run()
565 for (Instruction *I : Res->first) in Negate()
566 IC.Builder.Insert(I, I->getName()); in Negate()