Home | History | Annotate | Download | only in CodeGen

Lines Matching refs:CGF

111 ApplyNonVirtualAndVirtualOffset(CodeGenFunction &CGF, llvm::Value *ptr,
120 baseOffset = llvm::ConstantInt::get(CGF.PtrDiffTy,
123 baseOffset = CGF.Builder.CreateAdd(virtualOffset, baseOffset);
130 ptr = CGF.Builder.CreateBitCast(ptr, CGF.Int8PtrTy);
131 ptr = CGF.Builder.CreateInBoundsGEP(ptr, baseOffset, "add.ptr");
342 void Emit(CodeGenFunction &CGF, Flags flags) {
344 cast<CXXMethodDecl>(CGF.CurCodeDecl)->getParent();
348 CGF.GetAddressOfDirectBaseInCompleteClass(CGF.LoadCXXThis(),
351 CGF.EmitCXXDestructorCall(D, Dtor_Base, BaseIsVirtual,
380 static void EmitBaseInitializer(CodeGenFunction &CGF,
387 llvm::Value *ThisPtr = CGF.LoadCXXThis();
402 if (BaseInitializerUsesThis(CGF.getContext(), BaseInit->getInit()))
403 CGF.InitializeVTablePointers(ClassDecl);
408 CGF.GetAddressOfDirectBaseInCompleteClass(ThisPtr, ClassDecl,
411 CharUnits Alignment = CGF.getContext().getTypeAlignInChars(BaseType);
418 CGF.EmitAggExpr(BaseInit->getInit(), AggSlot);
420 if (CGF.CGM.getLangOpts().Exceptions &&
422 CGF.EHStack.pushCleanup<CallBaseDtor>(EHCleanup, BaseClassDecl,
426 static void EmitAggMemberInitializer(CodeGenFunction &CGF,
436 CodeGenFunction::RunCleanupsScope Cleanups(CGF);
442 llvm::Value *ArrayIndex = CGF
443 Dest = CGF.Builder.CreateInBoundsGEP(Dest, ArrayIndex, "destaddress");
445 Next = CGF.Builder.CreateAdd(ArrayIndex, Next, "inc");
446 CGF.Builder.CreateStore(Next, ArrayIndexVar);
450 CharUnits Align = CGF.getContext().getTypeAlignInChars(T);
454 switch (CGF.getEvaluationKind(T)) {
456 CGF.EmitScalarInit(Init, /*decl*/ 0, LV, false);
459 CGF.EmitComplexExprIntoLValue(Init, LV, /*isInit*/ true);
468 CGF.EmitAggExpr(Init, Slot);
476 CGF.MaybeEmitStdInitializerListCleanup(LV.getAddress(), Init);
481 const ConstantArrayType *Array = CGF.getContext().getAsConstantArrayType(T);
484 = CGF.GetAddrOfLocalVar(ArrayIndexes[Index]);
490 CGF.ConvertType(CGF.getContext().getSizeType()));
491 CGF.Builder.CreateStore(Zero, IndexVar);
494 llvm::BasicBlock *CondBlock = CGF.createBasicBlock("for.cond");
495 llvm::BasicBlock *AfterFor = CGF.createBasicBlock("for.end");
497 CGF.EmitBlock(CondBlock);
499 llvm::BasicBlock *ForBody = CGF.createBasicBlock("for.body");
503 llvm::Value *Counter = CGF.Builder.CreateLoad(IndexVar);
506 llvm::Value *IsLess = CGF.Builder.CreateICmpULT(Counter, NumElementsPtr,
510 CGF.Builder.CreateCondBr(IsLess, ForBody, AfterFor);
512 CGF.EmitBlock(ForBody);
513 llvm::BasicBlock *ContinueBlock = CGF.createBasicBlock("for.inc");
516 CodeGenFunction::RunCleanupsScope Cleanups(CGF);
520 EmitAggMemberInitializer(CGF, LHS, Init, ArrayIndexVar,
524 CGF.EmitBlock(ContinueBlock);
528 Counter = CGF.Builder.CreateLoad(IndexVar);
529 NextVal = CGF.Builder.CreateAdd(Counter, NextVal, "inc");
530 CGF.Builder.CreateStore(NextVal, IndexVar);
533 CGF.EmitBranch(CondBlock);
536 CGF.EmitBlock(AfterFor, true);
539 static void EmitMemberInitializer(CodeGenFunction &CGF,
552 llvm::Value *ThisPtr = CGF.LoadCXXThis();
553 QualType RecordTy = CGF.getContext().getTypeDeclType(ClassDecl);
554 LValue LHS = CGF.MakeNaturalAlignAddrLValue(ThisPtr, RecordTy);
563 LHS = CGF.EmitLValueForFieldInitialization(LHS, cast<FieldDecl>(*I));
566 LHS = CGF.EmitLValueForFieldInitialization(LHS, Field);
575 = CGF.getContext().getAsConstantArrayType(FieldType);
578 QualType BaseElementTy = CGF.getContext().getBaseElementType(Array);
580 if (BaseElementTy.isPODType(CGF.getContext()) ||
586 = CGF.Builder.CreateLoad(CGF.GetAddrOfLocalVar(Args[SrcArgIndex]));
587 LValue ThisRHSLV = CGF.MakeNaturalAlignAddrLValue(SrcPtr, RecordTy);
588 LValue Src = CGF.EmitLValueForFieldInitialization(ThisRHSLV, Field);
591 CGF.EmitAggregateCopy(LHS.getAddress(), Src.getAddress(), FieldType,
600 CGF.EmitInitializerForField(Field, LHS, MemberInit->getInit(), ArrayIndexes);
756 FieldMemcpyizer(CodeGenFunction &CGF, const CXXRecordDecl *ClassDecl,
758 : CGF(CGF), ClassDecl(ClassDecl), SrcRec(SrcRec),
759 RecLayout(CGF.getContext().getASTRecordLayout(ClassDecl)),
780 LastField->getBitWidthValue(CGF.getContext()) :
781 CGF.getContext().getTypeSize(LastField->getType());
784 CGF.getContext().getCharWidth() - 1;
786 CGF.getContext().toCharUnitsFromBits(MemcpySizeBits);
801 CGF.getTypes().getCGRecordLayout(FirstField->getParent());
805 Alignment = CGF.getContext().getDeclAlign(FirstField);
808 assert((CGF.getContext().toCharUnitsFromBits(FirstFieldOffset) %
812 QualType RecordTy = CGF.getContext().getTypeDeclType(ClassDecl);
813 llvm::Value *ThisPtr = CGF.LoadCXXThis();
814 LValue DestLV = CGF.MakeNaturalAlignAddrLValue(ThisPtr, RecordTy);
815 LValue Dest = CGF.EmitLValueForFieldInitialization(DestLV, FirstField);
816 llvm::Value *SrcPtr = CGF.Builder.CreateLoad(CGF.GetAddrOfLocalVar(SrcRec));
817 LValue SrcLV = CGF.MakeNaturalAlignAddrLValue(SrcPtr, RecordTy);
818 LValue Src = CGF.EmitLValueForFieldInitialization(SrcLV, FirstField);
831 CodeGenFunction &CGF;
840 llvm::Type::getInt8PtrTy(CGF.getLLVMContext(), DPT->getAddressSpace());
841 DestPtr = CGF.Builder.CreateBitCast(DestPtr, DBP);
845 llvm::Type::getInt8PtrTy(CGF.getLLVMContext(), SPT->getAddressSpace());
846 SrcPtr = CGF.Builder.CreateBitCast(SrcPtr, SBP);
848 CGF.Builder.CreateMemCpy(DestPtr, SrcPtr, Size.getQuantity(),
911 !(FieldType.isTriviallyCopyableType(CGF.getContext()) ||
924 ConstructorMemcpyizer(CodeGenFunction &CGF, const CXXConstructorDecl *CD,
926 : FieldMemcpyizer(CGF, CD->getParent(), getTrivialCopySource(CD, Args)),
930 CGF.getLangOpts().getGC() == LangOptions::NonGC),
939 EmitMemberInitializer(CGF, ConstructorDecl->getParent(), MemberInit,
949 EmitMemberInitializer(CGF, ConstructorDecl->getParent(),
962 llvm::Value *ThisPtr = CGF.LoadCXXThis();
963 QualType RecordTy = CGF.getContext().getTypeDeclType(ClassDecl);
964 LValue LHS = CGF.MakeNaturalAlignAddrLValue(ThisPtr, RecordTy);
969 if (CGF.needsEHCleanup(dtorKind))
970 CGF.pushEHDestroy(dtorKind, LHS.getAddress(), FieldType);
1064 AssignmentMemcpyizer(CodeGenFunction &CGF, const CXXMethodDecl *AD,
1066 : FieldMemcpyizer(CGF, AD->getParent(), Args[Args.size() - 1]),
1067 AssignmentsMemcpyable(CGF.getLangOpts().getGC() == LangOptions::NonGC) {
1078 CGF.EmitStmt(S);
1085 CGF.EmitStmt(AggregatedStmts[i]);
1342 void Emit(CodeGenFunction &CGF, Flags flags) {
1343 const CXXDestructorDecl *Dtor = cast<CXXDestructorDecl>(CGF.CurCodeDecl);
1345 CGF.EmitDeleteCall(Dtor->getOperatorDelete(), CGF.LoadCXXThis(),
1346 CGF.getContext().getTagDeclType(ClassDecl));
1358 void Emit(CodeGenFunction &CGF, Flags flags) {
1359 llvm::BasicBlock *callDeleteBB = CGF.createBasicBlock("dtor.call_delete");
1360 llvm::BasicBlock *continueBB = CGF.createBasicBlock("dtor.continue");
1362 = CGF.Builder.CreateIsNull(ShouldDeleteCondition);
1363 CGF.Builder.CreateCondBr(ShouldCallDelete, continueBB, callDeleteBB);
1365 CGF.EmitBlock(callDeleteBB);
1366 const CXXDestructorDecl *Dtor = cast<CXXDestructorDecl>(CGF.CurCodeDecl);
1368 CGF.EmitDeleteCall(Dtor->getOperatorDelete(), CGF.LoadCXXThis(),
1369 CGF.getContext().getTagDeclType(ClassDecl));
1370 CGF.Builder.CreateBr(continueBB);
1372 CGF.EmitBlock(continueBB);
1387 void Emit(CodeGenFunction &CGF, Flags flags) {
1389 llvm::Value *thisValue = CGF.LoadCXXThis();
1390 QualType RecordTy = CGF.getContext().getTagDeclType(field->getParent());
1391 LValue ThisLV = CGF.MakeAddrLValue(thisValue, RecordTy);
1392 LValue LV = CGF.EmitLValueForField(ThisLV, field);
1395 CGF.emitDestroy(LV.getAddress(), field->getType(), destroyer,
1619 void CodeGenFunction::destroyCXXObject(CodeGenFunction &CGF,
1626 CGF.EmitCXXDestructorCall(dtor, Dtor_Complete, /*for vbase*/ false,
1774 void Emit(CodeGenFunction &CGF, Flags flags) {
1775 CGF.EmitCXXDestructorCall(Dtor, Type, /*ForVirtualBase=*/false,
1838 void Emit(CodeGenFunction &CGF, Flags flags) {
1839 CGF.EmitCXXDestructorCall(Dtor, Dtor_Complete,