[llvm] r239921 - Allow aliases to be unnamed.

Rafael Espindola rafael.espindola at gmail.com
Wed Jun 17 10:53:31 PDT 2015


Author: rafael
Date: Wed Jun 17 12:53:31 2015
New Revision: 239921

URL: http://llvm.org/viewvc/llvm-project?rev=239921&view=rev
Log:
Allow aliases to be unnamed.

If globals can be unnamed, there is no reason for aliases to be different.

The restriction was there since the original implementation in r36435. I
can only guess it was there because of the old bison parser for the old
alias syntax.

Added:
    llvm/trunk/test/Assembler/unnamed-alias.ll
Modified:
    llvm/trunk/lib/AsmParser/LLParser.cpp
    llvm/trunk/lib/IR/AsmWriter.cpp
    llvm/trunk/lib/IR/Verifier.cpp

Modified: llvm/trunk/lib/AsmParser/LLParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=239921&r1=239920&r2=239921&view=diff
==============================================================================
--- llvm/trunk/lib/AsmParser/LLParser.cpp (original)
+++ llvm/trunk/lib/AsmParser/LLParser.cpp Wed Jun 17 12:53:31 2015
@@ -670,6 +670,9 @@ bool LLParser::ParseAlias(const std::str
   GA->setDLLStorageClass((GlobalValue::DLLStorageClassTypes)DLLStorageClass);
   GA->setUnnamedAddr(UnnamedAddr);
 
+  if (Name.empty())
+    NumberedVals.push_back(GA.get());
+
   // See if this value already exists in the symbol table.  If so, it is either
   // a redefinition or a definition of a forward reference.
   if (GlobalValue *Val = M->getNamedValue(Name)) {

Modified: llvm/trunk/lib/IR/AsmWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/AsmWriter.cpp?rev=239921&r1=239920&r2=239921&view=diff
==============================================================================
--- llvm/trunk/lib/IR/AsmWriter.cpp (original)
+++ llvm/trunk/lib/IR/AsmWriter.cpp Wed Jun 17 12:53:31 2015
@@ -730,6 +730,11 @@ void SlotTracker::processModule() {
       CreateModuleSlot(&Var);
   }
 
+  for (const GlobalAlias &A : TheModule->aliases()) {
+    if (!A.hasName())
+      CreateModuleSlot(&A);
+  }
+
   // Add metadata used by named metadata.
   for (const NamedMDNode &NMD : TheModule->named_metadata()) {
     for (unsigned i = 0, e = NMD.getNumOperands(); i != e; ++i)
@@ -2356,13 +2361,9 @@ void AssemblyWriter::printAlias(const Gl
   if (GA->isMaterializable())
     Out << "; Materializable\n";
 
-  // Don't crash when dumping partially built GA
-  if (!GA->hasName())
-    Out << "<<nameless>> = ";
-  else {
-    PrintLLVMName(Out, GA);
-    Out << " = ";
-  }
+  WriteAsOperandInternal(Out, GA, &TypePrinter, &Machine, GA->getParent());
+  Out << " = ";
+
   PrintLinkage(GA->getLinkage(), Out);
   PrintVisibility(GA->getVisibility(), Out);
   PrintDLLStorageClass(GA->getDLLStorageClass(), Out);

Modified: llvm/trunk/lib/IR/Verifier.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Verifier.cpp?rev=239921&r1=239920&r2=239921&view=diff
==============================================================================
--- llvm/trunk/lib/IR/Verifier.cpp (original)
+++ llvm/trunk/lib/IR/Verifier.cpp Wed Jun 17 12:53:31 2015
@@ -584,7 +584,6 @@ void Verifier::visitAliaseeSubExpr(Small
 }
 
 void Verifier::visitGlobalAlias(const GlobalAlias &GA) {
-  Assert(!GA.getName().empty(), "Alias name cannot be empty!", &GA);
   Assert(GlobalAlias::isValidLinkage(GA.getLinkage()),
          "Alias should have private, internal, linkonce, weak, linkonce_odr, "
          "weak_odr, or external linkage!",

Added: llvm/trunk/test/Assembler/unnamed-alias.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/unnamed-alias.ll?rev=239921&view=auto
==============================================================================
--- llvm/trunk/test/Assembler/unnamed-alias.ll (added)
+++ llvm/trunk/test/Assembler/unnamed-alias.ll Wed Jun 17 12:53:31 2015
@@ -0,0 +1,11 @@
+; RUN: llvm-as < %s | llvm-dis | FileCheck %s
+
+ at 0 = private constant i32 0
+; CHECK: @0 = private constant i32 0
+ at 1 = private constant i32 1
+; CHECK: @1 = private constant i32 1
+
+ at 2 = private alias i32* @0
+; CHECK: @2 = private alias i32* @0
+ at 3 = private alias i32* @1
+; CHECK: @3 = private alias i32* @1





More information about the llvm-commits mailing list