[llvm-branch-commits] [llvm] a83dd60 - Revert "[x86] Handle implicit sections when determining if a global is large …"
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Jun 25 10:00:03 PDT 2026
Author: Arthur Eubanks
Date: 2026-06-25T09:59:57-07:00
New Revision: a83dd60266820d39f7631712afe418235baa820e
URL: https://github.com/llvm/llvm-project/commit/a83dd60266820d39f7631712afe418235baa820e
DIFF: https://github.com/llvm/llvm-project/commit/a83dd60266820d39f7631712afe418235baa820e.diff
LOG: Revert "[x86] Handle implicit sections when determining if a global is large …"
This reverts commit f4a149172b51165487b71144c3fd7275da1809a1.
Added:
Modified:
llvm/include/llvm/Target/TargetLoweringObjectFile.h
llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
llvm/lib/Target/TargetLoweringObjectFile.cpp
llvm/lib/Target/TargetMachine.cpp
Removed:
llvm/test/CodeGen/X86/large-implicit-section.ll
################################################################################
diff --git a/llvm/include/llvm/Target/TargetLoweringObjectFile.h b/llvm/include/llvm/Target/TargetLoweringObjectFile.h
index 6d2546e340815..800bbe45c6a97 100644
--- a/llvm/include/llvm/Target/TargetLoweringObjectFile.h
+++ b/llvm/include/llvm/Target/TargetLoweringObjectFile.h
@@ -132,11 +132,6 @@ class LLVM_ABI TargetLoweringObjectFile : public MCObjectFileInfo {
static SectionKind getKindForGlobal(const GlobalObject *GO,
const TargetMachine &TM);
- /// Return the section name specified by '#pragma clang section' or the
- /// section attribute.
- static StringRef getCustomSectionName(const GlobalObject *GO,
- SectionKind Kind);
-
/// This method computes the appropriate section to emit the specified global
/// variable or function definition. This should not be passed external (or
/// available externally) globals.
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index bffaf8893e825..f983c3205f927 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -816,14 +816,34 @@ getGlobalObjectInfo(const GlobalObject *GO, const TargetMachine &TM,
return {Group, IsComdat, Flags, Type, EntrySize};
}
+static StringRef handlePragmaClangSection(const GlobalObject *GO,
+ SectionKind Kind) {
+ // Check if '#pragma clang section' name is applicable.
+ // Note that pragma directive overrides -ffunction-section, -fdata-section
+ // and so section name is exactly as user specified and not uniqued.
+ const GlobalVariable *GV = dyn_cast<GlobalVariable>(GO);
+ if (GV && GV->hasImplicitSection()) {
+ auto Attrs = GV->getAttributes();
+ if (Attrs.hasAttribute("bss-section") && Kind.isBSS())
+ return Attrs.getAttribute("bss-section").getValueAsString();
+ else if (Attrs.hasAttribute("rodata-section") && Kind.isReadOnly())
+ return Attrs.getAttribute("rodata-section").getValueAsString();
+ else if (Attrs.hasAttribute("relro-section") && Kind.isReadOnlyWithRel())
+ return Attrs.getAttribute("relro-section").getValueAsString();
+ else if (Attrs.hasAttribute("data-section") && Kind.isData())
+ return Attrs.getAttribute("data-section").getValueAsString();
+ }
+
+ return GO->getSection();
+}
+
static MCSection *selectExplicitSectionGlobal(const GlobalObject *GO,
SectionKind Kind,
const TargetMachine &TM,
MCContext &Ctx, Mangler &Mang,
unsigned &NextUniqueID,
bool Retain, bool ForceUnique) {
- StringRef SectionName =
- TargetLoweringObjectFile::getCustomSectionName(GO, Kind);
+ StringRef SectionName = handlePragmaClangSection(GO, Kind);
// Infer section flags from the section name if we can.
Kind = getELFKindForNamedSection(SectionName, Kind);
@@ -1364,8 +1384,7 @@ static void checkMachOComdat(const GlobalValue *GV) {
MCSection *TargetLoweringObjectFileMachO::getExplicitSectionGlobal(
const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const {
- StringRef SectionName =
- TargetLoweringObjectFile::getCustomSectionName(GO, Kind);
+ StringRef SectionName = handlePragmaClangSection(GO, Kind);
// Parse the section specifier and create it if valid.
StringRef Segment, Section;
@@ -1731,7 +1750,7 @@ static int getSelectionForCOFF(const GlobalValue *GV) {
MCSection *TargetLoweringObjectFileCOFF::getExplicitSectionGlobal(
const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const {
- StringRef Name = TargetLoweringObjectFile::getCustomSectionName(GO, Kind);
+ StringRef Name = handlePragmaClangSection(GO, Kind);
if (Name == getInstrProfSectionName(IPSK_covmap, Triple::COFF,
/*AddSegmentInfo=*/false) ||
Name == getInstrProfSectionName(IPSK_covfun, Triple::COFF,
diff --git a/llvm/lib/Target/TargetLoweringObjectFile.cpp b/llvm/lib/Target/TargetLoweringObjectFile.cpp
index 8ceddc689fc3c..43649a0cd95c7 100644
--- a/llvm/lib/Target/TargetLoweringObjectFile.cpp
+++ b/llvm/lib/Target/TargetLoweringObjectFile.cpp
@@ -13,7 +13,6 @@
#include "llvm/Target/TargetLoweringObjectFile.h"
#include "llvm/BinaryFormat/Dwarf.h"
-#include "llvm/IR/Attributes.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
@@ -369,24 +368,6 @@ SectionKind TargetLoweringObjectFile::getKindForGlobal(const GlobalObject *GO,
return SectionKind::getData();
}
-StringRef TargetLoweringObjectFile::getCustomSectionName(const GlobalObject *GO,
- SectionKind Kind) {
- const GlobalVariable *GV = dyn_cast<GlobalVariable>(GO);
- if (GV && GV->hasImplicitSection()) {
- auto Attrs = GV->getAttributes();
- if (Attrs.hasAttribute("bss-section") && Kind.isBSS())
- return Attrs.getAttribute("bss-section").getValueAsString();
- else if (Attrs.hasAttribute("rodata-section") && Kind.isReadOnly())
- return Attrs.getAttribute("rodata-section").getValueAsString();
- else if (Attrs.hasAttribute("relro-section") && Kind.isReadOnlyWithRel())
- return Attrs.getAttribute("relro-section").getValueAsString();
- else if (Attrs.hasAttribute("data-section") && Kind.isData())
- return Attrs.getAttribute("data-section").getValueAsString();
- }
-
- return GO->getSection();
-}
-
/// This method computes the appropriate section to emit the specified global
/// variable or function definition. This should not be passed external (or
/// available externally) globals.
diff --git a/llvm/lib/Target/TargetMachine.cpp b/llvm/lib/Target/TargetMachine.cpp
index 70c3ebb0c4e0f..9ec10b5be0fd4 100644
--- a/llvm/lib/Target/TargetMachine.cpp
+++ b/llvm/lib/Target/TargetMachine.cpp
@@ -98,20 +98,14 @@ bool TargetMachine::isLargeGlobalValue(const GlobalValue *GVal) const {
return true;
}
- // Treat all globals in user-defined sections as small, except for the
- // standard large sections of .lbss, .ldata, .lrodata. This reduces the risk
- // of linking together small and large sections, resulting in small
- // references to large data sections. The code model attribute overrides this
- // above.
- if (GV->hasSection() || GV->hasImplicitSection()) {
- SectionKind Kind = TargetLoweringObjectFile::getKindForGlobal(GV, *this);
- StringRef SectionName =
- TargetLoweringObjectFile::getCustomSectionName(GV, Kind);
- if (!SectionName.empty()) {
- return IsPrefix(SectionName, ".lbss") ||
- IsPrefix(SectionName, ".ldata") ||
- IsPrefix(SectionName, ".lrodata");
- }
+ // Treat all globals in explicit sections as small, except for the standard
+ // large sections of .lbss, .ldata, .lrodata. This reduces the risk of linking
+ // together small and large sections, resulting in small references to large
+ // data sections. The code model attribute overrides this above.
+ if (GV->hasSection()) {
+ StringRef Name = GV->getSection();
+ return IsPrefix(Name, ".lbss") || IsPrefix(Name, ".ldata") ||
+ IsPrefix(Name, ".lrodata");
}
// Respect large data threshold for medium and large code models.
diff --git a/llvm/test/CodeGen/X86/large-implicit-section.ll b/llvm/test/CodeGen/X86/large-implicit-section.ll
deleted file mode 100644
index 87e384c88c2ee..0000000000000
--- a/llvm/test/CodeGen/X86/large-implicit-section.ll
+++ /dev/null
@@ -1,134 +0,0 @@
-; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
-; RUN: llc -mtriple=x86_64-linux-gnu -code-model=medium -relocation-model=static -large-data-threshold=16 < %s | FileCheck %s --check-prefix=STATIC
-; RUN: llc -mtriple=x86_64-linux-gnu -code-model=medium -relocation-model=pic -large-data-threshold=16 < %s | FileCheck %s --check-prefix=PIC
-
- at small_in_large_bss = dso_local global i32 0 "bss-section"=".lbss.my_bss"
- at small_in_large_data = dso_local global i32 1 "data-section"=".ldata.my_data"
- at small_in_large_rodata = dso_local constant i32 2 "rodata-section"=".lrodata.my_rodata"
-
- at ptr = dso_local global i32 0
- at small_in_large_relro = dso_local constant ptr @ptr "relro-section"=".ldata.rel.ro.my_relro"
-
- at large_in_small_implicit_bss = dso_local global [4 x i64] zeroinitializer "bss-section"="my_bss"
- at large_in_small_implicit_data = dso_local global [4 x i64] [i64 1, i64 0, i64 0, i64 0] "data-section"="my_data"
- at large_in_small_implicit_rodata = dso_local constant [4 x i64] zeroinitializer "rodata-section"="my_rodata"
- at large_in_small_implicit_relro = dso_local constant [4 x ptr] [ptr @ptr, ptr null, ptr null, ptr null] "relro-section"="my_relro"
-
-define i32 @load_bss() {
-; STATIC-LABEL: load_bss:
-; STATIC: # %bb.0:
-; STATIC-NEXT: movabsq $small_in_large_bss, %rax
-; STATIC-NEXT: movl (%rax), %eax
-; STATIC-NEXT: retq
-;
-; PIC-LABEL: load_bss:
-; PIC: # %bb.0:
-; PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax
-; PIC-NEXT: movabsq $.Lsmall_in_large_bss$local at GOTOFF, %rcx
-; PIC-NEXT: movl (%rax,%rcx), %eax
-; PIC-NEXT: retq
- %v = load i32, ptr @small_in_large_bss
- ret i32 %v
-}
-
-define i32 @load_data() {
-; STATIC-LABEL: load_data:
-; STATIC: # %bb.0:
-; STATIC-NEXT: movabsq $small_in_large_data, %rax
-; STATIC-NEXT: movl (%rax), %eax
-; STATIC-NEXT: retq
-;
-; PIC-LABEL: load_data:
-; PIC: # %bb.0:
-; PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax
-; PIC-NEXT: movabsq $.Lsmall_in_large_data$local at GOTOFF, %rcx
-; PIC-NEXT: movl (%rax,%rcx), %eax
-; PIC-NEXT: retq
- %v = load i32, ptr @small_in_large_data
- ret i32 %v
-}
-
-define i32 @load_rodata() {
-; STATIC-LABEL: load_rodata:
-; STATIC: # %bb.0:
-; STATIC-NEXT: movabsq $small_in_large_rodata, %rax
-; STATIC-NEXT: movl (%rax), %eax
-; STATIC-NEXT: retq
-;
-; PIC-LABEL: load_rodata:
-; PIC: # %bb.0:
-; PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax
-; PIC-NEXT: movabsq $.Lsmall_in_large_rodata$local at GOTOFF, %rcx
-; PIC-NEXT: movl (%rax,%rcx), %eax
-; PIC-NEXT: retq
- %v = load i32, ptr @small_in_large_rodata
- ret i32 %v
-}
-
-define ptr @load_relro() {
-; STATIC-LABEL: load_relro:
-; STATIC: # %bb.0:
-; STATIC-NEXT: movq small_in_large_relro(%rip), %rax
-; STATIC-NEXT: retq
-;
-; PIC-LABEL: load_relro:
-; PIC: # %bb.0:
-; PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax
-; PIC-NEXT: movabsq $.Lsmall_in_large_relro$local at GOTOFF, %rcx
-; PIC-NEXT: movq (%rax,%rcx), %rax
-; PIC-NEXT: retq
- %v = load ptr, ptr @small_in_large_relro
- ret ptr %v
-}
-
-define ptr @lea_large_in_small_implicit_bss() {
-; STATIC-LABEL: lea_large_in_small_implicit_bss:
-; STATIC: # %bb.0:
-; STATIC-NEXT: movl $large_in_small_implicit_bss, %eax
-; STATIC-NEXT: retq
-;
-; PIC-LABEL: lea_large_in_small_implicit_bss:
-; PIC: # %bb.0:
-; PIC-NEXT: leaq .Llarge_in_small_implicit_bss$local(%rip), %rax
-; PIC-NEXT: retq
- ret ptr @large_in_small_implicit_bss
-}
-
-define ptr @lea_large_in_small_implicit_data() {
-; STATIC-LABEL: lea_large_in_small_implicit_data:
-; STATIC: # %bb.0:
-; STATIC-NEXT: movl $large_in_small_implicit_data, %eax
-; STATIC-NEXT: retq
-;
-; PIC-LABEL: lea_large_in_small_implicit_data:
-; PIC: # %bb.0:
-; PIC-NEXT: leaq .Llarge_in_small_implicit_data$local(%rip), %rax
-; PIC-NEXT: retq
- ret ptr @large_in_small_implicit_data
-}
-
-define ptr @lea_large_in_small_implicit_rodata() {
-; STATIC-LABEL: lea_large_in_small_implicit_rodata:
-; STATIC: # %bb.0:
-; STATIC-NEXT: movl $large_in_small_implicit_rodata, %eax
-; STATIC-NEXT: retq
-;
-; PIC-LABEL: lea_large_in_small_implicit_rodata:
-; PIC: # %bb.0:
-; PIC-NEXT: leaq .Llarge_in_small_implicit_rodata$local(%rip), %rax
-; PIC-NEXT: retq
- ret ptr @large_in_small_implicit_rodata
-}
-
-define ptr @lea_large_in_small_implicit_relro() {
-; STATIC-LABEL: lea_large_in_small_implicit_relro:
-; STATIC: # %bb.0:
-; STATIC-NEXT: movabsq $large_in_small_implicit_relro, %rax
-; STATIC-NEXT: retq
-;
-; PIC-LABEL: lea_large_in_small_implicit_relro:
-; PIC: # %bb.0:
-; PIC-NEXT: leaq .Llarge_in_small_implicit_relro$local(%rip), %rax
-; PIC-NEXT: retq
- ret ptr @large_in_small_implicit_relro
-}
More information about the llvm-branch-commits
mailing list