[llvm] r239921 - Allow aliases to be unnamed.

Nick Lewycky nicholas at mxc.ca
Thu Jun 18 02:35:18 PDT 2015


Rafael Espindola wrote:
> 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.

Hold on. What is an alias except a second name for the same object? How 
would you lower an unnamed alias to any object format?

> 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
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>




More information about the llvm-commits mailing list