[llvm] [LLVM] Refactor Autoupgrade function attributes from Module attributes. (PR #84494)
Nick Desaulniers via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 8 13:37:34 PST 2024
================
@@ -5182,65 +5182,46 @@ void llvm::UpgradeFunctionAttributes(Function &F) {
static bool isModuleAttributeSet(Module &M, const StringRef &ModAttr) {
const auto *Attr =
mdconst::extract_or_null<ConstantInt>(M.getModuleFlag(ModAttr));
- return Attr && Attr->getZExtValue();
+ return Attr && Attr->isOne();
}
-// Copy an attribute from module to the function if exists.
-// First value of the pair is used when the module attribute is not zero
-// the second otherwise.
-static void
-CopyModuleAttributeToFunction(Function &F, StringRef FnAttrName,
- StringRef ModAttrName,
- std::pair<StringRef, StringRef> Values) {
- if (F.hasFnAttribute(FnAttrName))
- return;
- F.addFnAttr(FnAttrName, isModuleAttributeSet(*F.getParent(), ModAttrName)
- ? Values.first
- : Values.second);
-}
-
-// Copy a boolean attribute from module to the function if exists.
-// Module attribute treated false if zero otherwise true.
-static void CopyModuleAttributeToFunction(Function &F, StringRef AttrName) {
- CopyModuleAttributeToFunction(
- F, AttrName, AttrName,
- std::make_pair<StringRef, StringRef>("true", "false"));
-}
-
-// Copy an attribute from module to the function if exists.
-// First value of the pair is used when the module attribute is not zero
-// the second otherwise.
-static void
-CopyModuleAttributeToFunction(Function &F, StringRef AttrName,
- std::pair<StringRef, StringRef> Values) {
- CopyModuleAttributeToFunction(F, AttrName, AttrName, Values);
+// Check if the function attribute is not present and set it.
+static void SetFunctionAttrIfNotSet(Function &F, StringRef FnAttrName,
+ StringRef Value) {
+ if (!F.hasFnAttribute(FnAttrName))
+ F.addFnAttr(FnAttrName, Value);
}
void llvm::CopyModuleAttrToFunctions(Module &M) {
Triple T(M.getTargetTriple());
if (!T.isThumb() && !T.isARM() && !T.isAArch64())
return;
+ StringRef SignTypeValue = "none";
+ if (isModuleAttributeSet(M, "sign-return-address-all"))
+ SignTypeValue = "all";
+ else if (isModuleAttributeSet(M, "sign-return-address"))
+ SignTypeValue = "non-leaf";
+
+ StringRef BTEValue =
+ isModuleAttributeSet(M, "branch-target-enforcement") ? "true" : "false";
+ StringRef BPPLValue =
+ isModuleAttributeSet(M, "branch-protection-pauth-lr") ? "true" : "false";
+ StringRef GCSValue =
+ isModuleAttributeSet(M, "guarded-control-stack") ? "true" : "false";
+ StringRef SignKeyValue =
+ isModuleAttributeSet(M, "sign-return-address-with-bkey") ? "b_key"
+ : "a_key";
+
for (Function &F : M.getFunctionList()) {
if (F.isDeclaration())
continue;
- if (!F.hasFnAttribute("sign-return-address")) {
- StringRef SignType = "none";
- if (isModuleAttributeSet(M, "sign-return-address"))
- SignType = "non-leaf";
-
- if (isModuleAttributeSet(M, "sign-return-address-all"))
- SignType = "all";
-
- F.addFnAttr("sign-return-address", SignType);
- }
- CopyModuleAttributeToFunction(F, "branch-target-enforcement");
- CopyModuleAttributeToFunction(F, "branch-protection-pauth-lr");
- CopyModuleAttributeToFunction(F, "guarded-control-stack");
- CopyModuleAttributeToFunction(
- F, "sign-return-address-key",
----------------
nickdesaulniers wrote:
err...was that a recently introduced bug? Do we need to backport that specific fix (and thus the test modification)? That makes this change no long NFC.
https://github.com/llvm/llvm-project/pull/84494
More information about the llvm-commits
mailing list