Lines Matching defs:CGF
75 RValue DefaultABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
77 return CGF.EmitLoadOfAnyValue(
78 CGF.MakeAddrLValue(
79 EmitVAArgInstr(CGF, VAListAddr, Ty, classifyArgumentType(Ty)), Ty),
99 llvm::Type *CodeGen::getVAListElementType(CodeGenFunction &CGF) {
100 return CGF.ConvertTypeForMem(
101 CGF.getContext().getBuiltinVaListType()->getPointeeType());
147 llvm::Value *CodeGen::emitRoundPointerUpToAlignment(CodeGenFunction &CGF,
151 llvm::Value *RoundUp = CGF.Builder.CreateConstInBoundsGEP1_32(
152 CGF.Builder.getInt8Ty(), Ptr, Align.getQuantity() - 1);
153 return CGF.Builder.CreateIntrinsic(
154 llvm::Intrinsic::ptrmask, {Ptr->getType(), CGF.IntPtrTy},
155 {RoundUp, llvm::ConstantInt::get(CGF.IntPtrTy, -Align.getQuantity())},
160 CodeGen::emitVoidPtrDirectVAArg(CodeGenFunction &CGF, Address VAListAddr,
166 if (VAListAddr.getElementType() != CGF.Int8PtrTy)
167 VAListAddr = VAListAddr.withElementType(CGF.Int8PtrTy);
169 llvm::Value *Ptr = CGF.Builder.CreateLoad(VAListAddr, "argp.cur");
174 Addr = Address(emitRoundPointerUpToAlignment(CGF, Ptr, DirectAlign),
175 CGF.Int8Ty, DirectAlign);
177 Addr = Address(Ptr, CGF.Int8Ty, SlotSize);
183 CGF.Builder.CreateConstInBoundsByteGEP(Addr, FullDirectSize, "argp.next");
184 CGF.Builder.CreateStore(NextPtr.emitRawPointer(CGF), VAListAddr);
188 if (DirectSize < SlotSize && CGF.CGM.getDataLayout().isBigEndian() &&
190 Addr = CGF.Builder.CreateConstInBoundsByteGEP(Addr, SlotSize - DirectSize);
196 RValue CodeGen::emitVoidPtrVAArg(CodeGenFunction &CGF, Address VAListAddr,
205 DirectSize = CGF.getPointerSize();
206 DirectAlign = CGF.getPointerAlign();
213 llvm::Type *DirectTy = CGF.ConvertTypeForMem(ValueTy), *ElementTy = DirectTy;
215 unsigned AllocaAS = CGF.CGM.getDataLayout().getAllocaAddrSpace();
216 DirectTy = llvm::PointerType::get(CGF.getLLVMContext(), AllocaAS);
219 Address Addr = emitVoidPtrDirectVAArg(CGF, VAListAddr, DirectTy, DirectSize,
224 Addr = Address(CGF.Builder.CreateLoad(Addr), ElementTy, ValueInfo.Align);
227 return CGF.EmitLoadOfAnyValue(CGF.MakeAddrLValue(Addr, ValueTy), Slot);
230 Address CodeGen::emitMergePHI(CodeGenFunction &CGF, Address Addr1,
235 llvm::PHINode *PHI = CGF.Builder.CreatePHI(Addr1.getType(), 2, Name);
236 PHI->addIncoming(Addr1.emitRawPointer(CGF), Block1);
237 PHI->addIncoming(Addr2.emitRawPointer(CGF), Block2);
406 Address CodeGen::EmitVAArgInstr(CodeGenFunction &CGF, Address VAListAddr,
426 auto TyInfo = CGF.getContext().getTypeInfoInChars(Ty);
429 llvm::Type *ElementTy = CGF.ConvertTypeForMem(Ty);
432 CGF.Builder.CreateVAArg(VAListAddr.emitRawPointer(CGF), BaseTy);
447 Address Temp = CGF.CreateMemTemp(Ty, "varet");
448 Val = CGF.Builder.CreateVAArg(VAListAddr.emitRawPointer(CGF),
449 CGF.ConvertTypeForMem(Ty));
450 CGF.Builder.CreateStore(Val, Temp);