[PATCH] D129151: [Metadata] Add 'exclude' metadata to add the exclude flags on globals

2022-07-07 Thread Joseph Huber via Phabricator via cfe-commits
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

2022-07-07 Thread Johannes Doerfert via Phabricator via cfe-commits
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

2022-07-07 Thread Joseph Huber via Phabricator via cfe-commits
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
===
---