https://github.com/DanielKristofKiss updated https://github.com/llvm/llvm-project/pull/98451
>From 2ffaf35f09be03e7374bde3d97ee798b01e7e3d1 Mon Sep 17 00:00:00 2001 From: Daniel Kiss <danki...@e133702.arm.com> Date: Thu, 11 Jul 2024 10:29:24 +0200 Subject: [PATCH 1/4] [NFC][Clang] Move setfunctions of BranchProtectionInfo. Move the to TargetCodeGenInfo. Refactor of #98329 --- clang/include/clang/Basic/TargetInfo.h | 23 ----------------------- clang/lib/CodeGen/TargetInfo.cpp | 23 +++++++++++++++++++++++ clang/lib/CodeGen/TargetInfo.h | 9 ++++++++- clang/lib/CodeGen/Targets/AArch64.cpp | 2 +- clang/lib/CodeGen/Targets/ARM.cpp | 4 ++-- 5 files changed, 34 insertions(+), 27 deletions(-) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index cf7628553647c..a58fb5f979272 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 60224d458f6a2..9ccf0dea9a738 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,28 @@ llvm::Value *TargetCodeGenInfo::createEnqueuedBlockKernel( return F; } +void TargetCodeGenInfo::setFnAttributes( + const TargetInfo::BranchProtectionInfo &BPI, llvm::Function &F) const { + llvm::AttrBuilder FuncAttrs(F.getContext()); + setFnAttributes(BPI, FuncAttrs); + F.addFnAttrs(FuncAttrs); +} + +void TargetCodeGenInfo::setFnAttributes( + const TargetInfo::BranchProtectionInfo &BPI, + llvm::AttrBuilder &FuncAttrs) const { + 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 f242d9e36ed40..78c2f94508f8e 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,12 @@ class TargetCodeGenInfo { return nullptr; } + void setFnAttributes(const TargetInfo::BranchProtectionInfo &BPI, + llvm::Function &F) const; + + void setFnAttributes(const TargetInfo::BranchProtectionInfo &BPI, + llvm::AttrBuilder &FuncAttrs) const; + protected: static std::string qualifyWindowsLibrary(StringRef Lib); diff --git a/clang/lib/CodeGen/Targets/AArch64.cpp b/clang/lib/CodeGen/Targets/AArch64.cpp index 3891f9fc8174b..d4b3c87705f08 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<llvm::Function>(GV); - BPI.setFnAttributes(*Fn); + CGM.getTargetCodeGenInfo().setFnAttributes(BPI, *Fn); } bool isScalarizableAsmOperand(CodeGen::CodeGenFunction &CGF, diff --git a/clang/lib/CodeGen/Targets/ARM.cpp b/clang/lib/CodeGen/Targets/ARM.cpp index 93fea94a77248..b2d4248b710c9 100644 --- a/clang/lib/CodeGen/Targets/ARM.cpp +++ b/clang/lib/CodeGen/Targets/ARM.cpp @@ -152,7 +152,7 @@ class ARMTargetCodeGenInfo : public TargetCodeGenInfo { diag::warn_target_unsupported_branch_protection_attribute) << Arch; } else { - BPI.setFnAttributes(*Fn); + CGM.getTargetCodeGenInfo().setFnAttributes(BPI, (*Fn)); } } else if (CGM.getLangOpts().BranchTargetEnforcement || CGM.getLangOpts().hasSignReturnAddress()) { @@ -168,7 +168,7 @@ class ARMTargetCodeGenInfo : public TargetCodeGenInfo { } else if (CGM.getTarget().isBranchProtectionSupportedArch( CGM.getTarget().getTargetOpts().CPU)) { TargetInfo::BranchProtectionInfo BPI(CGM.getLangOpts()); - BPI.setFnAttributes(*Fn); + CGM.getTargetCodeGenInfo().setFnAttributes(BPI, (*Fn)); } const ARMInterruptAttr *Attr = FD->getAttr<ARMInterruptAttr>(); >From 419c8eeadb39ee3d45334023b44975273bda4dce Mon Sep 17 00:00:00 2001 From: Daniel Kiss <daniel.k...@arm.com> Date: Thu, 11 Jul 2024 17:30:08 +0200 Subject: [PATCH 2/4] address review comments --- clang/lib/CodeGen/TargetInfo.cpp | 6 +++--- clang/lib/CodeGen/TargetInfo.h | 10 ++++++---- clang/lib/CodeGen/Targets/AArch64.cpp | 2 +- clang/lib/CodeGen/Targets/ARM.cpp | 4 ++-- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp index 9ccf0dea9a738..dbf6661847587 100644 --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -207,14 +207,14 @@ llvm::Value *TargetCodeGenInfo::createEnqueuedBlockKernel( return F; } -void TargetCodeGenInfo::setFnAttributes( +void TargetCodeGenInfo::setBranchProtectionFnAttributes( const TargetInfo::BranchProtectionInfo &BPI, llvm::Function &F) const { llvm::AttrBuilder FuncAttrs(F.getContext()); - setFnAttributes(BPI, FuncAttrs); + setBranchProtectionFnAttributes(BPI, FuncAttrs); F.addFnAttrs(FuncAttrs); } -void TargetCodeGenInfo::setFnAttributes( +void TargetCodeGenInfo::setBranchProtectionFnAttributes( const TargetInfo::BranchProtectionInfo &BPI, llvm::AttrBuilder &FuncAttrs) const { if (BPI.SignReturnAddr != LangOptions::SignReturnAddressScopeKind::None) { diff --git a/clang/lib/CodeGen/TargetInfo.h b/clang/lib/CodeGen/TargetInfo.h index 78c2f94508f8e..f01582c7ac3d2 100644 --- a/clang/lib/CodeGen/TargetInfo.h +++ b/clang/lib/CodeGen/TargetInfo.h @@ -414,11 +414,13 @@ class TargetCodeGenInfo { return nullptr; } - void setFnAttributes(const TargetInfo::BranchProtectionInfo &BPI, - llvm::Function &F) const; + void + setBranchProtectionFnAttributes(const TargetInfo::BranchProtectionInfo &BPI, + llvm::Function &F) const; - void setFnAttributes(const TargetInfo::BranchProtectionInfo &BPI, - llvm::AttrBuilder &FuncAttrs) const; + void + setBranchProtectionFnAttributes(const TargetInfo::BranchProtectionInfo &BPI, + llvm::AttrBuilder &FuncAttrs) const; protected: static std::string qualifyWindowsLibrary(StringRef Lib); diff --git a/clang/lib/CodeGen/Targets/AArch64.cpp b/clang/lib/CodeGen/Targets/AArch64.cpp index d4b3c87705f08..b9df54b0c67c4 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<llvm::Function>(GV); - CGM.getTargetCodeGenInfo().setFnAttributes(BPI, *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 b2d4248b710c9..633ad3d20e45b 100644 --- a/clang/lib/CodeGen/Targets/ARM.cpp +++ b/clang/lib/CodeGen/Targets/ARM.cpp @@ -152,7 +152,7 @@ class ARMTargetCodeGenInfo : public TargetCodeGenInfo { diag::warn_target_unsupported_branch_protection_attribute) << Arch; } else { - CGM.getTargetCodeGenInfo().setFnAttributes(BPI, (*Fn)); + setBranchProtectionFnAttributes(BPI, (*Fn)); } } else if (CGM.getLangOpts().BranchTargetEnforcement || CGM.getLangOpts().hasSignReturnAddress()) { @@ -168,7 +168,7 @@ class ARMTargetCodeGenInfo : public TargetCodeGenInfo { } else if (CGM.getTarget().isBranchProtectionSupportedArch( CGM.getTarget().getTargetOpts().CPU)) { TargetInfo::BranchProtectionInfo BPI(CGM.getLangOpts()); - CGM.getTargetCodeGenInfo().setFnAttributes(BPI, (*Fn)); + setBranchProtectionFnAttributes(BPI, (*Fn)); } const ARMInterruptAttr *Attr = FD->getAttr<ARMInterruptAttr>(); >From db7706a84e25857fb37f5896653f3e453c9db842 Mon Sep 17 00:00:00 2001 From: Daniel Kiss <daniel.k...@arm.com> Date: Thu, 11 Jul 2024 20:18:56 +0200 Subject: [PATCH 3/4] drop parens --- clang/lib/CodeGen/Targets/ARM.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/clang/lib/CodeGen/Targets/ARM.cpp b/clang/lib/CodeGen/Targets/ARM.cpp index 633ad3d20e45b..d032b88d7683c 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 { + } else setBranchProtectionFnAttributes(BPI, (*Fn)); - } } else if (CGM.getLangOpts().BranchTargetEnforcement || CGM.getLangOpts().hasSignReturnAddress()) { // If the Branch Protection attribute is missing, validate the target >From 6c3f68439fd102070f183a77b7d58d49f399b43c Mon Sep 17 00:00:00 2001 From: Daniel Kiss <daniel.k...@arm.com> Date: Thu, 11 Jul 2024 21:05:31 +0200 Subject: [PATCH 4/4] change to static --- clang/lib/CodeGen/TargetInfo.cpp | 4 ++-- clang/lib/CodeGen/TargetInfo.h | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp index dbf6661847587..a9e4ff2a82249 100644 --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -208,7 +208,7 @@ llvm::Value *TargetCodeGenInfo::createEnqueuedBlockKernel( } void TargetCodeGenInfo::setBranchProtectionFnAttributes( - const TargetInfo::BranchProtectionInfo &BPI, llvm::Function &F) const { + const TargetInfo::BranchProtectionInfo &BPI, llvm::Function &F) { llvm::AttrBuilder FuncAttrs(F.getContext()); setBranchProtectionFnAttributes(BPI, FuncAttrs); F.addFnAttrs(FuncAttrs); @@ -216,7 +216,7 @@ void TargetCodeGenInfo::setBranchProtectionFnAttributes( void TargetCodeGenInfo::setBranchProtectionFnAttributes( const TargetInfo::BranchProtectionInfo &BPI, - llvm::AttrBuilder &FuncAttrs) const { + llvm::AttrBuilder &FuncAttrs) { if (BPI.SignReturnAddr != LangOptions::SignReturnAddressScopeKind::None) { FuncAttrs.addAttribute("sign-return-address", BPI.getSignReturnAddrStr()); FuncAttrs.addAttribute("sign-return-address-key", BPI.getSignKeyStr()); diff --git a/clang/lib/CodeGen/TargetInfo.h b/clang/lib/CodeGen/TargetInfo.h index f01582c7ac3d2..0925609cc74aa 100644 --- a/clang/lib/CodeGen/TargetInfo.h +++ b/clang/lib/CodeGen/TargetInfo.h @@ -414,13 +414,13 @@ class TargetCodeGenInfo { return nullptr; } - void + static void setBranchProtectionFnAttributes(const TargetInfo::BranchProtectionInfo &BPI, - llvm::Function &F) const; + llvm::Function &F); - void + static void setBranchProtectionFnAttributes(const TargetInfo::BranchProtectionInfo &BPI, - llvm::AttrBuilder &FuncAttrs) const; + llvm::AttrBuilder &FuncAttrs); protected: static std::string qualifyWindowsLibrary(StringRef Lib); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits