Lines Matching defs:CGF

74 RValue DefaultABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
76 return CGF.EmitLoadOfAnyValue(
77 CGF.MakeAddrLValue(
78 EmitVAArgInstr(CGF, VAListAddr, Ty, classifyArgumentType(Ty)), Ty),
108 llvm::Type *CodeGen::getVAListElementType(CodeGenFunction &CGF) {
109 return CGF.ConvertTypeForMem(
110 CGF.getContext().getBuiltinVaListType()->getPointeeType());
156 llvm::Value *CodeGen::emitRoundPointerUpToAlignment(CodeGenFunction &CGF,
160 llvm::Value *RoundUp = CGF.Builder.CreateConstInBoundsGEP1_32(
161 CGF.Builder.getInt8Ty(), Ptr, Align.getQuantity() - 1);
162 return CGF.Builder.CreateIntrinsic(
163 llvm::Intrinsic::ptrmask, {Ptr->getType(), CGF.IntPtrTy},
164 {RoundUp, llvm::ConstantInt::get(CGF.IntPtrTy, -Align.getQuantity())},
169 CodeGen::emitVoidPtrDirectVAArg(CodeGenFunction &CGF, Address VAListAddr,
175 if (VAListAddr.getElementType() != CGF.Int8PtrTy)
176 VAListAddr = VAListAddr.withElementType(CGF.Int8PtrTy);
178 llvm::Value *Ptr = CGF.Builder.CreateLoad(VAListAddr, "argp.cur");
183 Addr = Address(emitRoundPointerUpToAlignment(CGF, Ptr, DirectAlign),
184 CGF.Int8Ty, DirectAlign);
186 Addr = Address(Ptr, CGF.Int8Ty, SlotSize);
192 CGF.Builder.CreateConstInBoundsByteGEP(Addr, FullDirectSize, "argp.next");
193 CGF.Builder.CreateStore(NextPtr.emitRawPointer(CGF), VAListAddr);
197 if (DirectSize < SlotSize && CGF.CGM.getDataLayout().isBigEndian() &&
199 Addr = CGF.Builder.CreateConstInBoundsByteGEP(Addr, SlotSize - DirectSize);
205 RValue CodeGen::emitVoidPtrVAArg(CodeGenFunction &CGF, Address VAListAddr,
214 DirectSize = CGF.getPointerSize();
215 DirectAlign = CGF.getPointerAlign();
222 llvm::Type *DirectTy = CGF.ConvertTypeForMem(ValueTy), *ElementTy = DirectTy;
224 unsigned AllocaAS = CGF.CGM.getDataLayout().getAllocaAddrSpace();
225 DirectTy = llvm::PointerType::get(CGF.getLLVMContext(), AllocaAS);
228 Address Addr = emitVoidPtrDirectVAArg(CGF, VAListAddr, DirectTy, DirectSize,
233 Addr = Address(CGF.Builder.CreateLoad(Addr), ElementTy, ValueInfo.Align);
236 return CGF.EmitLoadOfAnyValue(CGF.MakeAddrLValue(Addr, ValueTy), Slot);
239 Address CodeGen::emitMergePHI(CodeGenFunction &CGF, Address Addr1,
244 llvm::PHINode *PHI = CGF.Builder.CreatePHI(Addr1.getType(), 2, Name);
245 PHI->addIncoming(Addr1.emitRawPointer(CGF), Block1);
246 PHI->addIncoming(Addr2.emitRawPointer(CGF), Block2);
415 Address CodeGen::EmitVAArgInstr(CodeGenFunction &CGF, Address VAListAddr,
435 auto TyInfo = CGF.getContext().getTypeInfoInChars(Ty);
438 llvm::Type *ElementTy = CGF.ConvertTypeForMem(Ty);
441 CGF.Builder.CreateVAArg(VAListAddr.emitRawPointer(CGF), BaseTy);
456 Address Temp = CGF.CreateMemTemp(Ty, "varet");
457 Val = CGF.Builder.CreateVAArg(VAListAddr.emitRawPointer(CGF),
458 CGF.ConvertTypeForMem(Ty));
459 CGF.Builder.CreateStore(Val, Temp);