https://github.com/yamt created https://github.com/llvm/llvm-project/pull/92499
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. >From 1c1bedf655de10d2e4f0122975db1950f2203a96 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Takashi <yamam...@midokura.com> Date: Fri, 17 May 2024 14:47:06 +0900 Subject: [PATCH] clang: add unnamed_addr function attribute 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. --- clang/include/clang/Basic/Attr.td | 7 +++++++ clang/lib/CodeGen/CodeGenModule.cpp | 4 ++++ 2 files changed, 11 insertions(+) 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(); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits