[llvm] 3aa41e0 - [X86,MC] Remove two getPrevNode
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 10 16:23:18 PDT 2024
Author: Fangrui Song
Date: 2024-06-10T16:23:13-07:00
New Revision: 3aa41e016a7efc2cca1926700cfbd8ddc05e4274
URL: https://github.com/llvm/llvm-project/commit/3aa41e016a7efc2cca1926700cfbd8ddc05e4274
DIFF: https://github.com/llvm/llvm-project/commit/3aa41e016a7efc2cca1926700cfbd8ddc05e4274.diff
LOG: [X86,MC] Remove two getPrevNode
Make it more feasible to replace the fragment reprsentation, which might
yield a large peak RSS win.
Added:
Modified:
llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
index 472f34a4efdb4..30f22cd322fec 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
@@ -406,16 +406,10 @@ static bool
isRightAfterData(MCFragment *CurrentFragment,
const std::pair<MCFragment *, size_t> &PrevInstPosition) {
MCFragment *F = CurrentFragment;
- // Empty data fragments may be created to prevent further data being
- // added into the previous fragment, we need to skip them since they
- // have no contents.
- for (; isa_and_nonnull<MCDataFragment>(F); F = F->getPrevNode())
- if (cast<MCDataFragment>(F)->getContents().size() != 0)
- break;
-
// Since data is always emitted into a DataFragment, our check strategy is
// simple here.
// - If the fragment is a DataFragment
+ // - If it's empty (section start or data after align), return false.
// - If it's not the fragment where the previous instruction is,
// returns true.
// - If it's the fragment holding the previous instruction but its
@@ -424,8 +418,9 @@ isRightAfterData(MCFragment *CurrentFragment,
// - Otherwise returns false.
// - If the fragment is not a DataFragment, returns false.
if (auto *DF = dyn_cast_or_null<MCDataFragment>(F))
- return DF != PrevInstPosition.first ||
- DF->getContents().size() != PrevInstPosition.second;
+ return DF->getContents().size() &&
+ (DF != PrevInstPosition.first ||
+ DF->getContents().size() != PrevInstPosition.second);
return false;
}
@@ -526,7 +521,7 @@ void X86AsmBackend::emitInstructionBegin(MCObjectStreamer &OS,
if (!CanPadInst)
return;
- if (PendingBA && OS.getCurrentFragment()->getPrevNode() == PendingBA) {
+ if (PendingBA && PendingBA->getNextNode() == OS.getCurrentFragment()) {
// Macro fusion actually happens and there is no other fragment inserted
// after the previous instruction.
//
More information about the llvm-commits
mailing list