From f9d03c15e8642d4bd3686b8c8e8269242a0f37c6 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Thu, 17 Jan 2013 01:35:06 +0000 Subject: [PATCH] [IRgen] Update modules autolink metadata to use module flags (as now specified in the LangRef). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172692 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CodeGenModule.cpp | 16 ++++++---------- test/Modules/autolink.m | 4 +++- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 38f457ada6..04a08a92d8 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -723,7 +723,7 @@ void CodeGenModule::EmitLLVMUsed() { /// it depends on, using a postorder walk. static void addLinkOptionsPostorder(llvm::LLVMContext &Context, Module *Mod, - SmallVectorImpl &Metadata, + SmallVectorImpl &Metadata, llvm::SmallPtrSet &Visited) { // Import this module's parent. if (Mod->Parent && Visited.insert(Mod->Parent)) { @@ -810,7 +810,7 @@ void CodeGenModule::EmitModuleLinkOptions() { // Add link options for all of the imported modules in reverse topological // order. - SmallVector MetadataArgs; + SmallVector MetadataArgs; Visited.clear(); for (llvm::SetVector::iterator M = LinkModules.begin(), MEnd = LinkModules.end(); @@ -818,15 +818,11 @@ void CodeGenModule::EmitModuleLinkOptions() { if (Visited.insert(*M)) addLinkOptionsPostorder(getLLVMContext(), *M, MetadataArgs, Visited); } + std::reverse(MetadataArgs.begin(), MetadataArgs.end()); - // Get/create metadata for the link options. - llvm::NamedMDNode *Metadata - = getModule().getOrInsertNamedMetadata("llvm.module.linkoptions"); - - // Add link options in topological order. - for (unsigned I = MetadataArgs.size(); I > 0; --I) { - Metadata->addOperand(MetadataArgs[I-1]); - } + // Add the linker options metadata flag. + getModule().addModuleFlag(llvm::Module::AppendUnique, "Linker Options", + llvm::MDNode::get(getLLVMContext(), MetadataArgs)); } void CodeGenModule::EmitDeferred() { diff --git a/test/Modules/autolink.m b/test/Modules/autolink.m index 8dce12b21b..079e5af2ae 100644 --- a/test/Modules/autolink.m +++ b/test/Modules/autolink.m @@ -28,7 +28,9 @@ int use_no_umbrella() { return no_umbrella_A; } -// CHECK: !llvm.module.linkoptions = !{![[AUTOLINK_FRAMEWORK:[0-9]+]], ![[AUTOLINK:[0-9]+]], ![[DEPENDSONMODULE:[0-9]+]], ![[MODULE:[0-9]+]], ![[NOUMBRELLA:[0-9]+]]} +// CHECK: !llvm.module.flags = !{!0, !1, !2, !3, !4} +// CHECK: !4 = metadata !{i32 6, metadata !"Linker Options", metadata ![[AUTOLINK_OPTIONS:[0-9]+]]} +// CHECK: ![[AUTOLINK_OPTIONS]] = metadata !{metadata ![[AUTOLINK_FRAMEWORK:[0-9]+]], metadata ![[AUTOLINK:[0-9]+]], metadata ![[DEPENDSONMODULE:[0-9]+]], metadata ![[MODULE:[0-9]+]], metadata ![[NOUMBRELLA:[0-9]+]]} // CHECK: ![[AUTOLINK_FRAMEWORK]] = metadata !{metadata !"-framework", metadata !"autolink_framework"} // CHECK: ![[AUTOLINK]] = metadata !{metadata !"-lautolink"} // CHECK: ![[DEPENDSONMODULE]] = metadata !{metadata !"-framework", metadata !"DependsOnModule"} -- 2.40.0