diff --git a/clang/lib/CodeGen/ABIInfo.h b/clang/lib/CodeGen/ABIInfo.h index 5ce9eab7fc874..3caad8fe9dea4 100644 --- a/clang/lib/CodeGen/ABIInfo.h +++ b/clang/lib/CodeGen/ABIInfo.h @@ -117,6 +117,9 @@ class SwiftABIInfo { CodeGenTypes &CGT; bool SwiftErrorInRegister; + bool occupiesMoreThan(ArrayRef scalarTypes, + unsigned maxAllRegisters) const; + public: SwiftABIInfo(CodeGen::CodeGenTypes &CGT, bool SwiftErrorInRegister) : CGT(CGT), SwiftErrorInRegister(SwiftErrorInRegister) {} diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp index 7cd22bfb30a34..3d56d0e0b0128 100644 --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -125,7 +125,7 @@ SwiftABIInfo::~SwiftABIInfo() = default; /// registers when expanded? /// /// This is intended to be the basis of a reasonable basic implementation -/// of should{Pass,Return}IndirectlyForSwift. +/// of should{Pass,Return}Indirectly. /// /// For most targets, a limit of four total registers is reasonable; this /// limits the amount of code required in order to move around the value @@ -134,15 +134,14 @@ SwiftABIInfo::~SwiftABIInfo() = default; /// immediately within the callee. But some targets may need to further /// limit the register count due to an inability to support that many /// return registers. -static bool occupiesMoreThan(CodeGenTypes &cgt, - ArrayRef scalarTypes, - unsigned maxAllRegisters) { +bool SwiftABIInfo::occupiesMoreThan(ArrayRef scalarTypes, + unsigned maxAllRegisters) const { unsigned intCount = 0, fpCount = 0; for (llvm::Type *type : scalarTypes) { if (type->isPointerTy()) { intCount++; } else if (auto intTy = dyn_cast(type)) { - auto ptrWidth = cgt.getTarget().getPointerWidth(LangAS::Default); + auto ptrWidth = CGT.getTarget().getPointerWidth(LangAS::Default); intCount += (intTy->getBitWidth() + ptrWidth - 1) / ptrWidth; } else { assert(type->isVectorTy() || type->isFloatingPointTy()); @@ -155,7 +154,7 @@ static bool occupiesMoreThan(CodeGenTypes &cgt, bool SwiftABIInfo::shouldPassIndirectly(ArrayRef ComponentTys, bool AsReturnValue) const { - return occupiesMoreThan(CGT, ComponentTys, /*total=*/4); + return occupiesMoreThan(ComponentTys, /*total=*/4); } bool SwiftABIInfo::isLegalVectorType(CharUnits VectorSize, llvm::Type *EltTy, @@ -1248,7 +1247,7 @@ class X86_32SwiftABIInfo : public SwiftABIInfo { // integer registers and three fp registers. Oddly, it'll use up to // four vector registers for vectors, but those can overlap with the // scalar registers. - return occupiesMoreThan(CGT, ComponentTys, /*total=*/3); + return occupiesMoreThan(ComponentTys, /*total=*/3); } };