Lines Matching refs:Trunc

209   case Instruction::Trunc:  in EvaluateInDifferentType()
303 (CI.getOpcode() == Instruction::Trunc && in commonCastTransforms()
461 case Instruction::Trunc: in canEvaluateTruncated()
498 static Instruction *foldVecTruncToExtElt(TruncInst &Trunc, in foldVecTruncToExtElt() argument
500 Value *TruncOp = Trunc.getOperand(0); in foldVecTruncToExtElt()
501 Type *DestType = Trunc.getType(); in foldVecTruncToExtElt()
538 Instruction *InstCombinerImpl::narrowFunnelShift(TruncInst &Trunc) { in narrowFunnelShift() argument
539 assert((isa<VectorType>(Trunc.getSrcTy()) || in narrowFunnelShift()
540 shouldChangeType(Trunc.getSrcTy(), Trunc.getType())) && in narrowFunnelShift()
545 Type *DestTy = Trunc.getType(); in narrowFunnelShift()
547 unsigned WideWidth = Trunc.getSrcTy()->getScalarSizeInBits(); in narrowFunnelShift()
554 if (!match(Trunc.getOperand(0), m_OneUse(m_Or(m_BinOp(Or0), m_BinOp(Or1))))) in narrowFunnelShift()
620 if (!MaskedValueIsZero(ShVal1, HiBitMask, 0, &Trunc)) in narrowFunnelShift()
633 Function *F = Intrinsic::getDeclaration(Trunc.getModule(), IID, DestTy); in narrowFunnelShift()
640 Instruction *InstCombinerImpl::narrowBinOp(TruncInst &Trunc) { in narrowBinOp() argument
641 Type *SrcTy = Trunc.getSrcTy(); in narrowBinOp()
642 Type *DestTy = Trunc.getType(); in narrowBinOp()
647 if (!match(Trunc.getOperand(0), m_OneUse(m_BinOp(BinOp)))) in narrowBinOp()
689 if (Instruction *NarrowOr = narrowFunnelShift(Trunc)) in narrowBinOp()
698 static Instruction *shrinkSplatShuffle(TruncInst &Trunc, in shrinkSplatShuffle() argument
700 auto *Shuf = dyn_cast<ShuffleVectorInst>(Trunc.getOperand(0)); in shrinkSplatShuffle()
705 Constant *NarrowUndef = UndefValue::get(Trunc.getType()); in shrinkSplatShuffle()
706 Value *NarrowOp = Builder.CreateTrunc(Shuf->getOperand(0), Trunc.getType()); in shrinkSplatShuffle()
718 static Instruction *shrinkInsertElt(CastInst &Trunc, in shrinkInsertElt() argument
720 Instruction::CastOps Opcode = Trunc.getOpcode(); in shrinkInsertElt()
721 assert((Opcode == Instruction::Trunc || Opcode == Instruction::FPTrunc) && in shrinkInsertElt()
724 auto *InsElt = dyn_cast<InsertElementInst>(Trunc.getOperand(0)); in shrinkInsertElt()
728 Type *DestTy = Trunc.getType(); in shrinkInsertElt()
745 Instruction *InstCombinerImpl::visitTrunc(TruncInst &Trunc) { in visitTrunc() argument
746 if (Instruction *Result = commonCastTransforms(Trunc)) in visitTrunc()
749 Value *Src = Trunc.getOperand(0); in visitTrunc()
750 Type *DestTy = Trunc.getType(), *SrcTy = Src->getType(); in visitTrunc()
759 canEvaluateTruncated(Src, DestTy, *this, &Trunc)) { in visitTrunc()
766 << Trunc << '\n'); in visitTrunc()
769 return replaceInstUsesWith(Trunc, Res); in visitTrunc()
780 canEvaluateTruncated(Src, NewDestTy, *this, &Trunc)) { in visitTrunc()
784 << Trunc << '\n'); in visitTrunc()
802 if (SimplifyDemandedInstructionBits(Trunc)) in visitTrunc()
803 return &Trunc; in visitTrunc()
893 if (Instruction *I = narrowBinOp(Trunc)) in visitTrunc()
896 if (Instruction *I = shrinkSplatShuffle(Trunc, Builder)) in visitTrunc()
899 if (Instruction *I = shrinkInsertElt(Trunc, Builder)) in visitTrunc()
919 if (Instruction *I = foldVecTruncToExtElt(Trunc, *this)) in visitTrunc()
960 Builder.CreateIntrinsic(Intrinsic::ctlz, {Trunc.getType()}, {A, B}); in visitTrunc()
1136 case Instruction::Trunc: // zext(trunc(x)) -> trunc(x) or zext(x) in canEvaluateZExtd()
1308 Value *Trunc = Builder.CreateTrunc(A, CI.getType()); in visitZExt() local
1310 return BinaryOperator::CreateAnd(Trunc, in visitZExt()
1311 ConstantInt::get(Trunc->getType(), in visitZExt()
1469 case Instruction::Trunc: // sext(trunc(x)) -> trunc(x) or sext(x) in canEvaluateSExtd()