Lines Matching refs:Trunc
56 case Instruction::Trunc: in EvaluateInDifferentType()
183 (CI.getOpcode() == Instruction::Trunc && in commonCastTransforms()
349 case Instruction::Trunc: in canEvaluateTruncated()
401 static Instruction *foldVecTruncToExtElt(TruncInst &Trunc, in foldVecTruncToExtElt() argument
403 Value *TruncOp = Trunc.getOperand(0); in foldVecTruncToExtElt()
404 Type *DestType = Trunc.getType(); in foldVecTruncToExtElt()
441 Instruction *InstCombinerImpl::narrowFunnelShift(TruncInst &Trunc) { in narrowFunnelShift() argument
442 assert((isa<VectorType>(Trunc.getSrcTy()) || in narrowFunnelShift()
443 shouldChangeType(Trunc.getSrcTy(), Trunc.getType())) && in narrowFunnelShift()
448 Type *DestTy = Trunc.getType(); in narrowFunnelShift()
450 unsigned WideWidth = Trunc.getSrcTy()->getScalarSizeInBits(); in narrowFunnelShift()
457 if (!match(Trunc.getOperand(0), m_OneUse(m_Or(m_BinOp(Or0), m_BinOp(Or1))))) in narrowFunnelShift()
523 if (!MaskedValueIsZero(ShVal1, HiBitMask, 0, &Trunc)) in narrowFunnelShift()
538 Function *F = Intrinsic::getDeclaration(Trunc.getModule(), IID, DestTy); in narrowFunnelShift()
544 Instruction *InstCombinerImpl::narrowBinOp(TruncInst &Trunc) { in narrowBinOp() argument
545 Type *SrcTy = Trunc.getSrcTy(); in narrowBinOp()
546 Type *DestTy = Trunc.getType(); in narrowBinOp()
554 if (!match(Trunc.getOperand(0), m_OneUse(m_BinOp(BinOp)))) in narrowBinOp()
603 auto *OldShift = cast<Instruction>(Trunc.getOperand(0)); in narrowBinOp()
621 if (Instruction *NarrowOr = narrowFunnelShift(Trunc)) in narrowBinOp()
630 static Instruction *shrinkSplatShuffle(TruncInst &Trunc, in shrinkSplatShuffle() argument
632 auto *Shuf = dyn_cast<ShuffleVectorInst>(Trunc.getOperand(0)); in shrinkSplatShuffle()
638 Value *NarrowOp = Builder.CreateTrunc(Shuf->getOperand(0), Trunc.getType()); in shrinkSplatShuffle()
650 static Instruction *shrinkInsertElt(CastInst &Trunc, in shrinkInsertElt() argument
652 Instruction::CastOps Opcode = Trunc.getOpcode(); in shrinkInsertElt()
653 assert((Opcode == Instruction::Trunc || Opcode == Instruction::FPTrunc) && in shrinkInsertElt()
656 auto *InsElt = dyn_cast<InsertElementInst>(Trunc.getOperand(0)); in shrinkInsertElt()
660 Type *DestTy = Trunc.getType(); in shrinkInsertElt()
677 Instruction *InstCombinerImpl::visitTrunc(TruncInst &Trunc) { in visitTrunc() argument
678 if (Instruction *Result = commonCastTransforms(Trunc)) in visitTrunc()
681 Value *Src = Trunc.getOperand(0); in visitTrunc()
682 Type *DestTy = Trunc.getType(), *SrcTy = Src->getType(); in visitTrunc()
691 canEvaluateTruncated(Src, DestTy, *this, &Trunc)) { in visitTrunc()
698 << Trunc << '\n'); in visitTrunc()
701 return replaceInstUsesWith(Trunc, Res); in visitTrunc()
712 canEvaluateTruncated(Src, NewDestTy, *this, &Trunc)) { in visitTrunc()
716 << Trunc << '\n'); in visitTrunc()
734 if (SimplifyDemandedInstructionBits(Trunc)) in visitTrunc()
735 return &Trunc; in visitTrunc()
776 if (Trunc.hasNoUnsignedWrap() || Trunc.hasNoSignedWrap()) { in visitTrunc()
800 return ConstantFoldCastOperand(Instruction::Trunc, ShAmt, A->getType(), in visitTrunc()
822 if (Instruction *I = narrowBinOp(Trunc)) in visitTrunc()
825 if (Instruction *I = shrinkSplatShuffle(Trunc, Builder)) in visitTrunc()
828 if (Instruction *I = shrinkInsertElt(Trunc, Builder)) in visitTrunc()
848 if (Instruction *I = foldVecTruncToExtElt(Trunc, *this)) in visitTrunc()
889 Builder.CreateIntrinsic(Intrinsic::ctlz, {Trunc.getType()}, {A, B}); in visitTrunc()
895 if (Trunc.getFunction() && in visitTrunc()
896 Trunc.getFunction()->hasFnAttribute(Attribute::VScaleRange)) { in visitTrunc()
898 Trunc.getFunction()->getFnAttribute(Attribute::VScaleRange); in visitTrunc()
902 return replaceInstUsesWith(Trunc, VScale); in visitTrunc()
909 if (!Trunc.hasNoSignedWrap() && in visitTrunc()
910 ComputeMaxSignificantBits(Src, /*Depth=*/0, &Trunc) <= DestWidth) { in visitTrunc()
911 Trunc.setHasNoSignedWrap(true); in visitTrunc()
914 if (!Trunc.hasNoUnsignedWrap() && in visitTrunc()
916 /*Depth=*/0, &Trunc)) { in visitTrunc()
917 Trunc.setHasNoUnsignedWrap(true); in visitTrunc()
921 return Changed ? &Trunc : nullptr; in visitTrunc()
1038 case Instruction::Trunc: // zext(trunc(x)) -> trunc(x) or zext(x) in canEvaluateZExtd()
1222 Value *Trunc = Builder.CreateTrunc(A, DestTy); in visitZExt() local
1224 return BinaryOperator::CreateAnd(Trunc, in visitZExt()
1225 ConstantInt::get(Trunc->getType(), in visitZExt()
1392 case Instruction::Trunc: // sext(trunc(x)) -> trunc(x) or sext(x) in canEvaluateSExtd()