[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