Lines Matching refs:Trunc
56 case Instruction::Trunc: in EvaluateInDifferentType()
183 (CI.getOpcode() == Instruction::Trunc && in commonCastTransforms()
341 case Instruction::Trunc: in canEvaluateTruncated()
393 static Instruction *foldVecTruncToExtElt(TruncInst &Trunc, in foldVecTruncToExtElt() argument
395 Value *TruncOp = Trunc.getOperand(0); in foldVecTruncToExtElt()
396 Type *DestType = Trunc.getType(); in foldVecTruncToExtElt()
433 Instruction *InstCombinerImpl::narrowFunnelShift(TruncInst &Trunc) { in narrowFunnelShift() argument
434 assert((isa<VectorType>(Trunc.getSrcTy()) || in narrowFunnelShift()
435 shouldChangeType(Trunc.getSrcTy(), Trunc.getType())) && in narrowFunnelShift()
440 Type *DestTy = Trunc.getType(); in narrowFunnelShift()
442 unsigned WideWidth = Trunc.getSrcTy()->getScalarSizeInBits(); in narrowFunnelShift()
449 if (!match(Trunc.getOperand(0), m_OneUse(m_Or(m_BinOp(Or0), m_BinOp(Or1))))) in narrowFunnelShift()
515 if (!MaskedValueIsZero(ShVal1, HiBitMask, 0, &Trunc)) in narrowFunnelShift()
530 Function *F = Intrinsic::getDeclaration(Trunc.getModule(), IID, DestTy); in narrowFunnelShift()
536 Instruction *InstCombinerImpl::narrowBinOp(TruncInst &Trunc) { in narrowBinOp() argument
537 Type *SrcTy = Trunc.getSrcTy(); in narrowBinOp()
538 Type *DestTy = Trunc.getType(); in narrowBinOp()
546 if (!match(Trunc.getOperand(0), m_OneUse(m_BinOp(BinOp)))) in narrowBinOp()
595 auto *OldShift = cast<Instruction>(Trunc.getOperand(0)); in narrowBinOp()
613 if (Instruction *NarrowOr = narrowFunnelShift(Trunc)) in narrowBinOp()
622 static Instruction *shrinkSplatShuffle(TruncInst &Trunc, in shrinkSplatShuffle() argument
624 auto *Shuf = dyn_cast<ShuffleVectorInst>(Trunc.getOperand(0)); in shrinkSplatShuffle()
630 Value *NarrowOp = Builder.CreateTrunc(Shuf->getOperand(0), Trunc.getType()); in shrinkSplatShuffle()
642 static Instruction *shrinkInsertElt(CastInst &Trunc, in shrinkInsertElt() argument
644 Instruction::CastOps Opcode = Trunc.getOpcode(); in shrinkInsertElt()
645 assert((Opcode == Instruction::Trunc || Opcode == Instruction::FPTrunc) && in shrinkInsertElt()
648 auto *InsElt = dyn_cast<InsertElementInst>(Trunc.getOperand(0)); in shrinkInsertElt()
652 Type *DestTy = Trunc.getType(); in shrinkInsertElt()
669 Instruction *InstCombinerImpl::visitTrunc(TruncInst &Trunc) { in visitTrunc() argument
670 if (Instruction *Result = commonCastTransforms(Trunc)) in visitTrunc()
673 Value *Src = Trunc.getOperand(0); in visitTrunc()
674 Type *DestTy = Trunc.getType(), *SrcTy = Src->getType(); in visitTrunc()
683 canEvaluateTruncated(Src, DestTy, *this, &Trunc)) { in visitTrunc()
690 << Trunc << '\n'); in visitTrunc()
693 return replaceInstUsesWith(Trunc, Res); in visitTrunc()
704 canEvaluateTruncated(Src, NewDestTy, *this, &Trunc)) { in visitTrunc()
708 << Trunc << '\n'); in visitTrunc()
726 if (SimplifyDemandedInstructionBits(Trunc)) in visitTrunc()
727 return &Trunc; in visitTrunc()
779 return ConstantFoldCastOperand(Instruction::Trunc, ShAmt, A->getType(), in visitTrunc()
801 if (Instruction *I = narrowBinOp(Trunc)) in visitTrunc()
804 if (Instruction *I = shrinkSplatShuffle(Trunc, Builder)) in visitTrunc()
807 if (Instruction *I = shrinkInsertElt(Trunc, Builder)) in visitTrunc()
827 if (Instruction *I = foldVecTruncToExtElt(Trunc, *this)) in visitTrunc()
868 Builder.CreateIntrinsic(Intrinsic::ctlz, {Trunc.getType()}, {A, B}); in visitTrunc()
874 if (Trunc.getFunction() && in visitTrunc()
875 Trunc.getFunction()->hasFnAttribute(Attribute::VScaleRange)) { in visitTrunc()
877 Trunc.getFunction()->getFnAttribute(Attribute::VScaleRange); in visitTrunc()
881 return replaceInstUsesWith(Trunc, VScale); in visitTrunc()
1004 case Instruction::Trunc: // zext(trunc(x)) -> trunc(x) or zext(x) in canEvaluateZExtd()
1184 Value *Trunc = Builder.CreateTrunc(A, DestTy); in visitZExt() local
1186 return BinaryOperator::CreateAnd(Trunc, in visitZExt()
1187 ConstantInt::get(Trunc->getType(), in visitZExt()
1354 case Instruction::Trunc: // sext(trunc(x)) -> trunc(x) or sext(x) in canEvaluateSExtd()