Lines Matching refs:Ops

739   Value *EmitMul(const BinOpInfo &Ops) {  in EmitMul()  argument
740 if (Ops.Ty->isSignedIntegerOrEnumerationType()) { in EmitMul()
744 return Builder.CreateMul(Ops.LHS, Ops.RHS, "mul"); in EmitMul()
748 return Builder.CreateNSWMul(Ops.LHS, Ops.RHS, "mul"); in EmitMul()
751 if (CanElideOverflowCheck(CGF.getContext(), Ops)) in EmitMul()
752 return Builder.CreateNSWMul(Ops.LHS, Ops.RHS, "mul"); in EmitMul()
753 return EmitOverflowCheckedBinOp(Ops); in EmitMul()
757 if (Ops.Ty->isConstantMatrixType()) { in EmitMul()
761 auto *BO = cast<BinaryOperator>(Ops.E); in EmitMul()
766 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, Ops.FPFeatures); in EmitMul()
768 return MB.CreateMatrixMultiply(Ops.LHS, Ops.RHS, LHSMatTy->getNumRows(), in EmitMul()
771 return MB.CreateScalarMultiply(Ops.LHS, Ops.RHS); in EmitMul()
774 if (Ops.Ty->isUnsignedIntegerType() && in EmitMul()
776 !CanElideOverflowCheck(CGF.getContext(), Ops)) in EmitMul()
777 return EmitOverflowCheckedBinOp(Ops); in EmitMul()
779 if (Ops.LHS->getType()->isFPOrFPVectorTy()) { in EmitMul()
781 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, Ops.FPFeatures); in EmitMul()
782 return Builder.CreateFMul(Ops.LHS, Ops.RHS, "mul"); in EmitMul()
784 if (Ops.isFixedPointOp()) in EmitMul()
785 return EmitFixedPointBinOp(Ops); in EmitMul()
786 return Builder.CreateMul(Ops.LHS, Ops.RHS, "mul"); in EmitMul()
790 Value *EmitOverflowCheckedBinOp(const BinOpInfo &Ops);
793 void EmitUndefinedBehaviorIntegerDivAndRemCheck(const BinOpInfo &Ops,
802 Value *EmitDiv(const BinOpInfo &Ops);
803 Value *EmitRem(const BinOpInfo &Ops);
804 Value *EmitAdd(const BinOpInfo &Ops);
805 Value *EmitSub(const BinOpInfo &Ops);
806 Value *EmitShl(const BinOpInfo &Ops);
807 Value *EmitShr(const BinOpInfo &Ops);
808 Value *EmitAnd(const BinOpInfo &Ops) { in EmitAnd() argument
809 return Builder.CreateAnd(Ops.LHS, Ops.RHS, "and"); in EmitAnd()
811 Value *EmitXor(const BinOpInfo &Ops) { in EmitXor() argument
812 return Builder.CreateXor(Ops.LHS, Ops.RHS, "xor"); in EmitXor()
814 Value *EmitOr (const BinOpInfo &Ops) { in EmitOr() argument
815 return Builder.CreateOr(Ops.LHS, Ops.RHS, "or"); in EmitOr()
819 Value *EmitFixedPointBinOp(const BinOpInfo &Ops);
3695 const BinOpInfo &Ops, llvm::Value *Zero, bool isDiv) { in EmitUndefinedBehaviorIntegerDivAndRemCheck() argument
3699 Checks.push_back(std::make_pair(Builder.CreateICmpNE(Ops.RHS, Zero), in EmitUndefinedBehaviorIntegerDivAndRemCheck()
3703 const auto *BO = cast<BinaryOperator>(Ops.E); in EmitUndefinedBehaviorIntegerDivAndRemCheck()
3705 Ops.Ty->hasSignedIntegerRepresentation() && in EmitUndefinedBehaviorIntegerDivAndRemCheck()
3707 Ops.mayHaveIntegerOverflow()) { in EmitUndefinedBehaviorIntegerDivAndRemCheck()
3714 llvm::Value *LHSCmp = Builder.CreateICmpNE(Ops.LHS, IntMin); in EmitUndefinedBehaviorIntegerDivAndRemCheck()
3715 llvm::Value *RHSCmp = Builder.CreateICmpNE(Ops.RHS, NegOne); in EmitUndefinedBehaviorIntegerDivAndRemCheck()
3722 EmitBinOpCheck(Checks, Ops); in EmitUndefinedBehaviorIntegerDivAndRemCheck()
3725 Value *ScalarExprEmitter::EmitDiv(const BinOpInfo &Ops) { in EmitDiv() argument
3730 Ops.Ty->isIntegerType() && in EmitDiv()
3731 (Ops.mayHaveIntegerDivisionByZero() || Ops.mayHaveIntegerOverflow())) { in EmitDiv()
3732 llvm::Value *Zero = llvm::Constant::getNullValue(ConvertType(Ops.Ty)); in EmitDiv()
3733 EmitUndefinedBehaviorIntegerDivAndRemCheck(Ops, Zero, true); in EmitDiv()
3735 Ops.Ty->isRealFloatingType() && in EmitDiv()
3736 Ops.mayHaveFloatDivisionByZero()) { in EmitDiv()
3737 llvm::Value *Zero = llvm::Constant::getNullValue(ConvertType(Ops.Ty)); in EmitDiv()
3738 llvm::Value *NonZero = Builder.CreateFCmpUNE(Ops.RHS, Zero); in EmitDiv()
3740 Ops); in EmitDiv()
3744 if (Ops.Ty->isConstantMatrixType()) { in EmitDiv()
3748 auto *BO = cast<BinaryOperator>(Ops.E); in EmitDiv()
3755 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, Ops.FPFeatures); in EmitDiv()
3756 return MB.CreateScalarDiv(Ops.LHS, Ops.RHS, in EmitDiv()
3757 Ops.Ty->hasUnsignedIntegerRepresentation()); in EmitDiv()
3760 if (Ops.LHS->getType()->isFPOrFPVectorTy()) { in EmitDiv()
3762 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, Ops.FPFeatures); in EmitDiv()
3763 Val = Builder.CreateFDiv(Ops.LHS, Ops.RHS, "div"); in EmitDiv()
3767 else if (Ops.isFixedPointOp()) in EmitDiv()
3768 return EmitFixedPointBinOp(Ops); in EmitDiv()
3769 else if (Ops.Ty->hasUnsignedIntegerRepresentation()) in EmitDiv()
3770 return Builder.CreateUDiv(Ops.LHS, Ops.RHS, "div"); in EmitDiv()
3772 return Builder.CreateSDiv(Ops.LHS, Ops.RHS, "div"); in EmitDiv()
3775 Value *ScalarExprEmitter::EmitRem(const BinOpInfo &Ops) { in EmitRem() argument
3779 Ops.Ty->isIntegerType() && in EmitRem()
3780 (Ops.mayHaveIntegerDivisionByZero() || Ops.mayHaveIntegerOverflow())) { in EmitRem()
3782 llvm::Value *Zero = llvm::Constant::getNullValue(ConvertType(Ops.Ty)); in EmitRem()
3783 EmitUndefinedBehaviorIntegerDivAndRemCheck(Ops, Zero, false); in EmitRem()
3786 if (Ops.Ty->hasUnsignedIntegerRepresentation()) in EmitRem()
3787 return Builder.CreateURem(Ops.LHS, Ops.RHS, "rem"); in EmitRem()
3789 return Builder.CreateSRem(Ops.LHS, Ops.RHS, "rem"); in EmitRem()
3792 Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) { in EmitOverflowCheckedBinOp() argument
3797 bool isSigned = Ops.Ty->isSignedIntegerOrEnumerationType(); in EmitOverflowCheckedBinOp()
3798 switch (Ops.Opcode) { in EmitOverflowCheckedBinOp()
3828 llvm::Type *opTy = CGF.CGM.getTypes().ConvertType(Ops.Ty); in EmitOverflowCheckedBinOp()
3832 Value *resultAndOverflow = Builder.CreateCall(intrinsic, {Ops.LHS, Ops.RHS}); in EmitOverflowCheckedBinOp()
3846 EmitBinOpCheck(std::make_pair(NotOverflow, Kind), Ops); in EmitOverflowCheckedBinOp()
3874 llvm::Value *lhs = Builder.CreateSExt(Ops.LHS, CGF.Int64Ty); in EmitOverflowCheckedBinOp()
3875 llvm::Value *rhs = Builder.CreateSExt(Ops.RHS, CGF.Int64Ty); in EmitOverflowCheckedBinOp()
4440 Value *ScalarExprEmitter::EmitShl(const BinOpInfo &Ops) { in EmitShl() argument
4442 if (Ops.isFixedPointOp()) in EmitShl()
4443 return EmitFixedPointBinOp(Ops); in EmitShl()
4447 Value *RHS = Ops.RHS; in EmitShl()
4448 if (Ops.LHS->getType() != RHS->getType()) in EmitShl()
4449 RHS = Builder.CreateIntCast(RHS, Ops.LHS->getType(), false, "sh_prom"); in EmitShl()
4452 Ops.Ty->hasSignedIntegerRepresentation() && in EmitShl()
4457 Ops.Ty->hasUnsignedIntegerRepresentation(); in EmitShl()
4462 RHS = ConstrainShiftValue(Ops.LHS, RHS, "shl.mask"); in EmitShl()
4464 isa<llvm::IntegerType>(Ops.LHS->getType())) { in EmitShl()
4467 bool RHSIsSigned = Ops.rhsHasSignedIntegerRepresentation(); in EmitShl()
4469 GetMaximumShiftAmount(Ops.LHS, Ops.RHS, RHSIsSigned); in EmitShl()
4470 llvm::Value *ValidExponent = Builder.CreateICmpULE(Ops.RHS, WidthMinusOne); in EmitShl()
4486 (RHS == Ops.RHS) ? WidthMinusOne in EmitShl()
4487 : GetMaximumShiftAmount(Ops.LHS, RHS, RHSIsSigned); in EmitShl()
4490 Ops.LHS, Builder.CreateSub(PromotedWidthMinusOne, RHS, "shl.zeros", in EmitShl()
4514 EmitBinOpCheck(Checks, Ops); in EmitShl()
4517 return Builder.CreateShl(Ops.LHS, RHS, "shl"); in EmitShl()
4520 Value *ScalarExprEmitter::EmitShr(const BinOpInfo &Ops) { in EmitShr() argument
4522 if (Ops.isFixedPointOp()) in EmitShr()
4523 return EmitFixedPointBinOp(Ops); in EmitShr()
4527 Value *RHS = Ops.RHS; in EmitShr()
4528 if (Ops.LHS->getType() != RHS->getType()) in EmitShr()
4529 RHS = Builder.CreateIntCast(RHS, Ops.LHS->getType(), false, "sh_prom"); in EmitShr()
4533 RHS = ConstrainShiftValue(Ops.LHS, RHS, "shr.mask"); in EmitShr()
4535 isa<llvm::IntegerType>(Ops.LHS->getType())) { in EmitShr()
4537 bool RHSIsSigned = Ops.rhsHasSignedIntegerRepresentation(); in EmitShr()
4539 Ops.RHS, GetMaximumShiftAmount(Ops.LHS, Ops.RHS, RHSIsSigned)); in EmitShr()
4540 EmitBinOpCheck(std::make_pair(Valid, SanitizerKind::ShiftExponent), Ops); in EmitShr()
4543 if (Ops.Ty->hasUnsignedIntegerRepresentation()) in EmitShr()
4544 return Builder.CreateLShr(Ops.LHS, RHS, "shr"); in EmitShr()
4545 return Builder.CreateAShr(Ops.LHS, RHS, "shr"); in EmitShr()