Lines Matching refs:CGF

32   RValue EmitVAArg(CodeGenFunction &CGF, Address VAListAddr, QualType Ty,
182 Address HexagonABIInfo::EmitVAArgFromMemory(CodeGenFunction &CGF, in EmitVAArgFromMemory() argument
187 CGF.Builder.CreateStructGEP(VAListAddr, 2, "__overflow_area_pointer_p"); in EmitVAArgFromMemory()
188 llvm::Value *__overflow_area_pointer = CGF.Builder.CreateLoad( in EmitVAArgFromMemory()
191 uint64_t Align = CGF.getContext().getTypeAlign(Ty) / 8; in EmitVAArgFromMemory()
197 llvm::Value *Offset = llvm::ConstantInt::get(CGF.Int64Ty, Align - 1); in EmitVAArgFromMemory()
201 CGF.Builder.CreateGEP(CGF.Int8Ty, __overflow_area_pointer, Offset); in EmitVAArgFromMemory()
203 CGF.Builder.CreatePtrToInt(__overflow_area_pointer, CGF.Int32Ty); in EmitVAArgFromMemory()
207 llvm::Value *Mask = llvm::ConstantInt::get(CGF.Int32Ty, -(int)Align); in EmitVAArgFromMemory()
208 __overflow_area_pointer = CGF.Builder.CreateIntToPtr( in EmitVAArgFromMemory()
209 CGF.Builder.CreateAnd(AsInt, Mask), __overflow_area_pointer->getType(), in EmitVAArgFromMemory()
215 llvm::Type *PTy = CGF.ConvertTypeForMem(Ty); in EmitVAArgFromMemory()
220 uint64_t Offset = llvm::alignTo(CGF.getContext().getTypeSize(Ty) / 8, 4); in EmitVAArgFromMemory()
222 __overflow_area_pointer = CGF.Builder.CreateGEP( in EmitVAArgFromMemory()
223 CGF.Int8Ty, __overflow_area_pointer, in EmitVAArgFromMemory()
224 llvm::ConstantInt::get(CGF.Int32Ty, Offset), in EmitVAArgFromMemory()
226 CGF.Builder.CreateStore(__overflow_area_pointer, __overflow_area_pointer_p); in EmitVAArgFromMemory()
231 Address HexagonABIInfo::EmitVAArgForHexagon(CodeGenFunction &CGF, in EmitVAArgForHexagon() argument
235 llvm::Type *BP = CGF.Int8PtrTy; in EmitVAArgForHexagon()
236 CGBuilderTy &Builder = CGF.Builder; in EmitVAArgForHexagon()
240 uint64_t TyAlign = CGF.getContext().getTypeAlign(Ty) / 8; in EmitVAArgForHexagon()
243 llvm::Value *AddrAsInt = Builder.CreatePtrToInt(Addr, CGF.Int32Ty); in EmitVAArgForHexagon()
249 Address(Addr, CGF.ConvertType(Ty), CharUnits::fromQuantity(TyAlign)); in EmitVAArgForHexagon()
251 uint64_t Offset = llvm::alignTo(CGF.getContext().getTypeSize(Ty) / 8, 4); in EmitVAArgForHexagon()
253 CGF.Int8Ty, Addr, llvm::ConstantInt::get(CGF.Int32Ty, Offset), "ap.next"); in EmitVAArgForHexagon()
259 Address HexagonABIInfo::EmitVAArgForHexagonLinux(CodeGenFunction &CGF, in EmitVAArgForHexagonLinux() argument
262 int ArgSize = CGF.getContext().getTypeSize(Ty) / 8; in EmitVAArgForHexagonLinux()
265 return EmitVAArgFromMemory(CGF, VAListAddr, Ty); in EmitVAArgForHexagonLinux()
272 Ty = CGF.getContext().getCanonicalType(Ty); in EmitVAArgForHexagonLinux()
275 llvm::BasicBlock *MaybeRegBlock = CGF.createBasicBlock("vaarg.maybe_reg"); in EmitVAArgForHexagonLinux()
276 llvm::BasicBlock *InRegBlock = CGF.createBasicBlock("vaarg.in_reg"); in EmitVAArgForHexagonLinux()
277 llvm::BasicBlock *OnStackBlock = CGF.createBasicBlock("vaarg.on_stack"); in EmitVAArgForHexagonLinux()
278 llvm::BasicBlock *ContBlock = CGF.createBasicBlock("vaarg.end"); in EmitVAArgForHexagonLinux()
282 ArgSize = (CGF.getContext().getTypeSize(Ty) <= 32) ? 4 : 8; in EmitVAArgForHexagonLinux()
283 int ArgAlign = (CGF.getContext().getTypeSize(Ty) <= 32) ? 4 : 8; in EmitVAArgForHexagonLinux()
286 CGF.EmitBlock(MaybeRegBlock); in EmitVAArgForHexagonLinux()
289 Address __current_saved_reg_area_pointer_p = CGF.Builder.CreateStructGEP( in EmitVAArgForHexagonLinux()
291 llvm::Value *__current_saved_reg_area_pointer = CGF.Builder.CreateLoad( in EmitVAArgForHexagonLinux()
295 Address __saved_reg_area_end_pointer_p = CGF.Builder.CreateStructGEP( in EmitVAArgForHexagonLinux()
297 llvm::Value *__saved_reg_area_end_pointer = CGF.Builder.CreateLoad( in EmitVAArgForHexagonLinux()
305 CGF.Builder.CreatePtrToInt(__current_saved_reg_area_pointer, in EmitVAArgForHexagonLinux()
306 CGF.Int32Ty); in EmitVAArgForHexagonLinux()
308 __current_saved_reg_area_pointer_int = CGF.Builder.CreateAdd( in EmitVAArgForHexagonLinux()
310 llvm::ConstantInt::get(CGF.Int32Ty, (ArgAlign - 1)), in EmitVAArgForHexagonLinux()
314 CGF.Builder.CreateAnd(__current_saved_reg_area_pointer_int, in EmitVAArgForHexagonLinux()
315 llvm::ConstantInt::get(CGF.Int32Ty, -ArgAlign), in EmitVAArgForHexagonLinux()
319 CGF.Builder.CreateIntToPtr(__current_saved_reg_area_pointer_int, in EmitVAArgForHexagonLinux()
325 CGF.Builder.CreateGEP(CGF.Int8Ty, __current_saved_reg_area_pointer, in EmitVAArgForHexagonLinux()
326 llvm::ConstantInt::get(CGF.Int32Ty, ArgSize), in EmitVAArgForHexagonLinux()
330 UsingStack = CGF.Builder.CreateICmpSGT(__new_saved_reg_area_pointer, in EmitVAArgForHexagonLinux()
333 CGF.Builder.CreateCondBr(UsingStack, OnStackBlock, InRegBlock); in EmitVAArgForHexagonLinux()
337 CGF.EmitBlock(InRegBlock); in EmitVAArgForHexagonLinux()
339 llvm::Type *PTy = CGF.ConvertType(Ty); in EmitVAArgForHexagonLinux()
340 llvm::Value *__saved_reg_area_p = CGF.Builder.CreateBitCast( in EmitVAArgForHexagonLinux()
343 CGF.Builder.CreateStore(__new_saved_reg_area_pointer, in EmitVAArgForHexagonLinux()
346 CGF.EmitBranch(ContBlock); in EmitVAArgForHexagonLinux()
350 CGF.EmitBlock(OnStackBlock); in EmitVAArgForHexagonLinux()
354 CGF.Builder.CreateStructGEP(VAListAddr, 2, "__overflow_area_pointer_p"); in EmitVAArgForHexagonLinux()
355 llvm::Value *__overflow_area_pointer = CGF.Builder.CreateLoad( in EmitVAArgForHexagonLinux()
361 CGF.Builder.CreatePtrToInt(__overflow_area_pointer, CGF.Int32Ty); in EmitVAArgForHexagonLinux()
364 CGF.Builder.CreateAdd(__overflow_area_pointer_int, in EmitVAArgForHexagonLinux()
365 llvm::ConstantInt::get(CGF.Int32Ty, ArgAlign - 1), in EmitVAArgForHexagonLinux()
369 CGF.Builder.CreateAnd(__overflow_area_pointer_int, in EmitVAArgForHexagonLinux()
370 llvm::ConstantInt::get(CGF.Int32Ty, -ArgAlign), in EmitVAArgForHexagonLinux()
373 __overflow_area_pointer = CGF.Builder.CreateIntToPtr( in EmitVAArgForHexagonLinux()
380 llvm::Value *__new_overflow_area_pointer = CGF.Builder.CreateGEP( in EmitVAArgForHexagonLinux()
381 CGF.Int8Ty, __overflow_area_pointer, in EmitVAArgForHexagonLinux()
382 llvm::ConstantInt::get(CGF.Int32Ty, ArgSize), in EmitVAArgForHexagonLinux()
385 CGF.Builder.CreateStore(__new_overflow_area_pointer, in EmitVAArgForHexagonLinux()
388 CGF.Builder.CreateStore(__new_overflow_area_pointer, in EmitVAArgForHexagonLinux()
392 llvm::Type *OverflowPTy = CGF.ConvertTypeForMem(Ty); in EmitVAArgForHexagonLinux()
393 llvm::Value *__overflow_area_p = CGF.Builder.CreateBitCast( in EmitVAArgForHexagonLinux()
396 CGF.EmitBranch(ContBlock); in EmitVAArgForHexagonLinux()
400 CGF.EmitBlock(ContBlock); in EmitVAArgForHexagonLinux()
402 llvm::Type *MemTy = CGF.ConvertTypeForMem(Ty); in EmitVAArgForHexagonLinux()
404 llvm::PHINode *ArgAddr = CGF.Builder.CreatePHI(MemPTy, 2, "vaarg.addr"); in EmitVAArgForHexagonLinux()
411 RValue HexagonABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr, in EmitVAArg() argument
415 return CGF.EmitLoadOfAnyValue( in EmitVAArg()
416 CGF.MakeAddrLValue(EmitVAArgForHexagonLinux(CGF, VAListAddr, Ty), Ty), in EmitVAArg()
419 return CGF.EmitLoadOfAnyValue( in EmitVAArg()
420 CGF.MakeAddrLValue(EmitVAArgForHexagon(CGF, VAListAddr, Ty), Ty), Slot); in EmitVAArg()