diff --git a/clang/lib/CodeGen/TargetInfo.h b/clang/lib/CodeGen/TargetInfo.h --- a/clang/lib/CodeGen/TargetInfo.h +++ b/clang/lib/CodeGen/TargetInfo.h @@ -52,6 +52,11 @@ // by returning true from TargetInfo::checkCallingConvention for them. std::unique_ptr SwiftInfo; + // Returns ABI info helper for the target. This is for use by derived classes. + template const T &getABIInfo() const { + return static_cast(*Info); + } + public: TargetCodeGenInfo(std::unique_ptr Info); virtual ~TargetCodeGenInfo(); diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -2485,10 +2485,6 @@ std::make_unique(CGT, /*SwiftErrorInRegister=*/true); } - const X86_64ABIInfo &getABIInfo() const { - return static_cast(TargetCodeGenInfo::getABIInfo()); - } - /// Disable tail call on x86-64. The epilogue code before the tail jump blocks /// autoreleaseRV/retainRV and autoreleaseRV/unsafeClaimRV optimizations. bool markARCOptimizedReturnCallsAsNoTail() const override { return true; } @@ -2525,7 +2521,7 @@ bool HasAVXType = false; for (CallArgList::const_iterator it = args.begin(), ie = args.end(); it != ie; ++it) { - if (getABIInfo().isPassedUsingAVXType(it->Ty)) { + if (getABIInfo().isPassedUsingAVXType(it->Ty)) { HasAVXType = true; break; } @@ -6406,10 +6402,6 @@ SwiftInfo = std::make_unique(CGT); } - const ARMABIInfo &getABIInfo() const { - return static_cast(TargetCodeGenInfo::getABIInfo()); - } - int getDwarfEHStackPointer(CodeGen::CodeGenModule &M) const override { return 13; } @@ -6428,7 +6420,8 @@ } unsigned getSizeOfUnwindException() const override { - if (getABIInfo().isEABI()) return 88; + if (getABIInfo().isEABI()) + return 88; return TargetCodeGenInfo::getSizeOfUnwindException(); } @@ -6495,7 +6488,7 @@ Fn->addFnAttr("interrupt", Kind); - ARMABIKind ABI = cast(getABIInfo()).getABIKind(); + ARMABIKind ABI = getABIInfo().getABIKind(); if (ABI == ARMABIKind::APCS) return; @@ -7433,10 +7426,6 @@ class SystemZTargetCodeGenInfo : public TargetCodeGenInfo { ASTContext &Ctx; - const SystemZABIInfo &getABIInfo() const { - return static_cast(TargetCodeGenInfo::getABIInfo()); - } - // These are used for speeding up the search for a visible vector ABI. mutable bool HasVisibleVecABIFlag = false; mutable std::set SeenTypes; @@ -7885,8 +7874,9 @@ // it will be passed in a vector register. A wide (>16 bytes) vector will // be passed via "hidden" pointer where any extra alignment is not // required (per GCC). - const Type *SingleEltTy = - getABIInfo().GetSingleElementType(QualType(Ty, 0)).getTypePtr(); + const Type *SingleEltTy = getABIInfo() + .GetSingleElementType(QualType(Ty, 0)) + .getTypePtr(); bool SingleVecEltStruct = SingleEltTy != Ty && SingleEltTy->isVectorType() && Ctx.getTypeSize(SingleEltTy) == Ctx.getTypeSize(Ty); if (Ty->isVectorType() || SingleVecEltStruct) @@ -11859,10 +11849,6 @@ public: BPFTargetCodeGenInfo(CodeGenTypes &CGT) : TargetCodeGenInfo(std::make_unique(CGT)) {} - - const BPFABIInfo &getABIInfo() const { - return static_cast(TargetCodeGenInfo::getABIInfo()); - } }; }