From f34a1654d6f7d1b072a01e690f2330cfb2ca07d8 Mon Sep 17 00:00:00 2001 From: Daniel Kiss Date: Fri, 12 Jul 2024 10:58:34 +0200 Subject: [PATCH] [NFC][Clang] Move set functions out BranchProtectionInfo. (#98451) To reduce build times move them to TargetCodeGenInfo. Refactor of #98329 --- clang/include/clang/Basic/TargetInfo.h | 23 ----------------------- clang/lib/CodeGen/TargetInfo.cpp | 22 ++++++++++++++++++++++ clang/lib/CodeGen/TargetInfo.h | 11 ++++++++++- clang/lib/CodeGen/Targets/AArch64.cpp | 2 +- clang/lib/CodeGen/Targets/ARM.cpp | 7 +++---- 5 files changed, 36 insertions(+), 29 deletions(-) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index cf7628553647c7..a58fb5f9792720 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -32,9 +32,7 @@ #include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringSet.h" #include "llvm/Frontend/OpenMP/OMPGridValues.h" -#include "llvm/IR/Attributes.h" #include "llvm/IR/DerivedTypes.h" -#include "llvm/IR/Function.h" #include "llvm/Support/DataTypes.h" #include "llvm/Support/Error.h" #include "llvm/Support/VersionTuple.h" @@ -1410,7 +1408,6 @@ class TargetInfo : public TransferrableTargetInfo, bool BranchProtectionPAuthLR; bool GuardedControlStack; - protected: const char *getSignReturnAddrStr() const { switch (SignReturnAddr) { case LangOptions::SignReturnAddressScopeKind::None: @@ -1433,7 +1430,6 @@ class TargetInfo : public TransferrableTargetInfo, llvm_unreachable("Unexpected SignReturnAddressKeyKind"); } - public: BranchProtectionInfo() : SignReturnAddr(LangOptions::SignReturnAddressScopeKind::None), SignKey(LangOptions::SignReturnAddressKeyKind::AKey), @@ -1454,25 +1450,6 @@ class TargetInfo : public TransferrableTargetInfo, BranchProtectionPAuthLR = LangOpts.BranchProtectionPAuthLR; GuardedControlStack = LangOpts.GuardedControlStack; } - - void setFnAttributes(llvm::Function &F) { - llvm::AttrBuilder FuncAttrs(F.getContext()); - setFnAttributes(FuncAttrs); - F.addFnAttrs(FuncAttrs); - } - - void setFnAttributes(llvm::AttrBuilder &FuncAttrs) { - if (SignReturnAddr != LangOptions::SignReturnAddressScopeKind::None) { - FuncAttrs.addAttribute("sign-return-address", getSignReturnAddrStr()); - FuncAttrs.addAttribute("sign-return-address-key", getSignKeyStr()); - } - if (BranchTargetEnforcement) - FuncAttrs.addAttribute("branch-target-enforcement"); - if (BranchProtectionPAuthLR) - FuncAttrs.addAttribute("branch-protection-pauth-lr"); - if (GuardedControlStack) - FuncAttrs.addAttribute("guarded-control-stack"); - } }; /// Determine if the Architecture in this TargetInfo supports branch diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp index 60224d458f6a26..38faa50cf19cf2 100644 --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -19,6 +19,7 @@ #include "clang/CodeGen/CGFunctionInfo.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/Twine.h" +#include "llvm/IR/Function.h" #include "llvm/IR/Type.h" #include "llvm/Support/raw_ostream.h" @@ -206,6 +207,27 @@ llvm::Value *TargetCodeGenInfo::createEnqueuedBlockKernel( return F; } +void TargetCodeGenInfo::setBranchProtectionFnAttributes( + const TargetInfo::BranchProtectionInfo &BPI, llvm::Function &F) { + llvm::AttrBuilder FuncAttrs(F.getContext()); + setBranchProtectionFnAttributes(BPI, FuncAttrs); + F.addFnAttrs(FuncAttrs); +} + +void TargetCodeGenInfo::setBranchProtectionFnAttributes( + const TargetInfo::BranchProtectionInfo &BPI, llvm::AttrBuilder &FuncAttrs) { + if (BPI.SignReturnAddr != LangOptions::SignReturnAddressScopeKind::None) { + FuncAttrs.addAttribute("sign-return-address", BPI.getSignReturnAddrStr()); + FuncAttrs.addAttribute("sign-return-address-key", BPI.getSignKeyStr()); + } + if (BPI.BranchTargetEnforcement) + FuncAttrs.addAttribute("branch-target-enforcement"); + if (BPI.BranchProtectionPAuthLR) + FuncAttrs.addAttribute("branch-protection-pauth-lr"); + if (BPI.GuardedControlStack) + FuncAttrs.addAttribute("guarded-control-stack"); +} + namespace { class DefaultTargetCodeGenInfo : public TargetCodeGenInfo { public: diff --git a/clang/lib/CodeGen/TargetInfo.h b/clang/lib/CodeGen/TargetInfo.h index f242d9e36ed40a..0925609cc74aa5 100644 --- a/clang/lib/CodeGen/TargetInfo.h +++ b/clang/lib/CodeGen/TargetInfo.h @@ -15,11 +15,12 @@ #define LLVM_CLANG_LIB_CODEGEN_TARGETINFO_H #include "CGBuilder.h" -#include "CodeGenModule.h" #include "CGValue.h" +#include "CodeGenModule.h" #include "clang/AST/Type.h" #include "clang/Basic/LLVM.h" #include "clang/Basic/SyncScope.h" +#include "clang/Basic/TargetInfo.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringRef.h" @@ -413,6 +414,14 @@ class TargetCodeGenInfo { return nullptr; } + static void + setBranchProtectionFnAttributes(const TargetInfo::BranchProtectionInfo &BPI, + llvm::Function &F); + + static void + setBranchProtectionFnAttributes(const TargetInfo::BranchProtectionInfo &BPI, + llvm::AttrBuilder &FuncAttrs); + protected: static std::string qualifyWindowsLibrary(StringRef Lib); diff --git a/clang/lib/CodeGen/Targets/AArch64.cpp b/clang/lib/CodeGen/Targets/AArch64.cpp index 3891f9fc8174b7..b9df54b0c67c40 100644 --- a/clang/lib/CodeGen/Targets/AArch64.cpp +++ b/clang/lib/CodeGen/Targets/AArch64.cpp @@ -133,7 +133,7 @@ class AArch64TargetCodeGenInfo : public TargetCodeGenInfo { } } auto *Fn = cast(GV); - BPI.setFnAttributes(*Fn); + setBranchProtectionFnAttributes(BPI, *Fn); } bool isScalarizableAsmOperand(CodeGen::CodeGenFunction &CGF, diff --git a/clang/lib/CodeGen/Targets/ARM.cpp b/clang/lib/CodeGen/Targets/ARM.cpp index 93fea94a77248b..d032b88d7683cd 100644 --- a/clang/lib/CodeGen/Targets/ARM.cpp +++ b/clang/lib/CodeGen/Targets/ARM.cpp @@ -151,9 +151,8 @@ class ARMTargetCodeGenInfo : public TargetCodeGenInfo { D->getLocation(), diag::warn_target_unsupported_branch_protection_attribute) << Arch; - } else { - BPI.setFnAttributes(*Fn); - } + } else + setBranchProtectionFnAttributes(BPI, (*Fn)); } else if (CGM.getLangOpts().BranchTargetEnforcement || CGM.getLangOpts().hasSignReturnAddress()) { // If the Branch Protection attribute is missing, validate the target @@ -168,7 +167,7 @@ class ARMTargetCodeGenInfo : public TargetCodeGenInfo { } else if (CGM.getTarget().isBranchProtectionSupportedArch( CGM.getTarget().getTargetOpts().CPU)) { TargetInfo::BranchProtectionInfo BPI(CGM.getLangOpts()); - BPI.setFnAttributes(*Fn); + setBranchProtectionFnAttributes(BPI, (*Fn)); } const ARMInterruptAttr *Attr = FD->getAttr();