Author: Mingming Liu Date: 2025-09-16T12:51:22-07:00 New Revision: c5b558385b956faf99348b3f0de91926061afcfb
URL: https://github.com/llvm/llvm-project/commit/c5b558385b956faf99348b3f0de91926061afcfb DIFF: https://github.com/llvm/llvm-project/commit/c5b558385b956faf99348b3f0de91926061afcfb.diff LOG: Revert "[NFCI][Globals] In GlobalObjects::setSectionPrefix, do conditional up…" This reverts commit 027bccc4692923d0f1ba3d4d970071f747c2255c. Added: Modified: llvm/include/llvm/IR/GlobalObject.h llvm/lib/CodeGen/CodeGenPrepare.cpp llvm/lib/CodeGen/StaticDataAnnotator.cpp llvm/lib/IR/Globals.cpp llvm/lib/Transforms/Instrumentation/MemProfUse.cpp llvm/unittests/IR/CMakeLists.txt Removed: llvm/unittests/IR/GlobalObjectTest.cpp ################################################################################ diff --git a/llvm/include/llvm/IR/GlobalObject.h b/llvm/include/llvm/IR/GlobalObject.h index e273387807cf6..08a02b42bdc14 100644 --- a/llvm/include/llvm/IR/GlobalObject.h +++ b/llvm/include/llvm/IR/GlobalObject.h @@ -121,10 +121,8 @@ class GlobalObject : public GlobalValue { /// appropriate default object file section. LLVM_ABI void setSection(StringRef S); - /// If existing prefix is diff erent from \p Prefix, set it to \p Prefix. If \p - /// Prefix is empty, the set clears the existing metadata. Returns true if - /// section prefix changed and false otherwise. - LLVM_ABI bool setSectionPrefix(StringRef Prefix); + /// Set the section prefix for this global object. + LLVM_ABI void setSectionPrefix(StringRef Prefix); /// Get the section prefix for this global object. LLVM_ABI std::optional<StringRef> getSectionPrefix() const; diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp index 92d87681c9adc..9db4c9e5e2807 100644 --- a/llvm/lib/CodeGen/CodeGenPrepare.cpp +++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp @@ -583,23 +583,23 @@ bool CodeGenPrepare::_run(Function &F) { // if requested. if (BBSectionsGuidedSectionPrefix && BBSectionsProfileReader && BBSectionsProfileReader->isFunctionHot(F.getName())) { - EverMadeChange |= F.setSectionPrefix("hot"); + F.setSectionPrefix("hot"); } else if (ProfileGuidedSectionPrefix) { // The hot attribute overwrites profile count based hotness while profile // counts based hotness overwrite the cold attribute. // This is a conservative behabvior. if (F.hasFnAttribute(Attribute::Hot) || PSI->isFunctionHotInCallGraph(&F, *BFI)) - EverMadeChange |= F.setSectionPrefix("hot"); + F.setSectionPrefix("hot"); // If PSI shows this function is not hot, we will placed the function // into unlikely section if (1) PSI shows this is a cold function, or // (2) the function has a attribute of cold. else if (PSI->isFunctionColdInCallGraph(&F, *BFI) || F.hasFnAttribute(Attribute::Cold)) - EverMadeChange |= F.setSectionPrefix("unlikely"); + F.setSectionPrefix("unlikely"); else if (ProfileUnknownInSpecialSection && PSI->hasPartialSampleProfile() && PSI->isFunctionHotnessUnknown(F)) - EverMadeChange |= F.setSectionPrefix("unknown"); + F.setSectionPrefix("unknown"); } /// This optimization identifies DIV instructions that can be diff --git a/llvm/lib/CodeGen/StaticDataAnnotator.cpp b/llvm/lib/CodeGen/StaticDataAnnotator.cpp index 53a9ab4dbda02..2d9b489a80acb 100644 --- a/llvm/lib/CodeGen/StaticDataAnnotator.cpp +++ b/llvm/lib/CodeGen/StaticDataAnnotator.cpp @@ -91,7 +91,8 @@ bool StaticDataAnnotator::runOnModule(Module &M) { if (SectionPrefix.empty()) continue; - Changed |= GV.setSectionPrefix(SectionPrefix); + GV.setSectionPrefix(SectionPrefix); + Changed = true; } return Changed; diff --git a/llvm/lib/IR/Globals.cpp b/llvm/lib/IR/Globals.cpp index 1a7a5c5fbad6b..11d33e262fecb 100644 --- a/llvm/lib/IR/Globals.cpp +++ b/llvm/lib/IR/Globals.cpp @@ -288,22 +288,10 @@ void GlobalObject::setSection(StringRef S) { setGlobalObjectFlag(HasSectionHashEntryBit, !S.empty()); } -bool GlobalObject::setSectionPrefix(StringRef Prefix) { - StringRef ExistingPrefix; - if (std::optional<StringRef> MaybePrefix = getSectionPrefix()) - ExistingPrefix = *MaybePrefix; - - if (ExistingPrefix == Prefix) - return false; - - if (Prefix.empty()) { - setMetadata(LLVMContext::MD_section_prefix, nullptr); - return true; - } +void GlobalObject::setSectionPrefix(StringRef Prefix) { MDBuilder MDB(getContext()); setMetadata(LLVMContext::MD_section_prefix, MDB.createGlobalObjectSectionPrefix(Prefix)); - return true; } std::optional<StringRef> GlobalObject::getSectionPrefix() const { diff --git a/llvm/lib/Transforms/Instrumentation/MemProfUse.cpp b/llvm/lib/Transforms/Instrumentation/MemProfUse.cpp index c86092bd51eda..ecb2f2dbc552b 100644 --- a/llvm/lib/Transforms/Instrumentation/MemProfUse.cpp +++ b/llvm/lib/Transforms/Instrumentation/MemProfUse.cpp @@ -848,12 +848,13 @@ bool MemProfUsePass::annotateGlobalVariables( // So we just print out the static data section prefix in LLVM_DEBUG. if (Record && Record->AccessCount > 0) { ++NumOfMemProfHotGlobalVars; - Changed |= GVar.setSectionPrefix("hot"); + GVar.setSectionPrefix("hot"); + Changed = true; LLVM_DEBUG(dbgs() << "Global variable " << Name << " is annotated as hot\n"); } else if (DataAccessProf->isKnownColdSymbol(Name)) { ++NumOfMemProfColdGlobalVars; - Changed |= GVar.setSectionPrefix("unlikely"); + GVar.setSectionPrefix("unlikely"); Changed = true; LLVM_DEBUG(dbgs() << "Global variable " << Name << " is annotated as unlikely\n"); diff --git a/llvm/unittests/IR/CMakeLists.txt b/llvm/unittests/IR/CMakeLists.txt index d62ce66ef9d34..8b7bd3997ea27 100644 --- a/llvm/unittests/IR/CMakeLists.txt +++ b/llvm/unittests/IR/CMakeLists.txt @@ -28,7 +28,6 @@ add_llvm_unittest(IRTests DominatorTreeBatchUpdatesTest.cpp DroppedVariableStatsIRTest.cpp FunctionTest.cpp - GlobalObjectTest.cpp PassBuilderCallbacksTest.cpp IRBuilderTest.cpp InstructionsTest.cpp diff --git a/llvm/unittests/IR/GlobalObjectTest.cpp b/llvm/unittests/IR/GlobalObjectTest.cpp deleted file mode 100644 index 0e16d01e759de..0000000000000 --- a/llvm/unittests/IR/GlobalObjectTest.cpp +++ /dev/null @@ -1,80 +0,0 @@ -//===- GlobalObjectTest.cpp - Global object unit tests --------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "llvm/IR/GlobalObject.h" -#include "llvm/AsmParser/Parser.h" -#include "llvm/IR/Module.h" -#include "llvm/Support/SourceMgr.h" -#include "gmock/gmock.h" -#include "gtest/gtest.h" -using namespace llvm; -namespace { -using testing::Eq; -using testing::Optional; -using testing::StrEq; - -static std::unique_ptr<Module> parseIR(LLVMContext &C, const char *IR) { - SMDiagnostic Err; - std::unique_ptr<Module> Mod = parseAssemblyString(IR, Err, C); - if (!Mod) - Err.print("GlobalObjectTests", errs()); - return Mod; -} - -static LLVMContext C; -static std::unique_ptr<Module> M; - -class GlobalObjectTest : public testing::Test { -public: - static void SetUpTestSuite() { - M = parseIR(C, R"( -@foo = global i32 3, !section_prefix !0 -@bar = global i32 0 - -!0 = !{!"section_prefix", !"hot"} -)"); - } -}; - -TEST_F(GlobalObjectTest, SectionPrefix) { - GlobalVariable *Foo = M->getGlobalVariable("foo"); - - // Initial section prefix is hot. - ASSERT_NE(Foo, nullptr); - ASSERT_THAT(Foo->getSectionPrefix(), Optional(StrEq("hot"))); - - // Test that set method returns false since existing section prefix is hot. - EXPECT_FALSE(Foo->setSectionPrefix("hot")); - - // Set prefix from hot to unlikely. - Foo->setSectionPrefix("unlikely"); - EXPECT_THAT(Foo->getSectionPrefix(), Optional(StrEq("unlikely"))); - - // Set prefix to empty is the same as clear. - Foo->setSectionPrefix(""); - // Test that section prefix is cleared. - EXPECT_THAT(Foo->getSectionPrefix(), Eq(std::nullopt)); - - GlobalVariable *Bar = M->getGlobalVariable("bar"); - - // Initial section prefix is empty. - ASSERT_NE(Bar, nullptr); - ASSERT_THAT(Bar->getSectionPrefix(), Eq(std::nullopt)); - - // Test that set method returns false since Bar doesn't have prefix metadata. - EXPECT_FALSE(Bar->setSectionPrefix("")); - - // Set from empty to hot. - EXPECT_TRUE(Bar->setSectionPrefix("hot")); - EXPECT_THAT(Bar->getSectionPrefix(), Optional(StrEq("hot"))); - - // Test that set method returns true and section prefix is cleared. - EXPECT_TRUE(Bar->setSectionPrefix("")); - EXPECT_THAT(Bar->getSectionPrefix(), Eq(std::nullopt)); -} -} // namespace _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits