[PATCH] D137441: [IR] Allow available_externally GlobalAlias

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 4 10:09:00 PDT 2022


MaskRay updated this revision to Diff 473281.
MaskRay marked an inline comment as done.
MaskRay added a comment.

address comments


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D137441/new/

https://reviews.llvm.org/D137441

Files:
  llvm/docs/LangRef.rst
  llvm/include/llvm/IR/GlobalAlias.h
  llvm/lib/IR/Verifier.cpp
  llvm/test/Verifier/alias.ll


Index: llvm/test/Verifier/alias.ll
===================================================================
--- llvm/test/Verifier/alias.ll
+++ llvm/test/Verifier/alias.ll
@@ -1,4 +1,4 @@
-; RUN:  not llvm-as %s -o /dev/null 2>&1 | FileCheck %s
+; RUN:  not llvm-as %s -o /dev/null 2>&1 | FileCheck %s --implicit-check-not=Alias
 
 
 declare void @f()
@@ -31,3 +31,7 @@
 @test3_c = alias i32, i32* @test3_b
 ; CHECK: Alias cannot point to an interposable alias
 ; CHECK-NEXT: i32* @test3_c
+
+ at test4_a = available_externally alias i32, i32* @test3_a
+ at test4_b = available_externally alias void(), void()* @f2
+ at test4_c = available_externally alias i32, i32* @test4_a
Index: llvm/lib/IR/Verifier.cpp
===================================================================
--- llvm/lib/IR/Verifier.cpp
+++ llvm/lib/IR/Verifier.cpp
@@ -816,8 +816,8 @@
 void Verifier::visitAliaseeSubExpr(SmallPtrSetImpl<const GlobalAlias*> &Visited,
                                    const GlobalAlias &GA, const Constant &C) {
   if (const auto *GV = dyn_cast<GlobalValue>(&C)) {
-    Check(!GV->isDeclarationForLinker(), "Alias must point to a definition",
-          &GA);
+    Check(GA.hasAvailableExternallyLinkage() || !GV->isDeclarationForLinker(),
+          "Alias must point to a definition", &GA);
 
     if (const auto *GA2 = dyn_cast<GlobalAlias>(GV)) {
       Check(Visited.insert(GA2).second, "Aliases cannot form a cycle", &GA);
@@ -846,7 +846,7 @@
 void Verifier::visitGlobalAlias(const GlobalAlias &GA) {
   Check(GlobalAlias::isValidLinkage(GA.getLinkage()),
         "Alias should have private, internal, linkonce, weak, linkonce_odr, "
-        "weak_odr, or external linkage!",
+        "weak_odr, external, or available_externally linkage!",
         &GA);
   const Constant *Aliasee = GA.getAliasee();
   Check(Aliasee, "Aliasee cannot be NULL!", &GA);
Index: llvm/include/llvm/IR/GlobalAlias.h
===================================================================
--- llvm/include/llvm/IR/GlobalAlias.h
+++ llvm/include/llvm/IR/GlobalAlias.h
@@ -93,8 +93,8 @@
   }
 
   static bool isValidLinkage(LinkageTypes L) {
-    return isExternalLinkage(L) || isLocalLinkage(L) ||
-      isWeakLinkage(L) || isLinkOnceLinkage(L);
+    return isExternalLinkage(L) || isLocalLinkage(L) || isWeakLinkage(L) ||
+           isLinkOnceLinkage(L) || isAvailableExternallyLinkage(L);
   }
 
   // Methods for support type inquiry through isa, cast, and dyn_cast:
Index: llvm/docs/LangRef.rst
===================================================================
--- llvm/docs/LangRef.rst
+++ llvm/docs/LangRef.rst
@@ -886,8 +886,9 @@
               [, partition "name"]
 
 The linkage must be one of ``private``, ``internal``, ``linkonce``, ``weak``,
-``linkonce_odr``, ``weak_odr``, ``external``. Note that some system linkers
-might not correctly handle dropping a weak symbol that is aliased.
+``linkonce_odr``, ``weak_odr``, ``external``, ``available_externally``. Note
+that some system linkers might not correctly handle dropping a weak symbol that
+is aliased.
 
 Aliases that are not ``unnamed_addr`` are guaranteed to have the same address as
 the aliasee expression. ``unnamed_addr`` ones are only guaranteed to point


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D137441.473281.patch
Type: text/x-patch
Size: 3206 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221104/c5177c0a/attachment.bin>


More information about the llvm-commits mailing list