Lines Matching refs:Ops

680   Value *EmitMul(const BinOpInfo &Ops) {  in EmitMul()  argument
681 if (Ops.Ty->isSignedIntegerOrEnumerationType()) { in EmitMul()
684 return Builder.CreateMul(Ops.LHS, Ops.RHS, "mul"); in EmitMul()
687 return Builder.CreateNSWMul(Ops.LHS, Ops.RHS, "mul"); in EmitMul()
690 if (CanElideOverflowCheck(CGF.getContext(), Ops)) in EmitMul()
691 return Builder.CreateNSWMul(Ops.LHS, Ops.RHS, "mul"); in EmitMul()
692 return EmitOverflowCheckedBinOp(Ops); in EmitMul()
696 if (Ops.Ty->isUnsignedIntegerType() && in EmitMul()
698 !CanElideOverflowCheck(CGF.getContext(), Ops)) in EmitMul()
699 return EmitOverflowCheckedBinOp(Ops); in EmitMul()
701 if (Ops.LHS->getType()->isFPOrFPVectorTy()) { in EmitMul()
702 Value *V = Builder.CreateFMul(Ops.LHS, Ops.RHS, "mul"); in EmitMul()
703 return propagateFMFlags(V, Ops); in EmitMul()
705 return Builder.CreateMul(Ops.LHS, Ops.RHS, "mul"); in EmitMul()
709 Value *EmitOverflowCheckedBinOp(const BinOpInfo &Ops);
712 void EmitUndefinedBehaviorIntegerDivAndRemCheck(const BinOpInfo &Ops,
716 Value *EmitDiv(const BinOpInfo &Ops);
717 Value *EmitRem(const BinOpInfo &Ops);
718 Value *EmitAdd(const BinOpInfo &Ops);
719 Value *EmitSub(const BinOpInfo &Ops);
720 Value *EmitShl(const BinOpInfo &Ops);
721 Value *EmitShr(const BinOpInfo &Ops);
722 Value *EmitAnd(const BinOpInfo &Ops) { in EmitAnd() argument
723 return Builder.CreateAnd(Ops.LHS, Ops.RHS, "and"); in EmitAnd()
725 Value *EmitXor(const BinOpInfo &Ops) { in EmitXor() argument
726 return Builder.CreateXor(Ops.LHS, Ops.RHS, "xor"); in EmitXor()
728 Value *EmitOr (const BinOpInfo &Ops) { in EmitOr() argument
729 return Builder.CreateOr(Ops.LHS, Ops.RHS, "or"); in EmitOr()
2931 const BinOpInfo &Ops, llvm::Value *Zero, bool isDiv) { in EmitUndefinedBehaviorIntegerDivAndRemCheck() argument
2935 Checks.push_back(std::make_pair(Builder.CreateICmpNE(Ops.RHS, Zero), in EmitUndefinedBehaviorIntegerDivAndRemCheck()
2939 const auto *BO = cast<BinaryOperator>(Ops.E); in EmitUndefinedBehaviorIntegerDivAndRemCheck()
2941 Ops.Ty->hasSignedIntegerRepresentation() && in EmitUndefinedBehaviorIntegerDivAndRemCheck()
2943 Ops.mayHaveIntegerOverflow()) { in EmitUndefinedBehaviorIntegerDivAndRemCheck()
2950 llvm::Value *LHSCmp = Builder.CreateICmpNE(Ops.LHS, IntMin); in EmitUndefinedBehaviorIntegerDivAndRemCheck()
2951 llvm::Value *RHSCmp = Builder.CreateICmpNE(Ops.RHS, NegOne); in EmitUndefinedBehaviorIntegerDivAndRemCheck()
2958 EmitBinOpCheck(Checks, Ops); in EmitUndefinedBehaviorIntegerDivAndRemCheck()
2961 Value *ScalarExprEmitter::EmitDiv(const BinOpInfo &Ops) { in EmitDiv() argument
2966 Ops.Ty->isIntegerType() && in EmitDiv()
2967 (Ops.mayHaveIntegerDivisionByZero() || Ops.mayHaveIntegerOverflow())) { in EmitDiv()
2968 llvm::Value *Zero = llvm::Constant::getNullValue(ConvertType(Ops.Ty)); in EmitDiv()
2969 EmitUndefinedBehaviorIntegerDivAndRemCheck(Ops, Zero, true); in EmitDiv()
2971 Ops.Ty->isRealFloatingType() && in EmitDiv()
2972 Ops.mayHaveFloatDivisionByZero()) { in EmitDiv()
2973 llvm::Value *Zero = llvm::Constant::getNullValue(ConvertType(Ops.Ty)); in EmitDiv()
2974 llvm::Value *NonZero = Builder.CreateFCmpUNE(Ops.RHS, Zero); in EmitDiv()
2976 Ops); in EmitDiv()
2980 if (Ops.LHS->getType()->isFPOrFPVectorTy()) { in EmitDiv()
2981 llvm::Value *Val = Builder.CreateFDiv(Ops.LHS, Ops.RHS, "div"); in EmitDiv()
2997 else if (Ops.Ty->hasUnsignedIntegerRepresentation()) in EmitDiv()
2998 return Builder.CreateUDiv(Ops.LHS, Ops.RHS, "div"); in EmitDiv()
3000 return Builder.CreateSDiv(Ops.LHS, Ops.RHS, "div"); in EmitDiv()
3003 Value *ScalarExprEmitter::EmitRem(const BinOpInfo &Ops) { in EmitRem() argument
3007 Ops.Ty->isIntegerType() && in EmitRem()
3008 (Ops.mayHaveIntegerDivisionByZero() || Ops.mayHaveIntegerOverflow())) { in EmitRem()
3010 llvm::Value *Zero = llvm::Constant::getNullValue(ConvertType(Ops.Ty)); in EmitRem()
3011 EmitUndefinedBehaviorIntegerDivAndRemCheck(Ops, Zero, false); in EmitRem()
3014 if (Ops.Ty->hasUnsignedIntegerRepresentation()) in EmitRem()
3015 return Builder.CreateURem(Ops.LHS, Ops.RHS, "rem"); in EmitRem()
3017 return Builder.CreateSRem(Ops.LHS, Ops.RHS, "rem"); in EmitRem()
3020 Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) { in EmitOverflowCheckedBinOp() argument
3024 bool isSigned = Ops.Ty->isSignedIntegerOrEnumerationType(); in EmitOverflowCheckedBinOp()
3025 switch (Ops.Opcode) { in EmitOverflowCheckedBinOp()
3052 llvm::Type *opTy = CGF.CGM.getTypes().ConvertType(Ops.Ty); in EmitOverflowCheckedBinOp()
3056 Value *resultAndOverflow = Builder.CreateCall(intrinsic, {Ops.LHS, Ops.RHS}); in EmitOverflowCheckedBinOp()
3070 EmitBinOpCheck(std::make_pair(NotOverflow, Kind), Ops); in EmitOverflowCheckedBinOp()
3097 llvm::Value *lhs = Builder.CreateSExt(Ops.LHS, CGF.Int64Ty); in EmitOverflowCheckedBinOp()
3098 llvm::Value *rhs = Builder.CreateSExt(Ops.RHS, CGF.Int64Ty); in EmitOverflowCheckedBinOp()
3444 Value *ScalarExprEmitter::EmitShl(const BinOpInfo &Ops) { in EmitShl() argument
3447 Value *RHS = Ops.RHS; in EmitShl()
3448 if (Ops.LHS->getType() != RHS->getType()) in EmitShl()
3449 RHS = Builder.CreateIntCast(RHS, Ops.LHS->getType(), false, "sh_prom"); in EmitShl()
3452 Ops.Ty->hasSignedIntegerRepresentation() && in EmitShl()
3458 Builder.CreateAnd(RHS, GetWidthMinusOneValue(Ops.LHS, RHS), "shl.mask"); in EmitShl()
3460 isa<llvm::IntegerType>(Ops.LHS->getType())) { in EmitShl()
3463 llvm::Value *WidthMinusOne = GetWidthMinusOneValue(Ops.LHS, Ops.RHS); in EmitShl()
3464 llvm::Value *ValidExponent = Builder.CreateICmpULE(Ops.RHS, WidthMinusOne); in EmitShl()
3480 (RHS == Ops.RHS) ? WidthMinusOne in EmitShl()
3481 : GetWidthMinusOneValue(Ops.LHS, RHS); in EmitShl()
3484 Ops.LHS, Builder.CreateSub(PromotedWidthMinusOne, RHS, "shl.zeros", in EmitShl()
3505 EmitBinOpCheck(Checks, Ops); in EmitShl()
3508 return Builder.CreateShl(Ops.LHS, RHS, "shl"); in EmitShl()
3511 Value *ScalarExprEmitter::EmitShr(const BinOpInfo &Ops) { in EmitShr() argument
3514 Value *RHS = Ops.RHS; in EmitShr()
3515 if (Ops.LHS->getType() != RHS->getType()) in EmitShr()
3516 RHS = Builder.CreateIntCast(RHS, Ops.LHS->getType(), false, "sh_prom"); in EmitShr()
3521 Builder.CreateAnd(RHS, GetWidthMinusOneValue(Ops.LHS, RHS), "shr.mask"); in EmitShr()
3523 isa<llvm::IntegerType>(Ops.LHS->getType())) { in EmitShr()
3526 Builder.CreateICmpULE(RHS, GetWidthMinusOneValue(Ops.LHS, RHS)); in EmitShr()
3527 EmitBinOpCheck(std::make_pair(Valid, SanitizerKind::ShiftExponent), Ops); in EmitShr()
3530 if (Ops.Ty->hasUnsignedIntegerRepresentation()) in EmitShr()
3531 return Builder.CreateLShr(Ops.LHS, RHS, "shr"); in EmitShr()
3532 return Builder.CreateAShr(Ops.LHS, RHS, "shr"); in EmitShr()