Lines Matching refs:Trunc
211 case Instruction::Trunc: in EvaluateInDifferentType()
305 (CI.getOpcode() == Instruction::Trunc && in commonCastTransforms()
463 case Instruction::Trunc: in canEvaluateTruncated()
500 static Instruction *foldVecTruncToExtElt(TruncInst &Trunc, in foldVecTruncToExtElt() argument
502 Value *TruncOp = Trunc.getOperand(0); in foldVecTruncToExtElt()
503 Type *DestType = Trunc.getType(); in foldVecTruncToExtElt()
540 Instruction *InstCombinerImpl::narrowFunnelShift(TruncInst &Trunc) { in narrowFunnelShift() argument
541 assert((isa<VectorType>(Trunc.getSrcTy()) || in narrowFunnelShift()
542 shouldChangeType(Trunc.getSrcTy(), Trunc.getType())) && in narrowFunnelShift()
547 Type *DestTy = Trunc.getType(); in narrowFunnelShift()
549 unsigned WideWidth = Trunc.getSrcTy()->getScalarSizeInBits(); in narrowFunnelShift()
556 if (!match(Trunc.getOperand(0), m_OneUse(m_Or(m_BinOp(Or0), m_BinOp(Or1))))) in narrowFunnelShift()
622 if (!MaskedValueIsZero(ShVal1, HiBitMask, 0, &Trunc)) in narrowFunnelShift()
635 Function *F = Intrinsic::getDeclaration(Trunc.getModule(), IID, DestTy); in narrowFunnelShift()
641 Instruction *InstCombinerImpl::narrowBinOp(TruncInst &Trunc) { in narrowBinOp() argument
642 Type *SrcTy = Trunc.getSrcTy(); in narrowBinOp()
643 Type *DestTy = Trunc.getType(); in narrowBinOp()
651 if (!match(Trunc.getOperand(0), m_OneUse(m_BinOp(BinOp)))) in narrowBinOp()
700 auto *OldShift = cast<Instruction>(Trunc.getOperand(0)); in narrowBinOp()
716 if (Instruction *NarrowOr = narrowFunnelShift(Trunc)) in narrowBinOp()
725 static Instruction *shrinkSplatShuffle(TruncInst &Trunc, in shrinkSplatShuffle() argument
727 auto *Shuf = dyn_cast<ShuffleVectorInst>(Trunc.getOperand(0)); in shrinkSplatShuffle()
733 Value *NarrowOp = Builder.CreateTrunc(Shuf->getOperand(0), Trunc.getType()); in shrinkSplatShuffle()
745 static Instruction *shrinkInsertElt(CastInst &Trunc, in shrinkInsertElt() argument
747 Instruction::CastOps Opcode = Trunc.getOpcode(); in shrinkInsertElt()
748 assert((Opcode == Instruction::Trunc || Opcode == Instruction::FPTrunc) && in shrinkInsertElt()
751 auto *InsElt = dyn_cast<InsertElementInst>(Trunc.getOperand(0)); in shrinkInsertElt()
755 Type *DestTy = Trunc.getType(); in shrinkInsertElt()
772 Instruction *InstCombinerImpl::visitTrunc(TruncInst &Trunc) { in visitTrunc() argument
773 if (Instruction *Result = commonCastTransforms(Trunc)) in visitTrunc()
776 Value *Src = Trunc.getOperand(0); in visitTrunc()
777 Type *DestTy = Trunc.getType(), *SrcTy = Src->getType(); in visitTrunc()
786 canEvaluateTruncated(Src, DestTy, *this, &Trunc)) { in visitTrunc()
793 << Trunc << '\n'); in visitTrunc()
796 return replaceInstUsesWith(Trunc, Res); in visitTrunc()
807 canEvaluateTruncated(Src, NewDestTy, *this, &Trunc)) { in visitTrunc()
811 << Trunc << '\n'); in visitTrunc()
829 if (SimplifyDemandedInstructionBits(Trunc)) in visitTrunc()
830 return &Trunc; in visitTrunc()
900 if (Instruction *I = narrowBinOp(Trunc)) in visitTrunc()
903 if (Instruction *I = shrinkSplatShuffle(Trunc, Builder)) in visitTrunc()
906 if (Instruction *I = shrinkInsertElt(Trunc, Builder)) in visitTrunc()
926 if (Instruction *I = foldVecTruncToExtElt(Trunc, *this)) in visitTrunc()
967 Builder.CreateIntrinsic(Intrinsic::ctlz, {Trunc.getType()}, {A, B}); in visitTrunc()
973 if (Trunc.getFunction() && in visitTrunc()
974 Trunc.getFunction()->hasFnAttribute(Attribute::VScaleRange)) { in visitTrunc()
976 Trunc.getFunction()->getFnAttribute(Attribute::VScaleRange); in visitTrunc()
980 return replaceInstUsesWith(Trunc, VScale); in visitTrunc()
1145 case Instruction::Trunc: // zext(trunc(x)) -> trunc(x) or zext(x) in canEvaluateZExtd()
1317 Value *Trunc = Builder.CreateTrunc(A, CI.getType()); in visitZExt() local
1319 return BinaryOperator::CreateAnd(Trunc, in visitZExt()
1320 ConstantInt::get(Trunc->getType(), in visitZExt()
1463 case Instruction::Trunc: // sext(trunc(x)) -> trunc(x) or sext(x) in canEvaluateSExtd()