reference, declaration → definition definition → references, declarations, derived classes, virtual overrides reference to multiple definitions → definitions unreferenced |
5305 llvm::Type *BaseTy = CGF.ConvertType(Ty); 5329 llvm::BasicBlock *MaybeRegBlock = CGF.createBasicBlock("vaarg.maybe_reg"); 5330 llvm::BasicBlock *InRegBlock = CGF.createBasicBlock("vaarg.in_reg"); 5331 llvm::BasicBlock *OnStackBlock = CGF.createBasicBlock("vaarg.on_stack"); 5332 llvm::BasicBlock *ContBlock = CGF.createBasicBlock("vaarg.end"); 5343 reg_offs_p = CGF.Builder.CreateStructGEP(VAListAddr, 3, "gr_offs_p"); 5344 reg_offs = CGF.Builder.CreateLoad(reg_offs_p, "gr_offs"); 5349 reg_offs_p = CGF.Builder.CreateStructGEP(VAListAddr, 4, "vr_offs_p"); 5350 reg_offs = CGF.Builder.CreateLoad(reg_offs_p, "vr_offs"); 5364 UsingStack = CGF.Builder.CreateICmpSGE( 5365 reg_offs, llvm::ConstantInt::get(CGF.Int32Ty, 0)); 5367 CGF.Builder.CreateCondBr(UsingStack, OnStackBlock, MaybeRegBlock); 5371 CGF.EmitBlock(MaybeRegBlock); 5379 reg_offs = CGF.Builder.CreateAdd( 5380 reg_offs, llvm::ConstantInt::get(CGF.Int32Ty, Align - 1), 5382 reg_offs = CGF.Builder.CreateAnd( 5383 reg_offs, llvm::ConstantInt::get(CGF.Int32Ty, -Align), 5392 NewOffset = CGF.Builder.CreateAdd( 5393 reg_offs, llvm::ConstantInt::get(CGF.Int32Ty, RegSize), "new_reg_offs"); 5394 CGF.Builder.CreateStore(NewOffset, reg_offs_p); 5399 InRegs = CGF.Builder.CreateICmpSLE( 5400 NewOffset, llvm::ConstantInt::get(CGF.Int32Ty, 0), "inreg"); 5402 CGF.Builder.CreateCondBr(InRegs, InRegBlock, OnStackBlock); 5410 CGF.EmitBlock(InRegBlock); 5414 CGF.Builder.CreateStructGEP(VAListAddr, reg_top_index, "reg_top_p"); 5415 reg_top = CGF.Builder.CreateLoad(reg_top_p, "reg_top"); 5416 Address BaseAddr(CGF.Builder.CreateInBoundsGEP(reg_top, reg_offs), 5419 llvm::Type *MemTy = CGF.ConvertTypeForMem(Ty); 5437 llvm::Type *BaseTy = CGF.ConvertType(QualType(Base, 0)); 5439 Address Tmp = CGF.CreateTempAlloca(HFATy, 5444 if (CGF.CGM.getDataLayout().isBigEndian() && 5451 CGF.Builder.CreateConstInBoundsByteGEP(BaseAddr, BaseOffset); 5452 LoadAddr = CGF.Builder.CreateElementBitCast(LoadAddr, BaseTy); 5454 Address StoreAddr = CGF.Builder.CreateConstArrayGEP(Tmp, i); 5456 llvm::Value *Elem = CGF.Builder.CreateLoad(LoadAddr); 5457 CGF.Builder.CreateStore(Elem, StoreAddr); 5460 RegAddr = CGF.Builder.CreateElementBitCast(Tmp, MemTy); 5466 if (CGF.CGM.getDataLayout().isBigEndian() && !IsIndirect && 5470 BaseAddr = CGF.Builder.CreateConstInBoundsByteGEP(BaseAddr, Offset); 5473 RegAddr = CGF.Builder.CreateElementBitCast(BaseAddr, MemTy); 5476 CGF.EmitBranch(ContBlock); 5481 CGF.EmitBlock(OnStackBlock); 5483 Address stack_p = CGF.Builder.CreateStructGEP(VAListAddr, 0, "stack_p"); 5484 llvm::Value *OnStackPtr = CGF.Builder.CreateLoad(stack_p, "stack"); 5491 OnStackPtr = CGF.Builder.CreatePtrToInt(OnStackPtr, CGF.Int64Ty); 5491 OnStackPtr = CGF.Builder.CreatePtrToInt(OnStackPtr, CGF.Int64Ty); 5493 OnStackPtr = CGF.Builder.CreateAdd( 5494 OnStackPtr, llvm::ConstantInt::get(CGF.Int64Ty, Align - 1), 5496 OnStackPtr = CGF.Builder.CreateAnd( 5497 OnStackPtr, llvm::ConstantInt::get(CGF.Int64Ty, -Align), 5500 OnStackPtr = CGF.Builder.CreateIntToPtr(OnStackPtr, CGF.Int8PtrTy); 5500 OnStackPtr = CGF.Builder.CreateIntToPtr(OnStackPtr, CGF.Int8PtrTy); 5513 llvm::Value *StackSizeC = CGF.Builder.getSize(StackSize); 5515 CGF.Builder.CreateInBoundsGEP(OnStackPtr, StackSizeC, "new_stack"); 5518 CGF.Builder.CreateStore(NewStack, stack_p); 5520 if (CGF.CGM.getDataLayout().isBigEndian() && !isAggregateTypeForABI(Ty) && 5523 OnStackAddr = CGF.Builder.CreateConstInBoundsByteGEP(OnStackAddr, Offset); 5526 OnStackAddr = CGF.Builder.CreateElementBitCast(OnStackAddr, MemTy); 5528 CGF.EmitBranch(ContBlock); 5533 CGF.EmitBlock(ContBlock); 5535 Address ResAddr = emitMergePHI(CGF, RegAddr, InRegBlock, 5539 return Address(CGF.Builder.CreateLoad(ResAddr, "vaarg.addr"),