From: Aaron Ballman Date: Mon, 17 Mar 2014 18:10:01 +0000 (+0000) Subject: [C++11] Replacing CGFunctionInfo arg iterators with iterator_range arguments(). Updat... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bbe3878c8894da9fb0f54286c42fba84e6da95c4;p=clang [C++11] Replacing CGFunctionInfo arg iterators with iterator_range arguments(). Updating all of the usages of the iterators with range-based for loops. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@204068 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/CodeGen/CGFunctionInfo.h b/include/clang/CodeGen/CGFunctionInfo.h index ec41e8bdec..e4a927292b 100644 --- a/include/clang/CodeGen/CGFunctionInfo.h +++ b/include/clang/CodeGen/CGFunctionInfo.h @@ -314,6 +314,14 @@ public: typedef const ArgInfo *const_arg_iterator; typedef ArgInfo *arg_iterator; + typedef llvm::iterator_range arg_range; + typedef llvm::iterator_range arg_const_range; + + arg_range arguments() { return arg_range(arg_begin(), arg_end()); } + arg_const_range arguments() const { + return arg_const_range(arg_begin(), arg_end()); + } + const_arg_iterator arg_begin() const { return getArgsBuffer() + 1; } const_arg_iterator arg_end() const { return getArgsBuffer() + 1 + NumArgs; } arg_iterator arg_begin() { return getArgsBuffer() + 1; } @@ -382,8 +390,8 @@ public: ID.AddInteger(RegParm); ID.AddInteger(Required.getOpaqueData()); getReturnType().Profile(ID); - for (arg_iterator it = arg_begin(), ie = arg_end(); it != ie; ++it) - it->type.Profile(ID); + for (const auto &I : arguments()) + I.type.Profile(ID); } static void Profile(llvm::FoldingSetNodeID &ID, bool InstanceMethod, diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index c068a11ad6..6d5324d4a1 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -497,10 +497,9 @@ CodeGenTypes::arrangeLLVMFunctionInfo(CanQualType resultType, if (retInfo.canHaveCoerceToType() && retInfo.getCoerceToType() == 0) retInfo.setCoerceToType(ConvertType(FI->getReturnType())); - for (CGFunctionInfo::arg_iterator I = FI->arg_begin(), E = FI->arg_end(); - I != E; ++I) - if (I->info.canHaveCoerceToType() && I->info.getCoerceToType() == 0) - I->info.setCoerceToType(ConvertType(I->type)); + for (auto &I : FI->arguments()) + if (I.info.canHaveCoerceToType() && I.info.getCoerceToType() == 0) + I.info.setCoerceToType(ConvertType(I.type)); bool erased = FunctionsBeingProcessed.erase(FI); (void)erased; assert(erased && "Not in set?"); @@ -1169,10 +1168,9 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI, llvm::AttributeSet::ReturnIndex, RetAttrs)); - for (CGFunctionInfo::const_arg_iterator it = FI.arg_begin(), - ie = FI.arg_end(); it != ie; ++it) { - QualType ParamType = it->type; - const ABIArgInfo &AI = it->info; + for (const auto &I : FI.arguments()) { + QualType ParamType = I.type; + const ABIArgInfo &AI = I.info; llvm::AttrBuilder Attrs; if (AI.getPaddingType()) { diff --git a/lib/CodeGen/TargetInfo.cpp b/lib/CodeGen/TargetInfo.cpp index 93b869bfda..c0c4fc45e6 100644 --- a/lib/CodeGen/TargetInfo.cpp +++ b/lib/CodeGen/TargetInfo.cpp @@ -368,9 +368,8 @@ public: void computeInfo(CGFunctionInfo &FI) const override { FI.getReturnInfo() = classifyReturnType(FI.getReturnType()); - for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end(); - it != ie; ++it) - it->info = classifyArgumentType(it->type); + for (auto &I : FI.arguments()) + I.info = classifyArgumentType(I.type); } llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty, @@ -449,9 +448,8 @@ class PNaClTargetCodeGenInfo : public TargetCodeGenInfo { void PNaClABIInfo::computeInfo(CGFunctionInfo &FI) const { FI.getReturnInfo() = classifyReturnType(FI.getReturnType()); - for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end(); - it != ie; ++it) - it->info = classifyArgumentType(it->type); + for (auto &I : FI.arguments()) + I.info = classifyArgumentType(I.type); } llvm::Value *PNaClABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, @@ -1000,10 +998,9 @@ void X86_32ABIInfo::computeInfo(CGFunctionInfo &FI) const { FI.setEffectiveCallingConvention(llvm::CallingConv::X86_CDeclMethod); bool UsedInAlloca = false; - for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end(); - it != ie; ++it) { - it->info = classifyArgumentType(it->type, State); - UsedInAlloca |= (it->info.getKind() == ABIArgInfo::InAlloca); + for (auto &I : FI.arguments()) { + I.info = classifyArgumentType(I.type, State); + UsedInAlloca |= (I.info.getKind() == ABIArgInfo::InAlloca); } // If we needed to use inalloca for any argument, do a second pass and rewrite @@ -2760,9 +2757,8 @@ void WinX86_64ABIInfo::computeInfo(CGFunctionInfo &FI) const { QualType RetTy = FI.getReturnType(); FI.getReturnInfo() = classify(RetTy, true); - for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end(); - it != ie; ++it) - it->info = classify(it->type, false); + for (auto &I : FI.arguments()) + I.info = classify(I.type, false); } llvm::Value *WinX86_64ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, @@ -2905,21 +2901,20 @@ public: // when lowering the parameters in the caller and args in the callee. void computeInfo(CGFunctionInfo &FI) const override { FI.getReturnInfo() = classifyReturnType(FI.getReturnType()); - for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end(); - it != ie; ++it) { + for (auto &I : FI.arguments()) { // We rely on the default argument classification for the most part. // One exception: An aggregate containing a single floating-point // or vector item must be passed in a register if one is available. - const Type *T = isSingleElementStruct(it->type, getContext()); + const Type *T = isSingleElementStruct(I.type, getContext()); if (T) { const BuiltinType *BT = T->getAs(); if (T->isVectorType() || (BT && BT->isFloatingPoint())) { QualType QT(T, 0); - it->info = ABIArgInfo::getDirectInReg(CGT.ConvertType(QT)); + I.info = ABIArgInfo::getDirectInReg(CGT.ConvertType(QT)); continue; } } - it->info = classifyArgumentType(it->type); + I.info = classifyArgumentType(I.type); } } @@ -3297,15 +3292,14 @@ void ARMABIInfo::computeInfo(CGFunctionInfo &FI) const { resetAllocatedRegs(); FI.getReturnInfo() = classifyReturnType(FI.getReturnType(), FI.isVariadic()); - for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end(); - it != ie; ++it) { + for (auto &I : FI.arguments()) { unsigned PreAllocationVFPs = AllocatedVFPs; unsigned PreAllocationGPRs = AllocatedGPRs; bool IsHA = false; bool IsCPRC = false; // 6.1.2.3 There is one VFP co-processor register class using registers // s0-s15 (d0-d7) for passing arguments. - it->info = classifyArgumentType(it->type, IsHA, FI.isVariadic(), IsCPRC); + I.info = classifyArgumentType(I.type, IsHA, FI.isVariadic(), IsCPRC); assert((IsCPRC || !IsHA) && "Homogeneous aggregates must be CPRCs"); // If we do not have enough VFP registers for the HA, any VFP registers // that are unallocated are marked as unavailable. To achieve this, we add @@ -3315,7 +3309,7 @@ void ARMABIInfo::computeInfo(CGFunctionInfo &FI) const { if (IsHA && AllocatedVFPs > NumVFPs && PreAllocationVFPs < NumVFPs) { llvm::Type *PaddingTy = llvm::ArrayType::get( llvm::Type::getFloatTy(getVMContext()), NumVFPs - PreAllocationVFPs); - it->info = ABIArgInfo::getExpandWithPadding(false, PaddingTy); + I.info = ABIArgInfo::getExpandWithPadding(false, PaddingTy); } // If we have allocated some arguments onto the stack (due to running @@ -3328,7 +3322,7 @@ void ARMABIInfo::computeInfo(CGFunctionInfo &FI) const { if (!IsCPRC && PreAllocationGPRs < NumGPRs && AllocatedGPRs > NumGPRs && StackUsed) { llvm::Type *PaddingTy = llvm::ArrayType::get( llvm::Type::getInt32Ty(getVMContext()), NumGPRs - PreAllocationGPRs); - it->info = ABIArgInfo::getExpandWithPadding(false, PaddingTy); + I.info = ABIArgInfo::getExpandWithPadding(false, PaddingTy); } } @@ -4030,9 +4024,8 @@ void AArch64ABIInfo::computeInfo(CGFunctionInfo &FI) const { FreeIntRegs, FreeVFPRegs); FreeIntRegs = FreeVFPRegs = 8; - for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end(); - it != ie; ++it) { - it->info = classifyGenericType(it->type, FreeIntRegs, FreeVFPRegs); + for (auto &I : FI.arguments()) { + I.info = classifyGenericType(I.type, FreeIntRegs, FreeVFPRegs); } } @@ -4464,9 +4457,8 @@ ABIArgInfo NVPTXABIInfo::classifyArgumentType(QualType Ty) const { void NVPTXABIInfo::computeInfo(CGFunctionInfo &FI) const { FI.getReturnInfo() = classifyReturnType(FI.getReturnType()); - for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end(); - it != ie; ++it) - it->info = classifyArgumentType(it->type); + for (auto &I : FI.arguments()) + I.info = classifyArgumentType(I.type); // Always honor user-specified calling convention. if (FI.getCallingConvention() != llvm::CallingConv::C) @@ -4548,9 +4540,8 @@ public: void computeInfo(CGFunctionInfo &FI) const override { FI.getReturnInfo() = classifyReturnType(FI.getReturnType()); - for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end(); - it != ie; ++it) - it->info = classifyArgumentType(it->type); + for (auto &I : FI.arguments()) + I.info = classifyArgumentType(I.type); } llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty, @@ -5143,9 +5134,8 @@ void MipsABIInfo::computeInfo(CGFunctionInfo &FI) const { // Check if a pointer to an aggregate is passed as a hidden argument. uint64_t Offset = RetInfo.isIndirect() ? MinABIStackAlignInBytes : 0; - for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end(); - it != ie; ++it) - it->info = classifyArgumentType(it->type, Offset); + for (auto &I : FI.arguments()) + I.info = classifyArgumentType(I.type, Offset); } llvm::Value* MipsABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, @@ -5308,9 +5298,8 @@ public: void HexagonABIInfo::computeInfo(CGFunctionInfo &FI) const { FI.getReturnInfo() = classifyReturnType(FI.getReturnType()); - for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end(); - it != ie; ++it) - it->info = classifyArgumentType(it->type); + for (auto &I : FI.arguments()) + I.info = classifyArgumentType(I.type); } ABIArgInfo HexagonABIInfo::classifyArgumentType(QualType Ty) const { @@ -5661,9 +5650,8 @@ llvm::Value *SparcV9ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, void SparcV9ABIInfo::computeInfo(CGFunctionInfo &FI) const { FI.getReturnInfo() = classifyType(FI.getReturnType(), 32 * 8); - for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end(); - it != ie; ++it) - it->info = classifyType(it->type, 16 * 8); + for (auto &I : FI.arguments()) + I.info = classifyType(I.type, 16 * 8); } namespace {