diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-09-12 00:59:49 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-09-12 00:59:49 +0000 |
commit | 34d91fddd0252d64456cdcea0bd22073f006f4e2 (patch) | |
tree | fff8135793dfbd5234659299b8ef9b0c78541544 /lib/CodeGen/TargetABIInfo.cpp | |
parent | ca6408c3176783f0b29da4679a08512aa05f0c73 (diff) |
Formatting fixes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81594 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/TargetABIInfo.cpp')
-rw-r--r-- | lib/CodeGen/TargetABIInfo.cpp | 66 |
1 files changed, 39 insertions, 27 deletions
diff --git a/lib/CodeGen/TargetABIInfo.cpp b/lib/CodeGen/TargetABIInfo.cpp index 67e25978a8..1ebad5dd5c 100644 --- a/lib/CodeGen/TargetABIInfo.cpp +++ b/lib/CodeGen/TargetABIInfo.cpp @@ -1107,6 +1107,8 @@ static llvm::Value *EmitVAArgFromMemory(llvm::Value *VAListAddr, llvm::Value *X86_64ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, CodeGenFunction &CGF) const { llvm::LLVMContext &VMContext = CGF.getLLVMContext(); + const llvm::Type *i32Ty = llvm::Type::getInt32Ty(VMContext); + const llvm::Type *DoubleTy = llvm::Type::getDoubleTy(VMContext); // Assume that va_list type is correct; should be pointer to LLVM type: // struct { @@ -1143,7 +1145,7 @@ llvm::Value *X86_64ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, gp_offset = CGF.Builder.CreateLoad(gp_offset_p, "gp_offset"); InRegs = CGF.Builder.CreateICmpULE(gp_offset, - llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), + llvm::ConstantInt::get(i32Ty, 48 - neededInt * 8), "fits_in_gp"); } @@ -1153,7 +1155,7 @@ llvm::Value *X86_64ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, fp_offset = CGF.Builder.CreateLoad(fp_offset_p, "fp_offset"); llvm::Value *FitsInFP = CGF.Builder.CreateICmpULE(fp_offset, - llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), + llvm::ConstantInt::get(i32Ty, 176 - neededSSE * 16), "fits_in_fp"); InRegs = InRegs ? CGF.Builder.CreateAnd(InRegs, FitsInFP) : FitsInFP; @@ -1222,13 +1224,11 @@ llvm::Value *X86_64ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, llvm::Value *RegAddrLo = CGF.Builder.CreateGEP(RegAddr, fp_offset); llvm::Value *RegAddrHi = CGF.Builder.CreateGEP(RegAddrLo, - llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), 16)); + llvm::ConstantInt::get(i32Ty, 16)); const llvm::Type *DblPtrTy = - llvm::PointerType::getUnqual(llvm::Type::getDoubleTy(VMContext)); - const llvm::StructType *ST = llvm::StructType::get(VMContext, - llvm::Type::getDoubleTy(VMContext), - llvm::Type::getDoubleTy(VMContext), - NULL); + llvm::PointerType::getUnqual(DoubleTy); + const llvm::StructType *ST = llvm::StructType::get(VMContext, DoubleTy, + DoubleTy, NULL); llvm::Value *V, *Tmp = CGF.CreateTempAlloca(ST); V = CGF.Builder.CreateLoad(CGF.Builder.CreateBitCast(RegAddrLo, DblPtrTy)); @@ -1245,14 +1245,12 @@ llvm::Value *X86_64ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, // l->gp_offset = l->gp_offset + num_gp * 8 // l->fp_offset = l->fp_offset + num_fp * 16. if (neededInt) { - llvm::Value *Offset = llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), - neededInt * 8); + llvm::Value *Offset = llvm::ConstantInt::get(i32Ty, neededInt * 8); CGF.Builder.CreateStore(CGF.Builder.CreateAdd(gp_offset, Offset), gp_offset_p); } if (neededSSE) { - llvm::Value *Offset = llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), - neededSSE * 16); + llvm::Value *Offset = llvm::ConstantInt::get(i32Ty, neededSSE * 16); CGF.Builder.CreateStore(CGF.Builder.CreateAdd(fp_offset, Offset), fp_offset_p); } @@ -1275,7 +1273,10 @@ llvm::Value *X86_64ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, return ResAddr; } -// ABI Info for PIC16 +// PIC16 ABI Implementation + +namespace { + class PIC16ABIInfo : public ABIInfo { ABIArgInfo classifyReturnType(QualType RetTy, ASTContext &Context, @@ -1296,9 +1297,10 @@ class PIC16ABIInfo : public ABIInfo { virtual llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty, CodeGenFunction &CGF) const; - }; +} + ABIArgInfo PIC16ABIInfo::classifyReturnType(QualType RetTy, ASTContext &Context, llvm::LLVMContext &VMContext) const { @@ -1320,6 +1322,10 @@ llvm::Value *PIC16ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, return 0; } +// ARM ABI Implementation + +namespace { + class ARMABIInfo : public ABIInfo { ABIArgInfo classifyReturnType(QualType RetTy, ASTContext &Context, @@ -1336,6 +1342,8 @@ class ARMABIInfo : public ABIInfo { CodeGenFunction &CGF) const; }; +} + void ARMABIInfo::computeInfo(CGFunctionInfo &FI, ASTContext &Context, llvm::LLVMContext &VMContext) const { FI.getReturnInfo() = classifyReturnType(FI.getReturnType(), Context, @@ -1428,7 +1436,10 @@ ABIArgInfo DefaultABIInfo::classifyReturnType(QualType RetTy, } } +// SystemZ ABI Implementation + namespace { + class SystemZABIInfo : public ABIInfo { bool isPromotableIntegerType(QualType Ty) const; @@ -1450,6 +1461,7 @@ class SystemZABIInfo : public ABIInfo { virtual llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty, CodeGenFunction &CGF) const; }; + } bool SystemZABIInfo::isPromotableIntegerType(QualType Ty) const { @@ -1481,7 +1493,7 @@ llvm::Value *SystemZABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, ABIArgInfo SystemZABIInfo::classifyReturnType(QualType RetTy, ASTContext &Context, - llvm::LLVMContext &VMContext) const { + llvm::LLVMContext &VMContext) const { if (RetTy->isVoidType()) { return ABIArgInfo::getIgnore(); } else if (CodeGenFunction::hasAggregateLLVMType(RetTy)) { @@ -1494,7 +1506,7 @@ ABIArgInfo SystemZABIInfo::classifyReturnType(QualType RetTy, ABIArgInfo SystemZABIInfo::classifyArgumentType(QualType Ty, ASTContext &Context, - llvm::LLVMContext &VMContext) const { + llvm::LLVMContext &VMContext) const { if (CodeGenFunction::hasAggregateLLVMType(Ty)) { return ABIArgInfo::getIndirect(0); } else { @@ -1530,6 +1542,17 @@ const ABIInfo &CodeGenTypes::getABIInfo() const { default: return *(TheABIInfo = new DefaultABIInfo); + case llvm::Triple::arm: + case llvm::Triple::thumb: + // FIXME: Support for OABI? + return *(TheABIInfo = new ARMABIInfo()); + + case llvm::Triple::pic16: + return *(TheABIInfo = new PIC16ABIInfo()); + + case llvm::Triple::systemz: + return *(TheABIInfo = new SystemZABIInfo()); + case llvm::Triple::x86: if (Triple.getOS() == llvm::Triple::Darwin) return *(TheABIInfo = new X86_32ABIInfo(Context, true, true)); @@ -1549,16 +1572,5 @@ const ABIInfo &CodeGenTypes::getABIInfo() const { case llvm::Triple::x86_64: return *(TheABIInfo = new X86_64ABIInfo()); - - case llvm::Triple::arm: - case llvm::Triple::thumb: - // FIXME: Support for OABI? - return *(TheABIInfo = new ARMABIInfo()); - - case llvm::Triple::pic16: - return *(TheABIInfo = new PIC16ABIInfo()); - - case llvm::Triple::systemz: - return *(TheABIInfo = new SystemZABIInfo()); } } |