[PATCH] D129151: [Metadata] Add 'exclude' metadata to add the exclude flags on globals
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG41fba3c107a5: [Metadata] Add exclude metadata to add the exclude flags on globals (authored by jhuber6). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D129151/new/ https://reviews.llvm.org/D129151 Files: clang/test/Frontend/embed-object.c clang/test/Frontend/embed-object.ll llvm/docs/LangRef.rst llvm/include/llvm/IR/FixedMetadataKinds.def llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp llvm/lib/Target/TargetLoweringObjectFile.cpp llvm/lib/Transforms/Utils/ModuleUtils.cpp llvm/test/CodeGen/X86/coff-exclude.ll llvm/test/CodeGen/X86/elf-exclude.ll llvm/test/CodeGen/X86/offload_sections.ll Index: llvm/test/CodeGen/X86/offload_sections.ll === --- llvm/test/CodeGen/X86/offload_sections.ll +++ llvm/test/CodeGen/X86/offload_sections.ll @@ -1,8 +1,10 @@ ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s --check-prefix=CHECK-ELF ; RUN: llc < %s -mtriple=x86_64-win32-gnu | FileCheck %s --check-prefix=CHECK-COFF -@llvm.embedded.object = private constant [1 x i8] c"\00", section ".llvm.offloading" +@llvm.embedded.object = private constant [1 x i8] c"\00", section ".llvm.offloading", align 8, !exclude !0 @llvm.compiler.used = appending global [1 x ptr] [ptr @llvm.embedded.object], section "llvm.metadata" +!0 = !{} + ; CHECK-ELF: .section .llvm.offloading,"e",@llvm_offloading -; CHECK-COFF: .section .llvm.offloading,"dr" +; CHECK-COFF: .section .llvm.offloading,"ynD" Index: llvm/test/CodeGen/X86/elf-exclude.ll === --- /dev/null +++ llvm/test/CodeGen/X86/elf-exclude.ll @@ -0,0 +1,18 @@ +; RUN: llc -mtriple x86_64-pc-linux-gnu < %s | FileCheck %s + +@a = global i32 1 +@b = global i32 1, !exclude !0 +@c = global i32 1, section "aaa" +; CHECK-DAG: .type c,@object +; CHECK-DAG: .section aaa,"aw",@progbits +@d = global i32 1, section "bbb", !exclude !0 +; CHECK-DAG: .type d,@object +; CHECK-DAG: .section bbb,"e",@progbits +@e = global i32 1, section "bbb", !exclude !0 +; CHECK-DAG: .type e,@object +@f = global i32 1, section "ccc", !exclude !0 +@g = global i32 1, section "ccc" +; CHECK-DAG: .type f,@object +; CHECK-DAG: .section ccc,"e",@progbits + +!0 = !{} Index: llvm/test/CodeGen/X86/coff-exclude.ll === --- /dev/null +++ llvm/test/CodeGen/X86/coff-exclude.ll @@ -0,0 +1,18 @@ +; RUN: llc -mtriple x86_64-win32-gnu < %s | FileCheck %s + +@a = global i32 1 +@b = global i32 1, !exclude !0 +@c = global i32 1, section "aaa" +; CHECK-DAG: c +; CHECK-DAG: .section aaa,"dw" +@d = global i32 1, section "bbb", !exclude !0 +; CHECK-DAG: d +; CHECK-DAG: .section bbb,"ynD" +@e = global i32 1, section "bbb", !exclude !0 +; CHECK-DAG: e +@f = global i32 1, section "ccc", !exclude !0 +@g = global i32 1, section "ccc" +; CHECK-DAG: f +; CHECK-DAG: .section ccc,"ynD" + +!0 = !{} Index: llvm/lib/Transforms/Utils/ModuleUtils.cpp === --- llvm/lib/Transforms/Utils/ModuleUtils.cpp +++ llvm/lib/Transforms/Utils/ModuleUtils.cpp @@ -281,6 +281,7 @@ MDString::get(Ctx, SectionName)}; MD->addOperand(llvm::MDNode::get(Ctx, MDVals)); + GV->setMetadata(LLVMContext::MD_exclude, llvm::MDNode::get(Ctx, {})); appendToCompilerUsed(M, GV); } Index: llvm/lib/Target/TargetLoweringObjectFile.cpp === --- llvm/lib/Target/TargetLoweringObjectFile.cpp +++ llvm/lib/Target/TargetLoweringObjectFile.cpp @@ -240,6 +240,13 @@ return SectionKind::getBSS(); } + // Global variables with '!exclude' should get the exclude section kind if + // they have an explicit section and no other metadata. + if (GVar->hasSection()) +if (MDNode *MD = GVar->getMetadata(LLVMContext::MD_exclude)) + if (!MD->getNumOperands()) +return SectionKind::getExclude(); + // If the global is marked constant, we can put it into a mergable section, // a mergable string section, or general .data if it contains relocations. if (GVar->isConstant()) { Index: llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp === --- llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -449,9 +449,6 @@ Name == ".llvmbc" || Name == ".llvmcmd") return SectionKind::getMetadata(); - if (Name == ".llvm.offloading") -return SectionKind::getExclude(); - if (Name.empty() || Name[0] != '.') return K; // Default implementation based on some magic section names. Index: llvm/include/llvm/IR/FixedMetadataKinds.def
[PATCH] D129151: [Metadata] Add 'exclude' metadata to add the exclude flags on globals
jdoerfert accepted this revision. jdoerfert added a comment. This revision is now accepted and ready to land. LG Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D129151/new/ https://reviews.llvm.org/D129151 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D129151: [Metadata] Add 'exclude' metadata to add the exclude flags on globals
jhuber6 updated this revision to Diff 442941. jhuber6 added a comment. Herald added a project: clang. Herald added a subscriber: cfe-commits. Addressing comments. Metadata is now empty and must be empty for the flag to be emitted. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D129151/new/ https://reviews.llvm.org/D129151 Files: clang/test/Frontend/embed-object.c clang/test/Frontend/embed-object.ll llvm/docs/LangRef.rst llvm/include/llvm/IR/FixedMetadataKinds.def llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp llvm/lib/Target/TargetLoweringObjectFile.cpp llvm/lib/Transforms/Utils/ModuleUtils.cpp llvm/test/CodeGen/X86/coff-exclude.ll llvm/test/CodeGen/X86/elf-exclude.ll llvm/test/CodeGen/X86/offload_sections.ll Index: llvm/test/CodeGen/X86/offload_sections.ll === --- llvm/test/CodeGen/X86/offload_sections.ll +++ llvm/test/CodeGen/X86/offload_sections.ll @@ -1,8 +1,10 @@ ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s --check-prefix=CHECK-ELF ; RUN: llc < %s -mtriple=x86_64-win32-gnu | FileCheck %s --check-prefix=CHECK-COFF -@llvm.embedded.object = private constant [1 x i8] c"\00", section ".llvm.offloading" +@llvm.embedded.object = private constant [1 x i8] c"\00", section ".llvm.offloading", align 8, !exclude !0 @llvm.compiler.used = appending global [1 x ptr] [ptr @llvm.embedded.object], section "llvm.metadata" +!0 = !{} + ; CHECK-ELF: .section .llvm.offloading,"e",@llvm_offloading -; CHECK-COFF: .section .llvm.offloading,"dr" +; CHECK-COFF: .section .llvm.offloading,"ynD" Index: llvm/test/CodeGen/X86/elf-exclude.ll === --- /dev/null +++ llvm/test/CodeGen/X86/elf-exclude.ll @@ -0,0 +1,18 @@ +; RUN: llc -mtriple x86_64-pc-linux-gnu < %s | FileCheck %s + +@a = global i32 1 +@b = global i32 1, !exclude !0 +@c = global i32 1, section "aaa" +; CHECK-DAG: .type c,@object +; CHECK-DAG: .section aaa,"aw",@progbits +@d = global i32 1, section "bbb", !exclude !0 +; CHECK-DAG: .type d,@object +; CHECK-DAG: .section bbb,"e",@progbits +@e = global i32 1, section "bbb", !exclude !0 +; CHECK-DAG: .type e,@object +@f = global i32 1, section "ccc", !exclude !0 +@g = global i32 1, section "ccc" +; CHECK-DAG: .type f,@object +; CHECK-DAG: .section ccc,"e",@progbits + +!0 = !{} Index: llvm/test/CodeGen/X86/coff-exclude.ll === --- /dev/null +++ llvm/test/CodeGen/X86/coff-exclude.ll @@ -0,0 +1,18 @@ +; RUN: llc -mtriple x86_64-win32-gnu < %s | FileCheck %s + +@a = global i32 1 +@b = global i32 1, !exclude !0 +@c = global i32 1, section "aaa" +; CHECK-DAG: c +; CHECK-DAG: .section aaa,"dw" +@d = global i32 1, section "bbb", !exclude !0 +; CHECK-DAG: d +; CHECK-DAG: .section bbb,"ynD" +@e = global i32 1, section "bbb", !exclude !0 +; CHECK-DAG: e +@f = global i32 1, section "ccc", !exclude !0 +@g = global i32 1, section "ccc" +; CHECK-DAG: f +; CHECK-DAG: .section ccc,"ynD" + +!0 = !{} Index: llvm/lib/Transforms/Utils/ModuleUtils.cpp === --- llvm/lib/Transforms/Utils/ModuleUtils.cpp +++ llvm/lib/Transforms/Utils/ModuleUtils.cpp @@ -281,6 +281,7 @@ MDString::get(Ctx, SectionName)}; MD->addOperand(llvm::MDNode::get(Ctx, MDVals)); + GV->setMetadata(LLVMContext::MD_exclude, llvm::MDNode::get(Ctx, {})); appendToCompilerUsed(M, GV); } Index: llvm/lib/Target/TargetLoweringObjectFile.cpp === --- llvm/lib/Target/TargetLoweringObjectFile.cpp +++ llvm/lib/Target/TargetLoweringObjectFile.cpp @@ -240,6 +240,13 @@ return SectionKind::getBSS(); } + // Global variables with '!exclude' should get the exclude section kind if + // they have an explicit section and no other metadata. + if (GVar->hasSection()) +if (MDNode *MD = GVar->getMetadata(LLVMContext::MD_exclude)) + if (!MD->getNumOperands()) +return SectionKind::getExclude(); + // If the global is marked constant, we can put it into a mergable section, // a mergable string section, or general .data if it contains relocations. if (GVar->isConstant()) { Index: llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp === --- llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -449,9 +449,6 @@ Name == ".llvmbc" || Name == ".llvmcmd") return SectionKind::getMetadata(); - if (Name == ".llvm.offloading") -return SectionKind::getExclude(); - if (Name.empty() || Name[0] != '.') return K; // Default implementation based on some magic section names. Index: llvm/include/llvm/IR/FixedMetadataKinds.def === ---