[llvm] r194304 - Revert "Move copying of global initializers below the cloning of functions."

Adrian Prantl aprantl at apple.com
Fri Nov 8 16:43:18 PST 2013


Author: adrian
Date: Fri Nov  8 18:43:18 2013
New Revision: 194304

URL: http://llvm.org/viewvc/llvm-project?rev=194304&view=rev
Log:
Revert "Move copying of global initializers below the cloning of functions."

This would cause internal symbols that are only referenced by global initializers to be removed.

This reverts commit 194219.

Removed:
    llvm/trunk/unittests/Linker/CMakeLists.txt
    llvm/trunk/unittests/Linker/LinkModulesTest.cpp
    llvm/trunk/unittests/Linker/Makefile
Modified:
    llvm/trunk/lib/Linker/LinkModules.cpp
    llvm/trunk/unittests/Makefile

Modified: llvm/trunk/lib/Linker/LinkModules.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Linker/LinkModules.cpp?rev=194304&r1=194303&r2=194304&view=diff
==============================================================================
--- llvm/trunk/lib/Linker/LinkModules.cpp (original)
+++ llvm/trunk/lib/Linker/LinkModules.cpp Fri Nov  8 18:43:18 2013
@@ -1251,6 +1251,10 @@ bool ModuleLinker::run() {
   for (unsigned i = 0, e = AppendingVars.size(); i != e; ++i)
     linkAppendingVarInit(AppendingVars[i]);
   
+  // Update the initializers in the DstM module now that all globals that may
+  // be referenced are in DstM.
+  linkGlobalInits();
+
   // Link in the function bodies that are defined in the source module into
   // DstM.
   for (Module::iterator SF = SrcM->begin(), E = SrcM->end(); SF != E; ++SF) {
@@ -1332,10 +1336,6 @@ bool ModuleLinker::run() {
     }
   } while (LinkedInAnyFunctions);
   
-  // Update the initializers in the DstM module now that all globals that may
-  // be referenced are in DstM.
-  linkGlobalInits();
-
   // Now that all of the types from the source are used, resolve any structs
   // copied over to the dest that didn't exist there.
   TypeMap.linkDefinedTypeBodies();

Removed: llvm/trunk/unittests/Linker/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Linker/CMakeLists.txt?rev=194303&view=auto
==============================================================================
--- llvm/trunk/unittests/Linker/CMakeLists.txt (original)
+++ llvm/trunk/unittests/Linker/CMakeLists.txt (removed)
@@ -1,12 +0,0 @@
-set(LLVM_LINK_COMPONENTS
-  core
-  linker
-  )
-
-set(LinkerSources
-  LinkModulesTest.cpp
-  )
-
-add_llvm_unittest(LinkerTests
-  ${LinkerSources}
-  )

Removed: llvm/trunk/unittests/Linker/LinkModulesTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Linker/LinkModulesTest.cpp?rev=194303&view=auto
==============================================================================
--- llvm/trunk/unittests/Linker/LinkModulesTest.cpp (original)
+++ llvm/trunk/unittests/Linker/LinkModulesTest.cpp (removed)
@@ -1,131 +0,0 @@
-//===- llvm/unittest/Linker/LinkModulesTest.cpp - IRBuilder tests ---------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Linker.h"
-#include "llvm/IR/IRBuilder.h"
-#include "llvm/IR/BasicBlock.h"
-#include "llvm/IR/DataLayout.h"
-#include "llvm/IR/Function.h"
-#include "llvm/IR/Module.h"
-#include "gtest/gtest.h"
-
-using namespace llvm;
-
-namespace {
-
-class LinkModuleTest : public testing::Test {
-protected:
-  virtual void SetUp() {
-    LLVMContext &Ctx = getGlobalContext();
-    M.reset(new Module("MyModule", Ctx));
-    FunctionType *FTy = FunctionType::get(Type::getInt8PtrTy(Ctx),
-                                          Type::getInt32Ty(Ctx),
-                                          false /*=isVarArg*/);
-    F = Function::Create(FTy, Function::ExternalLinkage, "ba_func", M.get());
-    F->setCallingConv(CallingConv::C);
-
-    EntryBB = BasicBlock::Create(Ctx, "entry", F);
-    SwitchCase1BB = BasicBlock::Create(Ctx, "switch.case.1", F);
-    SwitchCase2BB = BasicBlock::Create(Ctx, "switch.case.2", F);
-    ExitBB = BasicBlock::Create(Ctx, "exit", F);
-
-    ArrayType *AT = ArrayType::get(Type::getInt8PtrTy(Ctx), 3);
-
-    GV = new GlobalVariable(*M.get(), AT, false /*=isConstant*/,
-                            GlobalValue::InternalLinkage,
-                            0, "switch.bas");
-
-
-    // Global Initializer
-    std::vector<Constant*> Init;
-    Constant *SwitchCase1BA = BlockAddress::get(SwitchCase1BB);
-    Init.push_back(SwitchCase1BA);
-
-    Constant *SwitchCase2BA = BlockAddress::get(SwitchCase2BB);
-    Init.push_back(SwitchCase2BA);
-
-    ConstantInt *One = ConstantInt::get(Type::getInt32Ty(Ctx), 1);
-    Constant *OnePtr = ConstantExpr::getCast(Instruction::IntToPtr,
-                                             One, Type::getInt8PtrTy(Ctx));
-    Init.push_back(OnePtr);
-
-    GV->setInitializer(ConstantArray::get(AT, Init));
-  }
-
-  virtual void TearDown() {
-    M.reset();
-  }
-
-  OwningPtr<Module> M;
-  Function *F;
-  GlobalVariable *GV;
-  BasicBlock *EntryBB;
-  BasicBlock *SwitchCase1BB;
-  BasicBlock *SwitchCase2BB;
-  BasicBlock *ExitBB;
-};
-
-TEST_F(LinkModuleTest, BlockAddress) {
-  LLVMContext &Ctx = getGlobalContext();
-  IRBuilder<> Builder(EntryBB);
-
-  std::vector<Value*> GEPIndices;
-  GEPIndices.push_back(ConstantInt::get(Type::getInt32Ty(Ctx), 0));
-  GEPIndices.push_back(F->arg_begin());
-
-  Value *GEP = Builder.CreateGEP(GV, GEPIndices, "switch.gep");
-  Value *Load = Builder.CreateLoad(GEP, "switch.load");
-
-  Builder.CreateRet(Load);
-
-  Builder.SetInsertPoint(SwitchCase1BB);
-  Builder.CreateBr(ExitBB);
-
-  Builder.SetInsertPoint(SwitchCase2BB);
-  Builder.CreateBr(ExitBB);
-
-  Builder.SetInsertPoint(ExitBB);
-  Builder.CreateRet(ConstantPointerNull::get(Type::getInt8PtrTy(Ctx)));
-
-  Module *LinkedModule = new Module("MyModuleLinked", getGlobalContext());
-  Linker::LinkModules(LinkedModule, M.get(), Linker::PreserveSource, 0);
-
-  // Delete the original module.
-  M.reset();
-
-  // Check that the global "@switch.bas" is well-formed.
-  const GlobalVariable *LinkedGV = LinkedModule->getNamedGlobal("switch.bas");
-  const Constant *Init = LinkedGV->getInitializer();
-
-  // @switch.bas = internal global [3 x i8*]
-  //   [i8* blockaddress(@ba_func, %switch.case.1),
-  //    i8* blockaddress(@ba_func, %switch.case.2),
-  //    i8* inttoptr (i32 1 to i8*)]
-
-  ArrayType *AT = ArrayType::get(Type::getInt8PtrTy(Ctx), 3);
-  EXPECT_EQ(AT, Init->getType());
-
-  Value *Elem = Init->getOperand(0);
-  ASSERT_TRUE(isa<BlockAddress>(Elem));
-  EXPECT_EQ(cast<BlockAddress>(Elem)->getFunction(),
-            LinkedModule->getFunction("ba_func"));
-  EXPECT_EQ(cast<BlockAddress>(Elem)->getBasicBlock()->getParent(),
-            LinkedModule->getFunction("ba_func"));
-  
-  Elem = Init->getOperand(1);
-  ASSERT_TRUE(isa<BlockAddress>(Elem));
-  EXPECT_EQ(cast<BlockAddress>(Elem)->getFunction(),
-            LinkedModule->getFunction("ba_func"));
-  EXPECT_EQ(cast<BlockAddress>(Elem)->getBasicBlock()->getParent(),
-            LinkedModule->getFunction("ba_func"));
-
-  delete LinkedModule;
-}
-
-} // end anonymous namespace

Removed: llvm/trunk/unittests/Linker/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Linker/Makefile?rev=194303&view=auto
==============================================================================
--- llvm/trunk/unittests/Linker/Makefile (original)
+++ llvm/trunk/unittests/Linker/Makefile (removed)
@@ -1,15 +0,0 @@
-##===- unittests/Linker/Makefile ---------------------------*- Makefile -*-===##
-#
-#                     The LLVM Compiler Infrastructure
-#
-# This file is distributed under the University of Illinois Open Source
-# License. See LICENSE.TXT for details.
-#
-##===----------------------------------------------------------------------===##
-
-LEVEL = ../..
-TESTNAME = Linker
-LINK_COMPONENTS := core linker
-
-include $(LEVEL)/Makefile.config
-include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest

Modified: llvm/trunk/unittests/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Makefile?rev=194304&r1=194303&r2=194304&view=diff
==============================================================================
--- llvm/trunk/unittests/Makefile (original)
+++ llvm/trunk/unittests/Makefile Fri Nov  8 18:43:18 2013
@@ -10,7 +10,7 @@
 LEVEL = ..
 
 PARALLEL_DIRS = ADT Analysis Bitcode CodeGen DebugInfo ExecutionEngine IR \
-		Linker MC Object Option Support Transforms
+		MC Object Option Support Transforms
 
 include $(LEVEL)/Makefile.common
 





More information about the llvm-commits mailing list