[llvm] 58d16db - MCAssembler: Simplify relaxation of FT_Fill and FT_Org

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Sat Aug 23 20:33:13 PDT 2025


Author: Fangrui Song
Date: 2025-08-23T20:33:07-07:00
New Revision: 58d16db8b5d2aa98ed1e5b5a5d14b9ba7042f6d0

URL: https://github.com/llvm/llvm-project/commit/58d16db8b5d2aa98ed1e5b5a5d14b9ba7042f6d0
DIFF: https://github.com/llvm/llvm-project/commit/58d16db8b5d2aa98ed1e5b5a5d14b9ba7042f6d0.diff

LOG: MCAssembler: Simplify relaxation of FT_Fill and FT_Org

Added: 
    

Modified: 
    llvm/include/llvm/MC/MCSection.h
    llvm/lib/MC/MCAssembler.cpp
    llvm/test/MC/ELF/mc-dump.s

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/MC/MCSection.h b/llvm/include/llvm/MC/MCSection.h
index a1762fc337612..12389d623e588 100644
--- a/llvm/include/llvm/MC/MCSection.h
+++ b/llvm/include/llvm/MC/MCSection.h
@@ -307,7 +307,6 @@ class MCFillFragment : public MCFragment {
   uint64_t Value;
   /// The number of bytes to insert.
   const MCExpr &NumValues;
-  uint64_t Size = 0;
 
   /// Source location of the directive that this fragment was created for.
   SMLoc Loc;
@@ -321,8 +320,6 @@ class MCFillFragment : public MCFragment {
   uint64_t getValue() const { return Value; }
   uint8_t getValueSize() const { return ValueSize; }
   const MCExpr &getNumValues() const { return NumValues; }
-  uint64_t getSize() const { return Size; }
-  void setSize(uint64_t Value) { Size = Value; }
 
   SMLoc getLoc() const { return Loc; }
 
@@ -371,16 +368,12 @@ class MCOrgFragment : public MCFragment {
   /// Source location of the directive that this fragment was created for.
   SMLoc Loc;
 
-  uint64_t Size = 0;
-
 public:
   MCOrgFragment(const MCExpr &Offset, int8_t Value, SMLoc Loc)
       : MCFragment(FT_Org), Value(Value), Offset(&Offset), Loc(Loc) {}
 
   const MCExpr &getOffset() const { return *Offset; }
   uint8_t getValue() const { return Value; }
-  uint64_t getSize() const { return Size; }
-  void setSize(uint64_t Value) { Size = Value; }
 
   SMLoc getLoc() const { return Loc; }
 

diff  --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp
index 29a9fadbe2433..b1031d7822604 100644
--- a/llvm/lib/MC/MCAssembler.cpp
+++ b/llvm/lib/MC/MCAssembler.cpp
@@ -915,7 +915,7 @@ void MCAssembler::relaxDwarfCallFrameFragment(MCFragment &F) {
 }
 
 bool MCAssembler::relaxFragment(MCFragment &F) {
-  size_t Size = computeFragmentSize(F);
+  auto Size = computeFragmentSize(F);
   switch (F.getKind()) {
   default:
     return false;
@@ -943,20 +943,9 @@ bool MCAssembler::relaxFragment(MCFragment &F) {
     getContext().getCVContext().encodeDefRange(
         *this, static_cast<MCCVDefRangeFragment &>(F));
     break;
-  case MCFragment::FT_Fill: {
-    auto &FF = static_cast<MCFillFragment &>(F);
-    if (FF.getSize() == Size)
-      return false;
-    FF.setSize(Size);
-    return true;
-  }
-  case MCFragment::FT_Org: {
-    auto &FF = static_cast<MCOrgFragment &>(F);
-    if (FF.getSize() == Size)
-      return false;
-    FF.setSize(Size);
-    return true;
-  }
+  case MCFragment::FT_Fill:
+  case MCFragment::FT_Org:
+    return F.getNext()->Offset - F.Offset != Size;
   }
   return computeFragmentSize(F) != Size;
 }

diff  --git a/llvm/test/MC/ELF/mc-dump.s b/llvm/test/MC/ELF/mc-dump.s
index a590e1c3d9be4..51b3ff4774cf3 100644
--- a/llvm/test/MC/ELF/mc-dump.s
+++ b/llvm/test/MC/ELF/mc-dump.s
@@ -30,7 +30,7 @@
 # CHECK-NEXT:5 LEB Size:0+1 [15] Value:.Ltmp0-_start Signed:0
 #      CHECK:]
 
-# CHECK:  3 assembler         - Number of fixup evaluations for relaxation
+# CHECK:  2 assembler         - Number of fixup evaluations for relaxation
 # CHECK:  8 assembler         - Number of fixups
 
 # RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t -debug-only=mc-dump -save-temp-labels -g 2>&1 | FileCheck %s --check-prefix=CHECK2


        


More information about the llvm-commits mailing list