[clang] clang: add unnamed_addr function attribute (PR #92499)
via cfe-commits
cfe-commits at lists.llvm.org
Thu May 16 22:57:35 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: YAMAMOTO Takashi (yamt)
<details>
<summary>Changes</summary>
It simply applies the LLVM attribute with the same name to the function.
Sometimes, a programmer knows that function pointer uniqueness doesn't really matter for some of their functions. In that case, this attribute opens a possibility of certain optimizations like mergefunc with aliases. It's especially useful for code generators.
---
Full diff: https://github.com/llvm/llvm-project/pull/92499.diff
2 Files Affected:
- (modified) clang/include/clang/Basic/Attr.td (+7)
- (modified) clang/lib/CodeGen/CodeGenModule.cpp (+4)
``````````diff
diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td
index 52552ba488560..3ee7d43d339f1 100644
--- a/clang/include/clang/Basic/Attr.td
+++ b/clang/include/clang/Basic/Attr.td
@@ -1944,6 +1944,13 @@ def ReturnsTwice : InheritableAttr {
let SimpleHandler = 1;
}
+def UnnamedAddr : InheritableAttr {
+ let Spellings = [Clang<"unnamed_addr">];
+ let Subjects = SubjectList<[Function]>;
+ let Documentation = [Undocumented];
+ let SimpleHandler = 1;
+}
+
def DisableTailCalls : InheritableAttr {
let Spellings = [Clang<"disable_tail_calls">];
let Subjects = SubjectList<[Function, ObjCMethod]>;
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 489c08a4d4819..ac9f082a1049b 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -2506,6 +2506,10 @@ void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,
B.addAttribute(llvm::Attribute::MinSize);
}
+ if (D->hasAttr<UnnamedAddrAttr>()) {
+ F->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
+ }
+
F->addFnAttrs(B);
unsigned alignment = D->getMaxAlignment() / Context.getCharWidth();
``````````
</details>
https://github.com/llvm/llvm-project/pull/92499
More information about the cfe-commits
mailing list