Lines Matching refs:CGF
217 CodeGenFunction &CGF; member in __anonb4bd95340111::ScalarExprEmitter
224 : CGF(cgf), Builder(CGF.Builder), IgnoreResultAssign(ira), in ScalarExprEmitter()
238 llvm::Type *ConvertType(QualType T) { return CGF.ConvertType(T); } in ConvertType()
239 LValue EmitLValue(const Expr *E) { return CGF.EmitLValue(E); } in EmitLValue()
241 return CGF.EmitCheckedLValue(E, TCK); in EmitCheckedLValue()
248 return CGF.EmitLoadOfLValue(LV, Loc).getScalarVal(); in EmitLoadOfLValue()
266 if (isa<ParmVarDecl>(VD) && !CGF.SanOpts.has(SanitizerKind::Alignment)) in EmitLValueAlignmentAssumption()
280 Value *AlignmentValue = CGF.EmitScalarExpr(AVAttr->getAlignment()); in EmitLValueAlignmentAssumption()
282 CGF.emitAlignmentAssumption(V, E, AVAttr->getLocation(), AlignmentCI); in EmitLValueAlignmentAssumption()
377 Value *Zero = CGF.CGM.getNullPointer(cast<llvm::PointerType>(V->getType()), QT); in EmitPointerToBoolConversion()
406 ApplyDebugLocation DL(CGF, E); in Visit()
411 S->dump(llvm::errs(), CGF.getContext()); in VisitStmt()
422 if (Value *Result = ConstantEmitter(CGF).tryEmitConstantExpr(E)) { in VisitConstantExpr()
424 return CGF.Builder.CreateLoad(Address( in VisitConstantExpr()
425 Result, CGF.ConvertTypeForMem(E->getType()), in VisitConstantExpr()
426 CGF.getContext().getTypeAlignInChars(E->getType()))); in VisitConstantExpr()
441 return CGF.EmitCoawaitExpr(*S).getScalarVal(); in VisitCoawaitExpr()
444 return CGF.EmitCoyieldExpr(*S).getScalarVal(); in VisitCoyieldExpr()
481 llvm::Value *V = CGF.GetAddrOfLabel(E->getLabel()); in VisitAddrLabelExpr()
490 return CGF.EmitPseudoObjectRValue(E).getScalarVal(); in VisitPseudoObjectExpr()
497 return EmitLoadOfLValue(CGF.getOrCreateOpaqueLValueMapping(E), in VisitOpaqueValueExpr()
501 return CGF.getOrCreateOpaqueRValueMapping(E).getScalarVal(); in VisitOpaqueValueExpr()
506 if (CodeGenFunction::ConstantEmission Constant = CGF.tryEmitAsConstant(E)) in VisitDeclRefExpr()
507 return CGF.emitScalarConstant(Constant, E); in VisitDeclRefExpr()
512 return CGF.EmitObjCSelectorExpr(E); in VisitObjCSelectorExpr()
515 return CGF.EmitObjCProtocolExpr(E); in VisitObjCProtocolExpr()
524 return CGF.EmitObjCMessageExpr(E).getScalarVal(); in VisitObjCMessageExpr()
528 LValue LV = CGF.EmitObjCIsaExpr(E); in VisitObjCIsaExpr()
529 Value *V = CGF.EmitLoadOfLValue(LV, E->getExprLoc()).getScalarVal(); in VisitObjCIsaExpr()
538 if (Version <= CGF.CGM.getTarget().getPlatformMinVersion()) in VisitObjCAvailabilityCheckExpr()
541 return CGF.EmitBuiltinAvailable(Version); in VisitObjCAvailabilityCheckExpr()
562 assert(CGF.getArrayInitIndex() && in VisitArrayInitIndexExpr()
564 return CGF.getArrayInitIndex(); in VisitArrayInitIndexExpr()
571 CGF.CGM.EmitExplicitCastExprType(E, &CGF); in VisitExplicitCastExpr()
577 if (E->getCallReturnType(CGF.getContext())->isReferenceType()) in VisitCallExpr()
580 Value *V = CGF.EmitCallExpr(E).getScalarVal(); in VisitCallExpr()
616 return CGF.CGM.getMemberPointerConstant(E); in VisitUnaryAddrOf()
618 return EmitLValue(E->getSubExpr()).getPointer(CGF); in VisitUnaryAddrOf()
650 auto &Ctx = CGF.getContext(); in VisitSourceLocExpr()
652 SLE->EvaluateInContext(Ctx, CGF.CurSourceLocExprScope.getDefaultExpr()); in VisitSourceLocExpr()
653 return ConstantEmitter(CGF).emitAbstract(SLE->getLocation(), Evaluated, in VisitSourceLocExpr()
658 CodeGenFunction::CXXDefaultArgExprScope Scope(CGF, DAE); in VisitCXXDefaultArgExpr()
662 CodeGenFunction::CXXDefaultInitExprScope Scope(CGF, DIE); in VisitCXXDefaultInitExpr()
666 return CGF.LoadCXXThis(); in VisitCXXThisExpr()
671 return CGF.EmitCXXNewExpr(E); in VisitCXXNewExpr()
674 CGF.EmitCXXDeleteExpr(E); in VisitCXXDeleteExpr()
704 CGF.EmitScalarExpr(E->getBase()); in VisitCXXPseudoDestructorExpr()
713 CGF.EmitCXXThrowExpr(E); in VisitCXXThrowExpr()
724 switch (CGF.getLangOpts().getSignedOverflowBehavior()) { in EmitMul()
728 if (!CGF.SanOpts.has(SanitizerKind::SignedIntegerOverflow)) in EmitMul()
732 if (CanElideOverflowCheck(CGF.getContext(), Ops)) in EmitMul()
747 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, Ops.FPFeatures); in EmitMul()
756 CGF.SanOpts.has(SanitizerKind::UnsignedIntegerOverflow) && in EmitMul()
757 !CanElideOverflowCheck(CGF.getContext(), Ops)) in EmitMul()
762 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, Ops.FPFeatures); in EmitMul()
819 if (ElementType.UseExcessPrecision(CGF.getContext())) in getPromotionType()
820 return CGF.getContext().getComplexType(CGF.getContext().FloatTy); in getPromotionType()
822 if (Ty.UseExcessPrecision(CGF.getContext())) in getPromotionType()
823 return CGF.getContext().FloatTy; in getPromotionType()
886 return CGF.EmitObjCStringLiteral(E); in VisitObjCStringLiteral()
889 return CGF.EmitObjCBoxedExpr(E); in VisitObjCBoxedExpr()
892 return CGF.EmitObjCArrayLiteral(E); in VisitObjCArrayLiteral()
895 return CGF.EmitObjCDictionaryLiteral(E); in VisitObjCDictionaryLiteral()
915 return CGF.CGM.getCXXABI().EmitMemberPointerIsNotNull(CGF, Src, MPT); in EmitConversionToBool()
934 CodeGenFunction::SanitizerScope SanScope(&CGF); in EmitFloatConversionCheck()
940 CGF.getContext().getFloatTypeSemantics(OrigSrcType); in EmitFloatConversionCheck()
945 unsigned Width = CGF.getContext().getIntWidth(DstType); in EmitFloatConversionCheck()
976 CGF.getContext().getFloatTypeSemantics(SrcType); in EmitFloatConversionCheck()
988 llvm::Constant *StaticArgs[] = {CGF.EmitCheckSourceLocation(Loc), in EmitFloatConversionCheck()
989 CGF.EmitCheckTypeDescriptor(OrigSrcType), in EmitFloatConversionCheck()
990 CGF.EmitCheckTypeDescriptor(DstType)}; in EmitFloatConversionCheck()
991 CGF.EmitCheck(std::make_pair(Check, SanitizerKind::FloatCastOverflow), in EmitFloatConversionCheck()
1043 if (!CGF.SanOpts.hasOneOf(SanitizerKind::ImplicitIntegerTruncation)) in EmitIntegerTruncationCheck()
1065 if (CGF.SanOpts.has(SanitizerKind::ImplicitIntegerSignChange) && in EmitIntegerTruncationCheck()
1069 CodeGenFunction::SanitizerScope SanScope(&CGF); in EmitIntegerTruncationCheck()
1078 if (!CGF.SanOpts.has(Check.second.second)) in EmitIntegerTruncationCheck()
1082 CGF.EmitCheckSourceLocation(Loc), CGF.EmitCheckTypeDescriptor(SrcType), in EmitIntegerTruncationCheck()
1083 CGF.EmitCheckTypeDescriptor(DstType), in EmitIntegerTruncationCheck()
1085 CGF.EmitCheck(Check.second, SanitizerHandler::ImplicitConversion, StaticArgs, in EmitIntegerTruncationCheck()
1152 if (!CGF.SanOpts.has(SanitizerKind::ImplicitIntegerSignChange)) in EmitIntegerSignChangeCheck()
1185 if (CGF.SanOpts.has(SanitizerKind::ImplicitSignedIntegerTruncation) && in EmitIntegerSignChangeCheck()
1194 CodeGenFunction::SanitizerScope SanScope(&CGF); in EmitIntegerSignChangeCheck()
1210 if (CGF.SanOpts.has(SanitizerKind::ImplicitSignedIntegerTruncation) && in EmitIntegerSignChangeCheck()
1223 CGF.EmitCheckSourceLocation(Loc), CGF.EmitCheckTypeDescriptor(SrcType), in EmitIntegerSignChangeCheck()
1224 CGF.EmitCheckTypeDescriptor(DstType), in EmitIntegerSignChangeCheck()
1227 CGF.EmitCheck(Checks, SanitizerHandler::ImplicitConversion, StaticArgs, in EmitIntegerSignChangeCheck()
1274 if (!CGF.CGM.getCodeGenOpts().StrictFloatCastOverflow) { in EmitScalarCast()
1277 return Builder.CreateCall(CGF.CGM.getIntrinsic(IID, {DstTy, SrcTy}), Src); in EmitScalarCast()
1329 SrcType = CGF.getContext().getCanonicalType(SrcType); in EmitScalarConversion()
1330 DstType = CGF.getContext().getCanonicalType(DstType); in EmitScalarConversion()
1346 if (SrcType->isHalfType() && !CGF.getContext().getLangOpts().NativeHalfType) { in EmitScalarConversion()
1349 if (CGF.getContext().getTargetInfo().useFP16ConversionIntrinsics()) in EmitScalarConversion()
1351 CGF.CGM.getIntrinsic(llvm::Intrinsic::convert_from_fp16, DstTy), in EmitScalarConversion()
1357 if (CGF.getContext().getTargetInfo().useFP16ConversionIntrinsics()) { in EmitScalarConversion()
1359 CGF.CGM.getIntrinsic(llvm::Intrinsic::convert_from_fp16, in EmitScalarConversion()
1360 CGF.CGM.FloatTy), in EmitScalarConversion()
1363 Src = Builder.CreateFPExt(Src, CGF.CGM.FloatTy, "conv"); in EmitScalarConversion()
1365 SrcType = CGF.getContext().FloatTy; in EmitScalarConversion()
1366 SrcTy = CGF.FloatTy; in EmitScalarConversion()
1390 llvm::Type *MiddleTy = CGF.CGM.getDataLayout().getIntPtrType(DstPT); in EmitScalarConversion()
1466 if (CGF.SanOpts.has(SanitizerKind::FloatCastOverflow) && in EmitScalarConversion()
1472 if (DstType->isHalfType() && !CGF.getContext().getLangOpts().NativeHalfType) { in EmitScalarConversion()
1477 if (CGF.getContext().getTargetInfo().useFP16ConversionIntrinsics()) in EmitScalarConversion()
1479 CGF.CGM.getIntrinsic(llvm::Intrinsic::convert_to_fp16, SrcTy), Src); in EmitScalarConversion()
1483 DstTy = CGF.FloatTy; in EmitScalarConversion()
1489 if (CGF.getContext().getTargetInfo().useFP16ConversionIntrinsics()) { in EmitScalarConversion()
1492 CGF.CGM.getIntrinsic(llvm::Intrinsic::convert_to_fp16, CGF.CGM.FloatTy), in EmitScalarConversion()
1517 CGF.getContext().getFixedPointSemantics(DstTy)); in EmitFixedPointConversion()
1520 CGF.getContext().getFixedPointSemantics(SrcTy), in EmitFixedPointConversion()
1523 auto SrcFPSema = CGF.getContext().getFixedPointSemantics(SrcTy); in EmitFixedPointConversion()
1524 auto DstFPSema = CGF.getContext().getFixedPointSemantics(DstTy); in EmitFixedPointConversion()
1563 return CGF.EmitFromMemory(CGF.CGM.EmitNullConstant(Ty), Ty); in EmitNullValue()
1572 assert(CGF.IsSanitizerScope); in EmitBinOpCheck()
1581 StaticData.push_back(CGF.EmitCheckSourceLocation(Info.E->getExprLoc())); in EmitBinOpCheck()
1585 StaticData.push_back(CGF.EmitCheckTypeDescriptor(UO->getType())); in EmitBinOpCheck()
1593 CGF.EmitCheckTypeDescriptor(BO->getLHS()->getType())); in EmitBinOpCheck()
1595 CGF.EmitCheckTypeDescriptor(BO->getRHS()->getType())); in EmitBinOpCheck()
1599 StaticData.push_back(CGF.EmitCheckTypeDescriptor(Info.Ty)); in EmitBinOpCheck()
1608 StaticData.push_back(CGF.EmitCheckTypeDescriptor(Info.Ty)); in EmitBinOpCheck()
1614 CGF.EmitCheck(Checks, Check, StaticData, DynamicData); in EmitBinOpCheck()
1622 CGF.ErrorUnsupported(E, "scalar expression"); in VisitExpr()
1625 return llvm::UndefValue::get(CGF.ConvertType(E->getType())); in VisitExpr()
1630 ASTContext &Context = CGF.getContext(); in VisitSYCLUniqueStableNameExpr()
1632 Context.getTargetAddressSpace(CGF.CGM.GetGlobalConstantAddressSpace()); in VisitSYCLUniqueStableNameExpr()
1644 Value *LHS = CGF.EmitScalarExpr(E->getExpr(0)); in VisitShuffleVectorExpr()
1645 Value *RHS = CGF.EmitScalarExpr(E->getExpr(1)); in VisitShuffleVectorExpr()
1670 Value *IIndx = llvm::ConstantInt::get(CGF.SizeTy, i); in VisitShuffleVectorExpr()
1679 Value* V1 = CGF.EmitScalarExpr(E->getExpr(0)); in VisitShuffleVectorExpr()
1680 Value* V2 = CGF.EmitScalarExpr(E->getExpr(1)); in VisitShuffleVectorExpr()
1684 llvm::APSInt Idx = E->getShuffleMaskIdx(CGF.getContext(), i-2); in VisitShuffleVectorExpr()
1699 Value *Src = CGF.EmitScalarExpr(E->getSrcExpr()); in VisitConvertVectorExpr()
1701 SrcType = CGF.getContext().getCanonicalType(SrcType); in VisitConvertVectorExpr()
1702 DstType = CGF.getContext().getCanonicalType(DstType); in VisitConvertVectorExpr()
1770 if (CodeGenFunction::ConstantEmission Constant = CGF.tryEmitAsConstant(E)) { in VisitMemberExpr()
1771 CGF.EmitIgnoredExpr(E->getBase()); in VisitMemberExpr()
1772 return CGF.emitScalarConstant(Constant, E); in VisitMemberExpr()
1775 if (E->EvaluateAsInt(Result, CGF.getContext(), Expr::SE_AllowSideEffects)) { in VisitMemberExpr()
1777 CGF.EmitIgnoredExpr(E->getBase()); in VisitMemberExpr()
1802 if (CGF.SanOpts.has(SanitizerKind::ArrayBounds)) in VisitArraySubscriptExpr()
1803 CGF.EmitBoundsCheck(E, E->getBase(), Idx, IdxTy, /*Accessed*/true); in VisitArraySubscriptExpr()
1820 if (CGF.CGM.getCodeGenOpts().OptimizationLevel > 0) in VisitMatrixSubscriptExpr()
1850 CGF.ErrorUnsupported(E, "GNU array range designator extension"); in VisitInitListExpr()
1895 Args.push_back(getAsInt32(C, CGF.Int32Ty)); in VisitInitListExpr()
2024 CodeGenFunction::CGFPOptionsRAII FPOptions(CGF, CE); in VisitCastExpr()
2040 Address Addr = EmitLValue(E).getAddress(CGF); in VisitCastExpr()
2041 Addr = Builder.CreateElementBitCast(Addr, CGF.ConvertTypeForMem(DestTy)); in VisitCastExpr()
2042 LValue LV = CGF.MakeAddrLValue(Addr, DestTy); in VisitCastExpr()
2047 LValue SourceLVal = CGF.EmitLValue(E); in VisitCastExpr()
2048 Address Addr = Builder.CreateElementBitCast(SourceLVal.getAddress(CGF), in VisitCastExpr()
2049 CGF.ConvertTypeForMem(DestTy)); in VisitCastExpr()
2050 LValue DestLV = CGF.MakeAddrLValue(Addr, DestTy); in VisitCastExpr()
2068 if (CGF.SanOpts.has(SanitizerKind::CFIUnrelatedCast)) { in VisitCastExpr()
2070 CGF.EmitVTablePtrCheckForCast( in VisitCastExpr()
2073 CGF.ConvertTypeForMem( in VisitCastExpr()
2075 CGF.getPointerAlign()), in VisitCastExpr()
2081 if (CGF.CGM.getCodeGenOpts().StrictVTablePointers) { in VisitCastExpr()
2104 CGF.getDebugInfo()->addHeapAllocSiteMetadata(CI, PointeeType, in VisitCastExpr()
2127 llvm::Value *Zero = llvm::Constant::getNullValue(CGF.CGM.Int64Ty); in VisitCastExpr()
2152 llvm::Value *Zero = llvm::Constant::getNullValue(CGF.CGM.Int64Ty); in VisitCastExpr()
2168 Address Addr = CGF.CreateDefaultAlignTempAlloca(SrcTy, "saved-value"); in VisitCastExpr()
2169 LValue LV = CGF.MakeAddrLValue(Addr, E->getType()); in VisitCastExpr()
2170 CGF.EmitStoreOfScalar(Src, LV); in VisitCastExpr()
2171 Addr = Builder.CreateElementBitCast(Addr, CGF.ConvertTypeForMem(DestTy), in VisitCastExpr()
2173 LValue DestLV = CGF.MakeAddrLValue(Addr, DestTy); in VisitCastExpr()
2181 if (E->EvaluateAsRValue(Result, CGF.getContext()) && in VisitCastExpr()
2188 return CGF.CGM.getNullPointer(cast<llvm::PointerType>( in VisitCastExpr()
2193 return CGF.CGM.getTargetCodeGenInfo().performAddrSpaceCast( in VisitCastExpr()
2194 CGF, Visit(E), E->getType()->getPointeeType().getAddressSpace(), in VisitCastExpr()
2219 Address Base = CGF.EmitPointerWithAlignment(E); in VisitCastExpr()
2221 CGF.GetAddressOfDerivedClass(Base, DerivedClassDecl, in VisitCastExpr()
2223 CGF.ShouldNullCheckClassCastValue(CE)); in VisitCastExpr()
2227 if (CGF.sanitizePerformTypeCheck()) in VisitCastExpr()
2228 CGF.EmitTypeCheck(CodeGenFunction::TCK_DowncastPointer, CE->getExprLoc(), in VisitCastExpr()
2231 if (CGF.SanOpts.has(SanitizerKind::CFIDerivedCast)) in VisitCastExpr()
2232 CGF.EmitVTablePtrCheckForCast(DestTy->getPointeeType(), Derived, in VisitCastExpr()
2243 return CGF.EmitPointerWithAlignment(CE).getPointer(); in VisitCastExpr()
2247 Address V = CGF.EmitPointerWithAlignment(E); in VisitCastExpr()
2249 return CGF.EmitDynamicCast(V, DCE); in VisitCastExpr()
2253 return CGF.EmitArrayToPointerDecay(E).getPointer(); in VisitCastExpr()
2255 return EmitLValue(E).getPointer(CGF); in VisitCastExpr()
2259 CGF.EmitIgnoredExpr(E); in VisitCastExpr()
2261 return CGF.CGM.getNullPointer(cast<llvm::PointerType>(ConvertType(DestTy)), in VisitCastExpr()
2266 CGF.EmitIgnoredExpr(E); in VisitCastExpr()
2269 return CGF.CGM.getCXXABI().EmitNullMemberPointer(MPT); in VisitCastExpr()
2283 return CGF.CGM.getCXXABI().EmitMemberPointerConversion(CGF, CE, Src); in VisitCastExpr()
2287 return CGF.EmitARCRetainScalarExpr(E); in VisitCastExpr()
2289 return CGF.EmitObjCConsumeObject(E->getType(), Visit(E)); in VisitCastExpr()
2291 return CGF.EmitARCReclaimReturnedObject(E, /*allowUnsafe*/ Ignored); in VisitCastExpr()
2293 return CGF.EmitARCExtendBlockObject(E); in VisitCastExpr()
2296 return CGF.EmitBlockCopyAndAutorelease(Visit(E), E->getType()); in VisitCastExpr()
2309 assert(CGF.getContext().hasSameUnqualifiedType(E->getType(), DestTy)); in VisitCastExpr()
2319 llvm::Type *MiddleTy = CGF.CGM.getDataLayout().getIntPtrType(DestLLVMTy); in VisitCastExpr()
2326 if (CGF.CGM.getCodeGenOpts().StrictVTablePointers) { in VisitCastExpr()
2338 if (CGF.CGM.getCodeGenOpts().StrictVTablePointers) { in VisitCastExpr()
2350 CGF.EmitIgnoredExpr(E); in VisitCastExpr()
2396 Opts = ScalarConversionOpts(CGF.SanOpts); in VisitCastExpr()
2406 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, CE); in VisitCastExpr()
2421 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, CE); in VisitCastExpr()
2427 return CGF.CGM.getCXXABI().EmitMemberPointerIsNotNull(CGF, MemPtr, MPT); in VisitCastExpr()
2432 return CGF.EmitComplexExpr(E, false, true).first; in VisitCastExpr()
2436 CodeGenFunction::ComplexPairTy V = CGF.EmitComplexExpr(E); in VisitCastExpr()
2451 return CGF.CGM.createOpenCLIntToSamplerConversion(E, CGF); in VisitCastExpr()
2459 CodeGenFunction::StmtExprEvaluation eval(CGF); in VisitStmtExpr()
2460 Address RetAlloca = CGF.EmitCompoundStmt(*E->getSubStmt(), in VisitStmtExpr()
2464 return CGF.EmitLoadOfScalar(CGF.MakeAddrLValue(RetAlloca, E->getType()), in VisitStmtExpr()
2469 CodeGenFunction::RunCleanupsScope Scope(CGF); in VisitExprWithCleanups()
2499 switch (CGF.getLangOpts().getSignedOverflowBehavior()) { in EmitIncDecConsiderOverflowBehavior()
2503 if (!CGF.SanOpts.has(SanitizerKind::SignedIntegerOverflow)) in EmitIncDecConsiderOverflowBehavior()
2510 E, InVal, IsInc, E->getFPFeaturesInEffect(CGF.getLangOpts()))); in EmitIncDecConsiderOverflowBehavior()
2519 CodeGenFunction &CGF; member in __anonb4bd95340311::OMPLastprivateConditionalUpdateRAII
2523 OMPLastprivateConditionalUpdateRAII(CodeGenFunction &CGF, in OMPLastprivateConditionalUpdateRAII() argument
2525 : CGF(CGF), E(E) {} in OMPLastprivateConditionalUpdateRAII()
2527 if (CGF.getLangOpts().OpenMP) in ~OMPLastprivateConditionalUpdateRAII()
2528 CGF.CGM.getOpenMPRuntime().checkAndEmitLastprivateConditional( in ~OMPLastprivateConditionalUpdateRAII()
2529 CGF, E->getSubExpr()); in ~OMPLastprivateConditionalUpdateRAII()
2537 OMPLastprivateConditionalUpdateRAII OMPRegion(CGF, E); in EmitScalarPrePostIncDec()
2549 llvm::Value *True = CGF.EmitToMemory(Builder.getTrue(), type); in EmitScalarPrePostIncDec()
2551 Builder.CreateStore(True, LV.getAddress(CGF), LV.isVolatileQualified()) in EmitScalarPrePostIncDec()
2558 llvm::AtomicRMWInst::Xchg, LV.getPointer(CGF), True, in EmitScalarPrePostIncDec()
2566 CGF.SanOpts.has(SanitizerKind::UnsignedIntegerOverflow)) && in EmitScalarPrePostIncDec()
2567 CGF.getLangOpts().getSignedOverflowBehavior() != in EmitScalarPrePostIncDec()
2573 llvm::Value *amt = CGF.EmitToMemory( in EmitScalarPrePostIncDec()
2576 Builder.CreateAtomicRMW(aop, LV.getPointer(CGF), amt, in EmitScalarPrePostIncDec()
2584 llvm::BasicBlock *opBB = CGF.createBasicBlock("atomic_op", CGF.CurFn); in EmitScalarPrePostIncDec()
2585 value = CGF.EmitToMemory(value, type); in EmitScalarPrePostIncDec()
2610 if (CGF.getContext().isPromotableIntegerType(type)) { in EmitScalarPrePostIncDec()
2611 promotedType = CGF.getContext().getPromotedIntegerType(type); in EmitScalarPrePostIncDec()
2615 CGF.getContext().getCanonicalType(type) != in EmitScalarPrePostIncDec()
2616 CGF.getContext().getCanonicalType(promotedType); in EmitScalarPrePostIncDec()
2629 if (CGF.SanOpts.hasOneOf( in EmitScalarPrePostIncDec()
2647 ScalarConversionOpts(CGF.SanOpts)); in EmitScalarPrePostIncDec()
2655 CGF.SanOpts.has(SanitizerKind::UnsignedIntegerOverflow)) { in EmitScalarPrePostIncDec()
2657 E, value, isInc, E->getFPFeaturesInEffect(CGF.getLangOpts()))); in EmitScalarPrePostIncDec()
2669 = CGF.getContext().getAsVariableArrayType(type)) { in EmitScalarPrePostIncDec()
2670 llvm::Value *numElts = CGF.getVLASize(vla).NumElts; in EmitScalarPrePostIncDec()
2672 llvm::Type *elemTy = CGF.ConvertTypeForMem(vla->getElementType()); in EmitScalarPrePostIncDec()
2673 if (CGF.getLangOpts().isSignedOverflowDefined()) in EmitScalarPrePostIncDec()
2676 value = CGF.EmitCheckedInBoundsGEP( in EmitScalarPrePostIncDec()
2684 value = CGF.EmitCastToVoidPtr(value); in EmitScalarPrePostIncDec()
2685 if (CGF.getLangOpts().isSignedOverflowDefined()) in EmitScalarPrePostIncDec()
2686 value = Builder.CreateGEP(CGF.Int8Ty, value, amt, "incdec.funcptr"); in EmitScalarPrePostIncDec()
2688 value = CGF.EmitCheckedInBoundsGEP(CGF.Int8Ty, value, amt, in EmitScalarPrePostIncDec()
2697 llvm::Type *elemTy = CGF.ConvertTypeForMem(type); in EmitScalarPrePostIncDec()
2698 if (CGF.getLangOpts().isSignedOverflowDefined()) in EmitScalarPrePostIncDec()
2701 value = CGF.EmitCheckedInBoundsGEP( in EmitScalarPrePostIncDec()
2723 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, E); in EmitScalarPrePostIncDec()
2725 if (type->isHalfType() && !CGF.getContext().getLangOpts().NativeHalfType) { in EmitScalarPrePostIncDec()
2727 if (CGF.getContext().getTargetInfo().useFP16ConversionIntrinsics()) { in EmitScalarPrePostIncDec()
2729 CGF.CGM.getIntrinsic(llvm::Intrinsic::convert_from_fp16, in EmitScalarPrePostIncDec()
2730 CGF.CGM.FloatTy), in EmitScalarPrePostIncDec()
2733 value = Builder.CreateFPExt(input, CGF.CGM.FloatTy, "incdec.conv"); in EmitScalarPrePostIncDec()
2752 FS = &CGF.getTarget().getFloat128Format(); in EmitScalarPrePostIncDec()
2754 FS = &CGF.getTarget().getHalfFormat(); in EmitScalarPrePostIncDec()
2756 FS = &CGF.getTarget().getIbm128Format(); in EmitScalarPrePostIncDec()
2758 FS = &CGF.getTarget().getLongDoubleFormat(); in EmitScalarPrePostIncDec()
2764 if (type->isHalfType() && !CGF.getContext().getLangOpts().NativeHalfType) { in EmitScalarPrePostIncDec()
2765 if (CGF.getContext().getTargetInfo().useFP16ConversionIntrinsics()) { in EmitScalarPrePostIncDec()
2767 CGF.CGM.getIntrinsic(llvm::Intrinsic::convert_to_fp16, in EmitScalarPrePostIncDec()
2768 CGF.CGM.FloatTy), in EmitScalarPrePostIncDec()
2796 auto DstSema = CGF.getContext().getFixedPointSemantics(Info.Ty); in EmitScalarPrePostIncDec()
2803 value = CGF.EmitCastToVoidPtr(value); in EmitScalarPrePostIncDec()
2805 CharUnits size = CGF.getContext().getTypeSizeInChars(OPT->getObjectType()); in EmitScalarPrePostIncDec()
2808 llvm::ConstantInt::get(CGF.SizeTy, size.getQuantity()); in EmitScalarPrePostIncDec()
2810 if (CGF.getLangOpts().isSignedOverflowDefined()) in EmitScalarPrePostIncDec()
2811 value = Builder.CreateGEP(CGF.Int8Ty, value, sizeValue, "incdec.objptr"); in EmitScalarPrePostIncDec()
2813 value = CGF.EmitCheckedInBoundsGEP( in EmitScalarPrePostIncDec()
2814 CGF.Int8Ty, value, sizeValue, /*SignedIndices=*/false, isSubtraction, in EmitScalarPrePostIncDec()
2821 llvm::BasicBlock *contBB = CGF.createBasicBlock("atomic_cont", CGF.CurFn); in EmitScalarPrePostIncDec()
2822 auto Pair = CGF.EmitAtomicCompareExchange( in EmitScalarPrePostIncDec()
2824 llvm::Value *old = CGF.EmitToMemory(Pair.first.getScalarVal(), type); in EmitScalarPrePostIncDec()
2834 CGF.EmitStoreThroughBitfieldLValue(RValue::get(value), LV, &value); in EmitScalarPrePostIncDec()
2836 CGF.EmitStoreThroughLValue(RValue::get(value), LV); in EmitScalarPrePostIncDec()
2860 return CGF.EmitPromotedScalarExpr(E->getSubExpr(), PromotionType); in VisitPlus()
2880 Op = CGF.EmitPromotedScalarExpr(E->getSubExpr(), PromotionType); in VisitMinus()
2894 BinOp.FPFeatures = E->getFPFeaturesInEffect(CGF.getLangOpts()); in VisitMinus()
2915 CGF, E->getFPFeaturesInEffect(CGF.getLangOpts())); in VisitUnaryLNot()
2923 Value *BoolVal = CGF.EvaluateExprAsBool(E->getSubExpr()); in VisitUnaryLNot()
2937 if (E->EvaluateAsInt(EVResult, CGF.getContext())) { in VisitOffsetOfExpr()
2954 llvm::Value* Idx = CGF.EmitScalarExpr(IdxExpr); in VisitOffsetOfExpr()
2960 CGF.getContext().getAsArrayType(CurrentType)->getElementType(); in VisitOffsetOfExpr()
2964 CGF.getContext().getTypeSizeInChars(CurrentType).getQuantity()); in VisitOffsetOfExpr()
2974 const ASTRecordLayout &RL = CGF.getContext().getASTRecordLayout(RD); in VisitOffsetOfExpr()
2989 CGF.getContext().getCharWidth(); in VisitOffsetOfExpr()
3002 CGF.ErrorUnsupported(E, "virtual base in offsetof"); in VisitOffsetOfExpr()
3007 const ASTRecordLayout &RL = CGF.getContext().getASTRecordLayout(RD); in VisitOffsetOfExpr()
3033 CGF.getContext().getAsVariableArrayType(TypeToSize)) { in VisitUnaryExprOrTypeTraitExpr()
3036 CGF.EmitVariablyModifiedType(TypeToSize); in VisitUnaryExprOrTypeTraitExpr()
3040 CGF.EmitIgnoredExpr(E->getArgumentExpr()); in VisitUnaryExprOrTypeTraitExpr()
3043 auto VlaSize = CGF.getVLASize(VAT); in VisitUnaryExprOrTypeTraitExpr()
3047 CharUnits eltSize = CGF.getContext().getTypeSizeInChars(VlaSize.Type); in VisitUnaryExprOrTypeTraitExpr()
3049 size = CGF.Builder.CreateNUWMul(CGF.CGM.getSize(eltSize), size); in VisitUnaryExprOrTypeTraitExpr()
3055 CGF.getContext() in VisitUnaryExprOrTypeTraitExpr()
3056 .toCharUnitsFromBits(CGF.getContext().getOpenMPDefaultSimdAlign( in VisitUnaryExprOrTypeTraitExpr()
3059 return llvm::ConstantInt::get(CGF.SizeTy, Alignment); in VisitUnaryExprOrTypeTraitExpr()
3064 return Builder.getInt(E->EvaluateKnownConstInt(CGF.getContext())); in VisitUnaryExprOrTypeTraitExpr()
3087 CodeGenFunction::ComplexPairTy result = CGF.EmitComplexExpr( in VisitReal()
3090 result.first = CGF.EmitPromotedValue(result, PromotionType).first; in VisitReal()
3093 return CGF.EmitLoadOfLValue(CGF.EmitLValue(E), E->getExprLoc()) in VisitReal()
3098 return CGF.EmitComplexExpr(Op, false, true).first; in VisitReal()
3102 return CGF.EmitPromotedScalarExpr(Op, PromotionType); in VisitReal()
3126 CodeGenFunction::ComplexPairTy result = CGF.EmitComplexExpr( in VisitImag()
3129 result.second = CGF.EmitPromotedValue(result, PromotionType).second; in VisitImag()
3132 return CGF.EmitLoadOfLValue(CGF.EmitLValue(E), E->getExprLoc()) in VisitImag()
3137 return CGF.EmitComplexExpr(Op, true, false).second; in VisitImag()
3143 CGF.EmitLValue(Op); in VisitImag()
3145 CGF.EmitPromotedScalarExpr(Op, PromotionType); in VisitImag()
3147 CGF.EmitScalarExpr(Op, true); in VisitImag()
3159 return CGF.Builder.CreateFPExt(result, ConvertType(PromotionType), "ext"); in EmitPromotedValue()
3164 return CGF.Builder.CreateFPTrunc(result, ConvertType(ExprType), "unpromotion"); in EmitUnPromotedValue()
3210 Result.LHS = CGF.EmitPromotedScalarExpr(E->getLHS(), PromotionType); in EmitBinOps()
3211 Result.RHS = CGF.EmitPromotedScalarExpr(E->getRHS(), PromotionType); in EmitBinOps()
3217 Result.FPFeatures = E->getFPFeaturesInEffect(CGF.getLangOpts()); in EmitBinOps()
3230 return CGF.EmitScalarCompoundAssignWithComplex(E, Result); in EmitCompoundAssignLValue()
3242 OpInfo.RHS = CGF.EmitPromotedScalarExpr(E->getRHS(), PromotionTypeRHS); in EmitCompoundAssignLValue()
3247 OpInfo.FPFeatures = E->getFPFeaturesInEffect(CGF.getLangOpts()); in EmitCompoundAssignLValue()
3257 CGF.SanOpts.has(SanitizerKind::UnsignedIntegerOverflow)) && in EmitCompoundAssignLValue()
3258 CGF.getLangOpts().getSignedOverflowBehavior() != in EmitCompoundAssignLValue()
3293 llvm::Value *Amt = CGF.EmitToMemory( in EmitCompoundAssignLValue()
3298 AtomicOp, LHSLV.getPointer(CGF), Amt, in EmitCompoundAssignLValue()
3310 llvm::BasicBlock *opBB = CGF.createBasicBlock("atomic_op", CGF.CurFn); in EmitCompoundAssignLValue()
3312 OpInfo.LHS = CGF.EmitToMemory(OpInfo.LHS, type); in EmitCompoundAssignLValue()
3322 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, OpInfo.FPFeatures); in EmitCompoundAssignLValue()
3337 ScalarConversionOpts(CGF.SanOpts)); in EmitCompoundAssignLValue()
3341 llvm::BasicBlock *contBB = CGF.createBasicBlock("atomic_cont", CGF.CurFn); in EmitCompoundAssignLValue()
3342 auto Pair = CGF.EmitAtomicCompareExchange( in EmitCompoundAssignLValue()
3344 llvm::Value *old = CGF.EmitToMemory(Pair.first.getScalarVal(), LHSTy); in EmitCompoundAssignLValue()
3357 CGF.EmitStoreThroughBitfieldLValue(RValue::get(Result), LHSLV, &Result); in EmitCompoundAssignLValue()
3359 CGF.EmitStoreThroughLValue(RValue::get(Result), LHSLV); in EmitCompoundAssignLValue()
3361 if (CGF.getLangOpts().OpenMP) in EmitCompoundAssignLValue()
3362 CGF.CGM.getOpenMPRuntime().checkAndEmitLastprivateConditional(CGF, in EmitCompoundAssignLValue()
3378 if (!CGF.getLangOpts().CPlusPlus) in EmitCompoundAssign()
3393 if (CGF.SanOpts.has(SanitizerKind::IntegerDivideByZero)) { in EmitUndefinedBehaviorIntegerDivAndRemCheck()
3399 if (CGF.SanOpts.has(SanitizerKind::SignedIntegerOverflow) && in EmitUndefinedBehaviorIntegerDivAndRemCheck()
3401 !IsWidenedIntegerOp(CGF.getContext(), BO->getLHS()) && in EmitUndefinedBehaviorIntegerDivAndRemCheck()
3422 CodeGenFunction::SanitizerScope SanScope(&CGF); in EmitDiv()
3423 if ((CGF.SanOpts.has(SanitizerKind::IntegerDivideByZero) || in EmitDiv()
3424 CGF.SanOpts.has(SanitizerKind::SignedIntegerOverflow)) && in EmitDiv()
3429 } else if (CGF.SanOpts.has(SanitizerKind::FloatDivideByZero) && in EmitDiv()
3450 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, Ops.FPFeatures); in EmitDiv()
3457 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, Ops.FPFeatures); in EmitDiv()
3459 if ((CGF.getLangOpts().OpenCL && in EmitDiv()
3460 !CGF.CGM.getCodeGenOpts().OpenCLCorrectlyRoundedDivSqrt) || in EmitDiv()
3461 (CGF.getLangOpts().HIP && CGF.getLangOpts().CUDAIsDevice && in EmitDiv()
3462 !CGF.CGM.getCodeGenOpts().HIPCorrectlyRoundedDivSqrt)) { in EmitDiv()
3472 CGF.SetFPAccuracy(Val, 2.5); in EmitDiv()
3486 if ((CGF.SanOpts.has(SanitizerKind::IntegerDivideByZero) || in EmitRem()
3487 CGF.SanOpts.has(SanitizerKind::SignedIntegerOverflow)) && in EmitRem()
3490 CodeGenFunction::SanitizerScope SanScope(&CGF); in EmitRem()
3536 CodeGenFunction::SanitizerScope SanScope(&CGF); in EmitOverflowCheckedBinOp()
3537 llvm::Type *opTy = CGF.CGM.getTypes().ConvertType(Ops.Ty); in EmitOverflowCheckedBinOp()
3539 llvm::Function *intrinsic = CGF.CGM.getIntrinsic(IID, opTy); in EmitOverflowCheckedBinOp()
3547 &CGF.getLangOpts().OverflowHandler; in EmitOverflowCheckedBinOp()
3551 if (!isSigned || CGF.SanOpts.has(SanitizerKind::SignedIntegerOverflow)) { in EmitOverflowCheckedBinOp()
3557 CGF.EmitTrapCheck(Builder.CreateNot(overflow), OverflowKind); in EmitOverflowCheckedBinOp()
3564 CGF.createBasicBlock("nooverflow", CGF.CurFn, initialBB->getNextNode()); in EmitOverflowCheckedBinOp()
3565 llvm::BasicBlock *overflowBB = CGF.createBasicBlock("overflow", CGF.CurFn); in EmitOverflowCheckedBinOp()
3574 llvm::Type *Int8Ty = CGF.Int8Ty; in EmitOverflowCheckedBinOp()
3575 llvm::Type *argTypes[] = { CGF.Int64Ty, CGF.Int64Ty, Int8Ty, Int8Ty }; in EmitOverflowCheckedBinOp()
3577 llvm::FunctionType::get(CGF.Int64Ty, argTypes, true); in EmitOverflowCheckedBinOp()
3579 CGF.CGM.CreateRuntimeFunction(handlerTy, *handlerName); in EmitOverflowCheckedBinOp()
3583 llvm::Value *lhs = Builder.CreateSExt(Ops.LHS, CGF.Int64Ty); in EmitOverflowCheckedBinOp()
3584 llvm::Value *rhs = Builder.CreateSExt(Ops.RHS, CGF.Int64Ty); in EmitOverflowCheckedBinOp()
3595 CGF.EmitNounwindRuntimeCall(handler, handlerArgs); in EmitOverflowCheckedBinOp()
3610 static Value *emitPointerArithmetic(CodeGenFunction &CGF, in emitPointerArithmetic() argument
3631 auto &DL = CGF.CGM.getDataLayout(); in emitPointerArithmetic()
3651 if (BinaryOperator::isNullPointerArithmeticExtension(CGF.getContext(), in emitPointerArithmetic()
3655 return CGF.Builder.CreateIntToPtr(index, pointer->getType()); in emitPointerArithmetic()
3660 index = CGF.Builder.CreateIntCast(index, DL.getIndexType(PtrTy), isSigned, in emitPointerArithmetic()
3666 index = CGF.Builder.CreateNeg(index, "idx.neg"); in emitPointerArithmetic()
3668 if (CGF.SanOpts.has(SanitizerKind::ArrayBounds)) in emitPointerArithmetic()
3669 CGF.EmitBoundsCheck(op.E, pointerOperand, index, indexOperand->getType(), in emitPointerArithmetic()
3679 = CGF.CGM.getSize(CGF.getContext().getTypeSizeInChars(objectType)); in emitPointerArithmetic()
3681 index = CGF.Builder.CreateMul(index, objectSize); in emitPointerArithmetic()
3683 Value *result = CGF.Builder.CreateBitCast(pointer, CGF.VoidPtrTy); in emitPointerArithmetic()
3684 result = CGF.Builder.CreateGEP(CGF.Int8Ty, result, index, "add.ptr"); in emitPointerArithmetic()
3685 return CGF.Builder.CreateBitCast(result, pointer->getType()); in emitPointerArithmetic()
3690 = CGF.getContext().getAsVariableArrayType(elementType)) { in emitPointerArithmetic()
3692 llvm::Value *numElements = CGF.getVLASize(vla).NumElts; in emitPointerArithmetic()
3698 llvm::Type *elemTy = CGF.ConvertTypeForMem(vla->getElementType()); in emitPointerArithmetic()
3699 if (CGF.getLangOpts().isSignedOverflowDefined()) { in emitPointerArithmetic()
3700 index = CGF.Builder.CreateMul(index, numElements, "vla.index"); in emitPointerArithmetic()
3701 pointer = CGF.Builder.CreateGEP(elemTy, pointer, index, "add.ptr"); in emitPointerArithmetic()
3703 index = CGF.Builder.CreateNSWMul(index, numElements, "vla.index"); in emitPointerArithmetic()
3704 pointer = CGF.EmitCheckedInBoundsGEP( in emitPointerArithmetic()
3715 Value *result = CGF.EmitCastToVoidPtr(pointer); in emitPointerArithmetic()
3716 result = CGF.Builder.CreateGEP(CGF.Int8Ty, result, index, "add.ptr"); in emitPointerArithmetic()
3717 return CGF.Builder.CreateBitCast(result, pointer->getType()); in emitPointerArithmetic()
3720 llvm::Type *elemTy = CGF.ConvertTypeForMem(elementType); in emitPointerArithmetic()
3721 if (CGF.getLangOpts().isSignedOverflowDefined()) in emitPointerArithmetic()
3722 return CGF.Builder.CreateGEP(elemTy, pointer, index, "add.ptr"); in emitPointerArithmetic()
3724 return CGF.EmitCheckedInBoundsGEP( in emitPointerArithmetic()
3735 const CodeGenFunction &CGF, CGBuilderTy &Builder, in buildFMulAdd() argument
3752 CGF.CGM.getIntrinsic(llvm::Intrinsic::experimental_constrained_fmuladd, in buildFMulAdd()
3757 CGF.CGM.getIntrinsic(llvm::Intrinsic::fmuladd, Addend->getType()), in buildFMulAdd()
3772 const CodeGenFunction &CGF, CGBuilderTy &Builder, in tryEmitFMulAdd() argument
3789 return buildFMulAdd(LHSBinOp, op.RHS, CGF, Builder, false, isSub); in tryEmitFMulAdd()
3794 return buildFMulAdd(RHSBinOp, op.LHS, CGF, Builder, isSub, false); in tryEmitFMulAdd()
3801 return buildFMulAdd(LHSBinOp, op.RHS, CGF, Builder, false, isSub); in tryEmitFMulAdd()
3807 return buildFMulAdd(RHSBinOp, op.LHS, CGF, Builder, isSub, false); in tryEmitFMulAdd()
3816 return emitPointerArithmetic(CGF, op, CodeGenFunction::NotSubtraction); in EmitAdd()
3819 switch (CGF.getLangOpts().getSignedOverflowBehavior()) { in EmitAdd()
3823 if (!CGF.SanOpts.has(SanitizerKind::SignedIntegerOverflow)) in EmitAdd()
3827 if (CanElideOverflowCheck(CGF.getContext(), op)) in EmitAdd()
3835 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, op.FPFeatures); in EmitAdd()
3840 CGF.SanOpts.has(SanitizerKind::UnsignedIntegerOverflow) && in EmitAdd()
3841 !CanElideOverflowCheck(CGF.getContext(), op)) in EmitAdd()
3845 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, op.FPFeatures); in EmitAdd()
3847 if (Value *FMulAdd = tryEmitFMulAdd(op, CGF, Builder)) in EmitAdd()
3886 ASTContext &Ctx = CGF.getContext(); in EmitFixedPointBinOp()
3969 switch (CGF.getLangOpts().getSignedOverflowBehavior()) { in EmitSub()
3973 if (!CGF.SanOpts.has(SanitizerKind::SignedIntegerOverflow)) in EmitSub()
3977 if (CanElideOverflowCheck(CGF.getContext(), op)) in EmitSub()
3985 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, op.FPFeatures); in EmitSub()
3990 CGF.SanOpts.has(SanitizerKind::UnsignedIntegerOverflow) && in EmitSub()
3991 !CanElideOverflowCheck(CGF.getContext(), op)) in EmitSub()
3995 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, op.FPFeatures); in EmitSub()
3997 if (Value *FMulAdd = tryEmitFMulAdd(op, CGF, Builder, true)) in EmitSub()
4011 return emitPointerArithmetic(CGF, op, CodeGenFunction::IsSubtraction); in EmitSub()
4017 = Builder.CreatePtrToInt(op.LHS, CGF.PtrDiffTy, "sub.ptr.lhs.cast"); in EmitSub()
4019 = Builder.CreatePtrToInt(op.RHS, CGF.PtrDiffTy, "sub.ptr.rhs.cast"); in EmitSub()
4030 = CGF.getContext().getAsVariableArrayType(elementType)) { in EmitSub()
4031 auto VlaSize = CGF.getVLASize(vla); in EmitSub()
4036 CharUnits eltSize = CGF.getContext().getTypeSizeInChars(elementType); in EmitSub()
4038 divisor = CGF.Builder.CreateNUWMul(CGF.CGM.getSize(eltSize), divisor); in EmitSub()
4050 elementSize = CGF.getContext().getTypeSizeInChars(elementType); in EmitSub()
4056 divisor = CGF.CGM.getSize(elementSize); in EmitSub()
4100 bool SanitizeSignedBase = CGF.SanOpts.has(SanitizerKind::ShiftBase) && in EmitShl()
4102 !CGF.getLangOpts().isSignedOverflowDefined() && in EmitShl()
4103 !CGF.getLangOpts().CPlusPlus20; in EmitShl()
4105 CGF.SanOpts.has(SanitizerKind::UnsignedShiftBase) && in EmitShl()
4108 bool SanitizeExponent = CGF.SanOpts.has(SanitizerKind::ShiftExponent); in EmitShl()
4110 if (CGF.getLangOpts().OpenCL) in EmitShl()
4114 CodeGenFunction::SanitizerScope SanScope(&CGF); in EmitShl()
4129 llvm::BasicBlock *Cont = CGF.createBasicBlock("cont"); in EmitShl()
4130 llvm::BasicBlock *CheckShiftBase = CGF.createBasicBlock("check"); in EmitShl()
4135 CGF.EmitBlock(CheckShiftBase); in EmitShl()
4140 if (SanitizeUnsignedBase || CGF.getLangOpts().CPlusPlus) { in EmitShl()
4151 CGF.EmitBlock(Cont); in EmitShl()
4179 if (CGF.getLangOpts().OpenCL) in EmitShr()
4181 else if (CGF.SanOpts.has(SanitizerKind::ShiftExponent) && in EmitShr()
4183 CodeGenFunction::SanitizerScope SanScope(&CGF); in EmitShr()
4255 Value *LHS = CGF.EmitScalarExpr(E->getLHS()); in EmitCompare()
4256 Value *RHS = CGF.EmitScalarExpr(E->getRHS()); in EmitCompare()
4257 Result = CGF.CGM.getCXXABI().EmitMemberPointerComparison( in EmitCompare()
4258 CGF, LHS, RHS, MPT, E->getOpcode() == BO_NE); in EmitCompare()
4323 llvm::Function *F = CGF.CGM.getIntrinsic(ID); in EmitCompare()
4333 E->getType() == CGF.getContext().BoolTy) in EmitCompare()
4335 return EmitScalarConversion(Result, CGF.getContext().BoolTy, E->getType(), in EmitCompare()
4342 CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, BOInfo.FPFeatures); in EmitCompare()
4352 if (CGF.CGM.getCodeGenOpts().StrictVTablePointers && in EmitCompare()
4381 LHS = CGF.EmitComplexExpr(E->getLHS()); in EmitCompare()
4389 RHS = CGF.EmitComplexExpr(E->getRHS()); in EmitCompare()
4390 assert(CGF.getContext().hasSameUnqualifiedType(CETy, in EmitCompare()
4397 assert(CGF.getContext().hasSameUnqualifiedType(CETy, RHSTy) && in EmitCompare()
4423 return EmitScalarConversion(Result, CGF.getContext().BoolTy, E->getType(), in EmitCompare()
4435 std::tie(LHS, RHS) = CGF.EmitARCStoreStrong(E, Ignore); in VisitBinAssign()
4439 std::tie(LHS, RHS) = CGF.EmitARCStoreAutoreleasing(E); in VisitBinAssign()
4443 std::tie(LHS, RHS) = CGF.EmitARCStoreUnsafeUnretained(E, Ignore); in VisitBinAssign()
4449 RHS = CGF.EmitARCStoreWeak(LHS.getAddress(CGF), RHS, Ignore); in VisitBinAssign()
4463 CGF.EmitStoreThroughBitfieldLValue(RValue::get(RHS), LHS, &RHS); in VisitBinAssign()
4465 CGF.EmitNullabilityCheck(LHS, RHS, E->getExprLoc()); in VisitBinAssign()
4466 CGF.EmitStoreThroughLValue(RValue::get(RHS), LHS); in VisitBinAssign()
4475 if (!CGF.getLangOpts().CPlusPlus) in VisitBinAssign()
4489 CGF.incrementProfileCounter(E); in VisitBinLAnd()
4496 CGF, E->getFPFeaturesInEffect(CGF.getLangOpts())); in VisitBinLAnd()
4507 bool InstrumentRegions = CGF.CGM.getCodeGenOpts().hasProfileClangInstr(); in VisitBinLAnd()
4513 if (CGF.ConstantFoldsToSimpleInteger(E->getLHS(), LHSCondVal)) { in VisitBinLAnd()
4515 CGF.incrementProfileCounter(E); in VisitBinLAnd()
4517 Value *RHSCond = CGF.EvaluateExprAsBool(E->getRHS()); in VisitBinLAnd()
4525 llvm::BasicBlock *FBlock = CGF.createBasicBlock("land.end"); in VisitBinLAnd()
4526 llvm::BasicBlock *RHSBlockCnt = CGF.createBasicBlock("land.rhscnt"); in VisitBinLAnd()
4528 CGF.EmitBlock(RHSBlockCnt); in VisitBinLAnd()
4529 CGF.incrementProfileCounter(E->getRHS()); in VisitBinLAnd()
4530 CGF.EmitBranch(FBlock); in VisitBinLAnd()
4531 CGF.EmitBlock(FBlock); in VisitBinLAnd()
4539 if (!CGF.ContainsLabel(E->getRHS())) in VisitBinLAnd()
4543 llvm::BasicBlock *ContBlock = CGF.createBasicBlock("land.end"); in VisitBinLAnd()
4544 llvm::BasicBlock *RHSBlock = CGF.createBasicBlock("land.rhs"); in VisitBinLAnd()
4546 CodeGenFunction::ConditionalEvaluation eval(CGF); in VisitBinLAnd()
4549 CGF.EmitBranchOnBoolExpr(E->getLHS(), RHSBlock, ContBlock, in VisitBinLAnd()
4550 CGF.getProfileCount(E->getRHS())); in VisitBinLAnd()
4561 eval.begin(CGF); in VisitBinLAnd()
4562 CGF.EmitBlock(RHSBlock); in VisitBinLAnd()
4563 CGF.incrementProfileCounter(E); in VisitBinLAnd()
4564 Value *RHSCond = CGF.EvaluateExprAsBool(E->getRHS()); in VisitBinLAnd()
4565 eval.end(CGF); in VisitBinLAnd()
4575 llvm::BasicBlock *RHSBlockCnt = CGF.createBasicBlock("land.rhscnt"); in VisitBinLAnd()
4577 CGF.EmitBlock(RHSBlockCnt); in VisitBinLAnd()
4578 CGF.incrementProfileCounter(E->getRHS()); in VisitBinLAnd()
4579 CGF.EmitBranch(ContBlock); in VisitBinLAnd()
4586 auto NL = ApplyDebugLocation::CreateEmpty(CGF); in VisitBinLAnd()
4587 CGF.EmitBlock(ContBlock); in VisitBinLAnd()
4594 auto NL = ApplyDebugLocation::CreateArtificial(CGF); in VisitBinLAnd()
4605 CGF.incrementProfileCounter(E); in VisitBinLOr()
4612 CGF, E->getFPFeaturesInEffect(CGF.getLangOpts())); in VisitBinLOr()
4623 bool InstrumentRegions = CGF.CGM.getCodeGenOpts().hasProfileClangInstr(); in VisitBinLOr()
4629 if (CGF.ConstantFoldsToSimpleInteger(E->getLHS(), LHSCondVal)) { in VisitBinLOr()
4631 CGF.incrementProfileCounter(E); in VisitBinLOr()
4633 Value *RHSCond = CGF.EvaluateExprAsBool(E->getRHS()); in VisitBinLOr()
4641 llvm::BasicBlock *FBlock = CGF.createBasicBlock("lor.end"); in VisitBinLOr()
4642 llvm::BasicBlock *RHSBlockCnt = CGF.createBasicBlock("lor.rhscnt"); in VisitBinLOr()
4644 CGF.EmitBlock(RHSBlockCnt); in VisitBinLOr()
4645 CGF.incrementProfileCounter(E->getRHS()); in VisitBinLOr()
4646 CGF.EmitBranch(FBlock); in VisitBinLOr()
4647 CGF.EmitBlock(FBlock); in VisitBinLOr()
4655 if (!CGF.ContainsLabel(E->getRHS())) in VisitBinLOr()
4659 llvm::BasicBlock *ContBlock = CGF.createBasicBlock("lor.end"); in VisitBinLOr()
4660 llvm::BasicBlock *RHSBlock = CGF.createBasicBlock("lor.rhs"); in VisitBinLOr()
4662 CodeGenFunction::ConditionalEvaluation eval(CGF); in VisitBinLOr()
4665 CGF.EmitBranchOnBoolExpr(E->getLHS(), ContBlock, RHSBlock, in VisitBinLOr()
4666 CGF.getCurrentProfileCount() - in VisitBinLOr()
4667 CGF.getProfileCount(E->getRHS())); in VisitBinLOr()
4678 eval.begin(CGF); in VisitBinLOr()
4681 CGF.EmitBlock(RHSBlock); in VisitBinLOr()
4682 CGF.incrementProfileCounter(E); in VisitBinLOr()
4683 Value *RHSCond = CGF.EvaluateExprAsBool(E->getRHS()); in VisitBinLOr()
4685 eval.end(CGF); in VisitBinLOr()
4695 llvm::BasicBlock *RHSBlockCnt = CGF.createBasicBlock("lor.rhscnt"); in VisitBinLOr()
4697 CGF.EmitBlock(RHSBlockCnt); in VisitBinLOr()
4698 CGF.incrementProfileCounter(E->getRHS()); in VisitBinLOr()
4699 CGF.EmitBranch(ContBlock); in VisitBinLOr()
4705 CGF.EmitBlock(ContBlock); in VisitBinLOr()
4713 CGF.EmitIgnoredExpr(E->getLHS()); in VisitBinComma()
4714 CGF.EnsureInsertPoint(); in VisitBinComma()
4727 CodeGenFunction &CGF) { in isCheapEnoughToEvaluateUnconditionally() argument
4729 return E->IgnoreParens()->isEvaluatable(CGF.getContext()); in isCheapEnoughToEvaluateUnconditionally()
4745 CodeGenFunction::OpaqueValueMapping binding(CGF, E); in VisitAbstractConditionalOperator()
4754 if (CGF.ConstantFoldsToSimpleInteger(condExpr, CondExprBool)) { in VisitAbstractConditionalOperator()
4759 if (!CGF.ContainsLabel(dead)) { in VisitAbstractConditionalOperator()
4761 CGF.incrementProfileCounter(E); in VisitAbstractConditionalOperator()
4768 Result = llvm::UndefValue::get(CGF.ConvertType(E->getType())); in VisitAbstractConditionalOperator()
4776 if ((CGF.getLangOpts().OpenCL && condExpr->getType()->isVectorType()) || in VisitAbstractConditionalOperator()
4778 CGF.incrementProfileCounter(E); in VisitAbstractConditionalOperator()
4780 llvm::Value *CondV = CGF.EmitScalarExpr(condExpr); in VisitAbstractConditionalOperator()
4818 CGF.incrementProfileCounter(E); in VisitAbstractConditionalOperator()
4820 llvm::Value *CondV = CGF.EmitScalarExpr(condExpr); in VisitAbstractConditionalOperator()
4835 if (isCheapEnoughToEvaluateUnconditionally(lhsExpr, CGF) && in VisitAbstractConditionalOperator()
4836 isCheapEnoughToEvaluateUnconditionally(rhsExpr, CGF)) { in VisitAbstractConditionalOperator()
4837 llvm::Value *CondV = CGF.EvaluateExprAsBool(condExpr); in VisitAbstractConditionalOperator()
4838 llvm::Value *StepV = Builder.CreateZExtOrBitCast(CondV, CGF.Int64Ty); in VisitAbstractConditionalOperator()
4840 CGF.incrementProfileCounter(E, StepV); in VisitAbstractConditionalOperator()
4852 llvm::BasicBlock *LHSBlock = CGF.createBasicBlock("cond.true"); in VisitAbstractConditionalOperator()
4853 llvm::BasicBlock *RHSBlock = CGF.createBasicBlock("cond.false"); in VisitAbstractConditionalOperator()
4854 llvm::BasicBlock *ContBlock = CGF.createBasicBlock("cond.end"); in VisitAbstractConditionalOperator()
4856 CodeGenFunction::ConditionalEvaluation eval(CGF); in VisitAbstractConditionalOperator()
4857 CGF.EmitBranchOnBoolExpr(condExpr, LHSBlock, RHSBlock, in VisitAbstractConditionalOperator()
4858 CGF.getProfileCount(lhsExpr)); in VisitAbstractConditionalOperator()
4860 CGF.EmitBlock(LHSBlock); in VisitAbstractConditionalOperator()
4861 CGF.incrementProfileCounter(E); in VisitAbstractConditionalOperator()
4862 eval.begin(CGF); in VisitAbstractConditionalOperator()
4864 eval.end(CGF); in VisitAbstractConditionalOperator()
4869 CGF.EmitBlock(RHSBlock); in VisitAbstractConditionalOperator()
4870 eval.begin(CGF); in VisitAbstractConditionalOperator()
4872 eval.end(CGF); in VisitAbstractConditionalOperator()
4875 CGF.EmitBlock(ContBlock); in VisitAbstractConditionalOperator()
4898 CGF.EmitVariablyModifiedType(Ty); in VisitVAArgExpr()
4901 Address ArgPtr = CGF.EmitVAArg(VE, ArgValue); in VisitVAArgExpr()
4907 CGF.ErrorUnsupported(VE, "va_arg expression"); in VisitVAArgExpr()
4926 return CGF.EmitBlockLiteral(block); in VisitBlockExpr()
4930 static Value *ConvertVec3AndVec4(CGBuilderTy &Builder, CodeGenFunction &CGF, in ConvertVec3AndVec4() argument
4983 Value *Src = CGF.EmitScalarExpr(E->getSrcExpr()); in VisitAsTypeExpr()
4998 return CGF.emitBoolVecConversion(Src, NumElementsDst, "astype"); in VisitAsTypeExpr()
5003 Src = ConvertVec3AndVec4(Builder, CGF, Src, 4); in VisitAsTypeExpr()
5004 Src = createCastsForTypeOfSameSize(Builder, CGF.CGM.getDataLayout(), Src, in VisitAsTypeExpr()
5017 Src = createCastsForTypeOfSameSize(Builder, CGF.CGM.getDataLayout(), Src, in VisitAsTypeExpr()
5020 Src = ConvertVec3AndVec4(Builder, CGF, Src, 3); in VisitAsTypeExpr()
5025 return createCastsForTypeOfSameSize(Builder, CGF.CGM.getDataLayout(), in VisitAsTypeExpr()
5030 return CGF.EmitAtomicExpr(E).getScalarVal(); in VisitAtomicExpr()