Home | History | Annotate | Download | only in CodeGen

Lines Matching refs:CGF

108 ApplyNonVirtualAndVirtualOffset(CodeGenFunction &CGF, llvm::Value *ThisPtr,
111 CGF.ConvertType(CGF.getContext().getPointerDiffType());
121 BaseOffset = CGF.Builder.CreateAdd(Virtual, NonVirtualOffset);
128 ThisPtr = CGF.Builder.CreateBitCast(ThisPtr, CGF.Int8PtrTy);
129 ThisPtr = CGF.Builder.CreateGEP(ThisPtr, BaseOffset, "add.ptr");
277 static llvm::Value *GetVTTParameter(CodeGenFunction &CGF, GlobalDecl GD,
284 const CXXRecordDecl *RD = cast<CXXMethodDecl>(CGF.CurFuncDecl)->getParent();
294 assert(!CodeGenVTables::needsVTTParameter(CGF.CurGD) &&
300 CGF.getContext().getASTRecordLayout(RD);
306 CGF.CGM.getVTables().getSubVTTIndex(RD, BaseSubobject(Base, BaseOffset));
310 if (CodeGenVTables::needsVTTParameter(CGF.CurGD)) {
312 VTT = CGF.LoadCXXVTT();
313 VTT = CGF.Builder.CreateConstInBoundsGEP1_64(VTT, SubVTTIndex);
316 VTT = CGF.CGM.getVTables().GetAddrOfVTT(RD);
317 VTT = CGF.Builder.CreateConstInBoundsGEP2_64(VTT, 0, SubVTTIndex);
331 void Emit(CodeGenFunction &CGF, Flags flags) {
333 cast<CXXMethodDecl>(CGF.CurCodeDecl)->getParent();
337 CGF.GetAddressOfDirectBaseInCompleteClass(CGF.LoadCXXThis(),
340 CGF.EmitCXXDestructorCall(D, Dtor_Base, BaseIsVirtual, Addr);
368 static void EmitBaseInitializer(CodeGenFunction &CGF,
375 llvm::Value *ThisPtr = CGF.LoadCXXThis();
390 if (BaseInitializerUsesThis(CGF.getContext(), BaseInit->getInit()))
391 CGF.InitializeVTablePointers(ClassDecl);
396 CGF.GetAddressOfDirectBaseInCompleteClass(ThisPtr, ClassDecl,
399 CharUnits Alignment = CGF.getContext().getTypeAlignInChars(BaseType);
406 CGF.EmitAggExpr(BaseInit->getInit(), AggSlot);
408 if (CGF.CGM.getLangOpts().Exceptions &&
410 CGF.EHStack.pushCleanup<CallBaseDtor>(EHCleanup, BaseClassDecl,
414 static void EmitAggMemberInitializer(CodeGenFunction &CGF,
424 CodeGenFunction::RunCleanupsScope Cleanups(CGF);
430 llvm::Value *ArrayIndex = CGF.Builder.CreateLoad(ArrayIndexVar);
431 Dest = CGF.Builder.CreateInBoundsGEP(Dest, ArrayIndex, "destaddress");
433 Next = CGF.Builder.CreateAdd(ArrayIndex, Next, "inc");
434 CGF.Builder.CreateStore(Next, ArrayIndexVar);
438 CharUnits Align = CGF.getContext().getTypeAlignInChars(T);
442 if (!CGF.hasAggregateLLVMType(T)) {
443 CGF.EmitScalarInit(Init, /*decl*/ 0, LV, false);
445 CGF.EmitComplexExprIntoAddr(Init, LV.getAddress(),
454 CGF.EmitAggExpr(Init, Slot);
460 CGF.MaybeEmitStdInitializerListCleanup(LV.getAddress(), Init);
465 const ConstantArrayType *Array = CGF.getContext().getAsConstantArrayType(T);
468 = CGF.GetAddrOfLocalVar(ArrayIndexes[Index]);
474 CGF.ConvertType(CGF.getContext().getSizeType()));
475 CGF.Builder.CreateStore(Zero, IndexVar);
478 llvm::BasicBlock *CondBlock = CGF.createBasicBlock("for.cond");
479 llvm::BasicBlock *AfterFor = CGF.createBasicBlock("for.end");
481 CGF.EmitBlock(CondBlock);
483 llvm::BasicBlock *ForBody = CGF.createBasicBlock("for.body");
487 llvm::Value *Counter = CGF.Builder.CreateLoad(IndexVar);
490 llvm::Value *IsLess = CGF.Builder.CreateICmpULT(Counter, NumElementsPtr,
494 CGF.Builder.CreateCondBr(IsLess, ForBody, AfterFor);
496 CGF.EmitBlock(ForBody);
497 llvm::BasicBlock *ContinueBlock = CGF.createBasicBlock("for.inc");
500 CodeGenFunction::RunCleanupsScope Cleanups(CGF);
504 EmitAggMemberInitializer(CGF, LHS, Init, ArrayIndexVar,
508 CGF.EmitBlock(ContinueBlock);
512 Counter = CGF.Builder.CreateLoad(IndexVar);
513 NextVal = CGF.Builder.CreateAdd(Counter, NextVal, "inc");
514 CGF.Builder.CreateStore(NextVal, IndexVar);
517 CGF.EmitBranch(CondBlock);
520 CGF.EmitBlock(AfterFor, true);
531 void Emit(CodeGenFunction &CGF, Flags flags) {
532 CGF.EmitCXXDestructorCall(Dtor, Dtor_Complete, /*ForVirtualBase=*/false,
544 static void EmitMemberInitializer(CodeGenFunction &CGF,
557 llvm::Value *ThisPtr = CGF.LoadCXXThis();
558 QualType RecordTy = CGF.getContext().getTypeDeclType(ClassDecl);
563 LHS = CGF.EmitLValueForAnonRecordField(ThisPtr,
567 LValue ThisLHSLV = CGF.MakeNaturalAlignAddrLValue(ThisPtr, RecordTy);
568 LHS = CGF.EmitLValueForFieldInitialization(ThisLHSLV, Field);
577 = CGF.getContext().getAsConstantArrayType(FieldType);
580 QualType BaseElementTy = CGF.getContext().getBaseElementType(Array);
582 if (BaseElementTy.isPODType(CGF.getContext()) ||
589 = CGF.Builder.CreateLoad(CGF.GetAddrOfLocalVar(Args[SrcArgIndex]));
590 LValue ThisRHSLV = CGF.MakeNaturalAlignAddrLValue(SrcPtr, RecordTy);
591 LValue Src = CGF.EmitLValueForFieldInitialization(ThisRHSLV, Field);
594 CGF.EmitAggregateCopy(LHS.getAddress(), Src.getAddress(), FieldType,
603 CGF.EmitInitializerForField(Field, LHS, MemberInit->getInit(), ArrayIndexes);
962 void Emit(CodeGenFunction &CGF, Flags flags) {
963 const CXXDestructorDecl *Dtor = cast<CXXDestructorDecl>(CGF.CurCodeDecl);
965 CGF.EmitDeleteCall(Dtor->getOperatorDelete(), CGF.LoadCXXThis(),
966 CGF.getContext().getTagDeclType(ClassDecl));
981 void Emit(CodeGenFunction &CGF, Flags flags) {
983 llvm::Value *thisValue = CGF.LoadCXXThis();
984 QualType RecordTy = CGF.getContext().getTagDeclType(field->getParent());
985 LValue ThisLV = CGF.MakeAddrLValue(thisValue, RecordTy);
986 LValue LV = CGF.EmitLValueForField(ThisLV, field);
989 CGF.emitDestroy(LV.getAddress(), field->getType(), destroyer,
1210 void CodeGenFunction::destroyCXXObject(CodeGenFunction &CGF,
1217 CGF.EmitCXXDestructorCall(dtor, Dtor_Complete, /*for vbase*/ false,
1362 void Emit(CodeGenFunction &CGF, Flags flags) {
1363 CGF.EmitCXXDestructorCall(Dtor, Type, /*ForVirtualBase=*/false,
1422 void Emit(CodeGenFunction &CGF, Flags flags) {
1423 CGF.EmitCXXDestructorCall(Dtor, Dtor_Complete,