• Home
  • Raw
  • Download

Lines Matching refs:Ops

450   Value *EmitMul(const BinOpInfo &Ops) {  in EmitMul()  argument
451 if (Ops.Ty->isSignedIntegerOrEnumerationType()) { in EmitMul()
454 return Builder.CreateMul(Ops.LHS, Ops.RHS, "mul"); in EmitMul()
457 return Builder.CreateNSWMul(Ops.LHS, Ops.RHS, "mul"); in EmitMul()
460 return EmitOverflowCheckedBinOp(Ops); in EmitMul()
464 if (Ops.Ty->isUnsignedIntegerType() && in EmitMul()
466 return EmitOverflowCheckedBinOp(Ops); in EmitMul()
468 if (Ops.LHS->getType()->isFPOrFPVectorTy()) in EmitMul()
469 return Builder.CreateFMul(Ops.LHS, Ops.RHS, "mul"); in EmitMul()
470 return Builder.CreateMul(Ops.LHS, Ops.RHS, "mul"); in EmitMul()
474 Value *EmitOverflowCheckedBinOp(const BinOpInfo &Ops);
477 void EmitUndefinedBehaviorIntegerDivAndRemCheck(const BinOpInfo &Ops,
481 Value *EmitDiv(const BinOpInfo &Ops);
482 Value *EmitRem(const BinOpInfo &Ops);
483 Value *EmitAdd(const BinOpInfo &Ops);
484 Value *EmitSub(const BinOpInfo &Ops);
485 Value *EmitShl(const BinOpInfo &Ops);
486 Value *EmitShr(const BinOpInfo &Ops);
487 Value *EmitAnd(const BinOpInfo &Ops) { in EmitAnd() argument
488 return Builder.CreateAnd(Ops.LHS, Ops.RHS, "and"); in EmitAnd()
490 Value *EmitXor(const BinOpInfo &Ops) { in EmitXor() argument
491 return Builder.CreateXor(Ops.LHS, Ops.RHS, "xor"); in EmitXor()
493 Value *EmitOr (const BinOpInfo &Ops) { in EmitOr() argument
494 return Builder.CreateOr(Ops.LHS, Ops.RHS, "or"); in EmitOr()
2243 const BinOpInfo &Ops, llvm::Value *Zero, bool isDiv) { in EmitUndefinedBehaviorIntegerDivAndRemCheck() argument
2247 Checks.push_back(std::make_pair(Builder.CreateICmpNE(Ops.RHS, Zero), in EmitUndefinedBehaviorIntegerDivAndRemCheck()
2252 Ops.Ty->hasSignedIntegerRepresentation()) { in EmitUndefinedBehaviorIntegerDivAndRemCheck()
2259 llvm::Value *LHSCmp = Builder.CreateICmpNE(Ops.LHS, IntMin); in EmitUndefinedBehaviorIntegerDivAndRemCheck()
2260 llvm::Value *RHSCmp = Builder.CreateICmpNE(Ops.RHS, NegOne); in EmitUndefinedBehaviorIntegerDivAndRemCheck()
2267 EmitBinOpCheck(Checks, Ops); in EmitUndefinedBehaviorIntegerDivAndRemCheck()
2270 Value *ScalarExprEmitter::EmitDiv(const BinOpInfo &Ops) { in EmitDiv() argument
2275 Ops.Ty->isIntegerType()) { in EmitDiv()
2276 llvm::Value *Zero = llvm::Constant::getNullValue(ConvertType(Ops.Ty)); in EmitDiv()
2277 EmitUndefinedBehaviorIntegerDivAndRemCheck(Ops, Zero, true); in EmitDiv()
2279 Ops.Ty->isRealFloatingType()) { in EmitDiv()
2280 llvm::Value *Zero = llvm::Constant::getNullValue(ConvertType(Ops.Ty)); in EmitDiv()
2281 llvm::Value *NonZero = Builder.CreateFCmpUNE(Ops.RHS, Zero); in EmitDiv()
2283 Ops); in EmitDiv()
2287 if (Ops.LHS->getType()->isFPOrFPVectorTy()) { in EmitDiv()
2288 llvm::Value *Val = Builder.CreateFDiv(Ops.LHS, Ops.RHS, "div"); in EmitDiv()
2299 else if (Ops.Ty->hasUnsignedIntegerRepresentation()) in EmitDiv()
2300 return Builder.CreateUDiv(Ops.LHS, Ops.RHS, "div"); in EmitDiv()
2302 return Builder.CreateSDiv(Ops.LHS, Ops.RHS, "div"); in EmitDiv()
2305 Value *ScalarExprEmitter::EmitRem(const BinOpInfo &Ops) { in EmitRem() argument
2309 llvm::Value *Zero = llvm::Constant::getNullValue(ConvertType(Ops.Ty)); in EmitRem()
2311 if (Ops.Ty->isIntegerType()) in EmitRem()
2312 EmitUndefinedBehaviorIntegerDivAndRemCheck(Ops, Zero, false); in EmitRem()
2315 if (Ops.Ty->hasUnsignedIntegerRepresentation()) in EmitRem()
2316 return Builder.CreateURem(Ops.LHS, Ops.RHS, "rem"); in EmitRem()
2318 return Builder.CreateSRem(Ops.LHS, Ops.RHS, "rem"); in EmitRem()
2321 Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) { in EmitOverflowCheckedBinOp() argument
2325 bool isSigned = Ops.Ty->isSignedIntegerOrEnumerationType(); in EmitOverflowCheckedBinOp()
2326 switch (Ops.Opcode) { in EmitOverflowCheckedBinOp()
2352 llvm::Type *opTy = CGF.CGM.getTypes().ConvertType(Ops.Ty); in EmitOverflowCheckedBinOp()
2356 Value *resultAndOverflow = Builder.CreateCall(intrinsic, {Ops.LHS, Ops.RHS}); in EmitOverflowCheckedBinOp()
2371 EmitBinOpCheck(std::make_pair(NotOverflow, Kind), Ops); in EmitOverflowCheckedBinOp()
2399 llvm::Value *lhs = Builder.CreateSExt(Ops.LHS, CGF.Int64Ty); in EmitOverflowCheckedBinOp()
2400 llvm::Value *rhs = Builder.CreateSExt(Ops.RHS, CGF.Int64Ty); in EmitOverflowCheckedBinOp()
2714 Value *ScalarExprEmitter::EmitShl(const BinOpInfo &Ops) { in EmitShl() argument
2717 Value *RHS = Ops.RHS; in EmitShl()
2718 if (Ops.LHS->getType() != RHS->getType()) in EmitShl()
2719 RHS = Builder.CreateIntCast(RHS, Ops.LHS->getType(), false, "sh_prom"); in EmitShl()
2722 Ops.Ty->hasSignedIntegerRepresentation(); in EmitShl()
2727 Builder.CreateAnd(RHS, GetWidthMinusOneValue(Ops.LHS, RHS), "shl.mask"); in EmitShl()
2729 isa<llvm::IntegerType>(Ops.LHS->getType())) { in EmitShl()
2732 llvm::Value *WidthMinusOne = GetWidthMinusOneValue(Ops.LHS, RHS); in EmitShl()
2750 Builder.CreateLShr(Ops.LHS, in EmitShl()
2772 EmitBinOpCheck(Checks, Ops); in EmitShl()
2775 return Builder.CreateShl(Ops.LHS, RHS, "shl"); in EmitShl()
2778 Value *ScalarExprEmitter::EmitShr(const BinOpInfo &Ops) { in EmitShr() argument
2781 Value *RHS = Ops.RHS; in EmitShr()
2782 if (Ops.LHS->getType() != RHS->getType()) in EmitShr()
2783 RHS = Builder.CreateIntCast(RHS, Ops.LHS->getType(), false, "sh_prom"); in EmitShr()
2788 Builder.CreateAnd(RHS, GetWidthMinusOneValue(Ops.LHS, RHS), "shr.mask"); in EmitShr()
2790 isa<llvm::IntegerType>(Ops.LHS->getType())) { in EmitShr()
2793 Builder.CreateICmpULE(RHS, GetWidthMinusOneValue(Ops.LHS, RHS)); in EmitShr()
2794 EmitBinOpCheck(std::make_pair(Valid, SanitizerKind::ShiftExponent), Ops); in EmitShr()
2797 if (Ops.Ty->hasUnsignedIntegerRepresentation()) in EmitShr()
2798 return Builder.CreateLShr(Ops.LHS, RHS, "shr"); in EmitShr()
2799 return Builder.CreateAShr(Ops.LHS, RHS, "shr"); in EmitShr()