[llvm] d6ded91 - [Codegen] Change getSpillSize/getReloadSize to LocationSize. NFC (#82636)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Feb 25 08:23:01 PST 2024
Author: David Green
Date: 2024-02-25T16:22:57Z
New Revision: d6ded91121fa02837ef6c8c7f06d98ccf4a0fe16
URL: https://github.com/llvm/llvm-project/commit/d6ded91121fa02837ef6c8c7f06d98ccf4a0fe16
DIFF: https://github.com/llvm/llvm-project/commit/d6ded91121fa02837ef6c8c7f06d98ccf4a0fe16.diff
LOG: [Codegen] Change getSpillSize/getReloadSize to LocationSize. NFC (#82636)
This is a small part of #70452, attempting to take a small simpler part
of it in isolation to simplify what remains. It changes the getSpillSize,
getFoldedSpillSize, getRestoreSize and getFoldedRestoreSize methods to return
optional<LocationSize> instead of unsigned. The code is intended to be the
same, keeping the optional<> to specify when there was no size found, with some
minor adjustments to make sure that unknown (~UINT64_C(0)) sizes are handled
sensibly. Hopefully as more unsigned's are converted to LocationSize's the use
of ~UINT64_C(0) can be cleaned up too.
Added:
Modified:
llvm/include/llvm/CodeGen/MachineInstr.h
llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
llvm/lib/CodeGen/MachineInstr.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/MachineInstr.h b/llvm/include/llvm/CodeGen/MachineInstr.h
index 5bb4a67555222e..fcdd73d8b65fdd 100644
--- a/llvm/include/llvm/CodeGen/MachineInstr.h
+++ b/llvm/include/llvm/CodeGen/MachineInstr.h
@@ -20,6 +20,7 @@
#include "llvm/ADT/ilist.h"
#include "llvm/ADT/ilist_node.h"
#include "llvm/ADT/iterator_range.h"
+#include "llvm/Analysis/MemoryLocation.h"
#include "llvm/CodeGen/MachineMemOperand.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/TargetOpcodes.h"
@@ -1744,16 +1745,17 @@ class MachineInstr
bool allImplicitDefsAreDead() const;
/// Return a valid size if the instruction is a spill instruction.
- std::optional<unsigned> getSpillSize(const TargetInstrInfo *TII) const;
+ std::optional<LocationSize> getSpillSize(const TargetInstrInfo *TII) const;
/// Return a valid size if the instruction is a folded spill instruction.
- std::optional<unsigned> getFoldedSpillSize(const TargetInstrInfo *TII) const;
+ std::optional<LocationSize>
+ getFoldedSpillSize(const TargetInstrInfo *TII) const;
/// Return a valid size if the instruction is a restore instruction.
- std::optional<unsigned> getRestoreSize(const TargetInstrInfo *TII) const;
+ std::optional<LocationSize> getRestoreSize(const TargetInstrInfo *TII) const;
/// Return a valid size if the instruction is a folded restore instruction.
- std::optional<unsigned>
+ std::optional<LocationSize>
getFoldedRestoreSize(const TargetInstrInfo *TII) const;
/// Copy implicit register operands from specified
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index e89a1c26c23e6b..0efe7a0e733672 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -1106,25 +1106,21 @@ static void emitComments(const MachineInstr &MI, raw_ostream &CommentOS) {
// We assume a single instruction only has a spill or reload, not
// both.
- std::optional<unsigned> Size;
+ std::optional<LocationSize> Size;
if ((Size = MI.getRestoreSize(TII))) {
- CommentOS << *Size << "-byte Reload\n";
+ CommentOS << Size->getValue() << "-byte Reload\n";
} else if ((Size = MI.getFoldedRestoreSize(TII))) {
- if (*Size) {
- if (*Size == unsigned(MemoryLocation::UnknownSize))
- CommentOS << "Unknown-size Folded Reload\n";
- else
- CommentOS << *Size << "-byte Folded Reload\n";
- }
+ if (!Size->hasValue())
+ CommentOS << "Unknown-size Folded Reload\n";
+ else if (Size->getValue())
+ CommentOS << Size->getValue() << "-byte Folded Reload\n";
} else if ((Size = MI.getSpillSize(TII))) {
- CommentOS << *Size << "-byte Spill\n";
+ CommentOS << Size->getValue() << "-byte Spill\n";
} else if ((Size = MI.getFoldedSpillSize(TII))) {
- if (*Size) {
- if (*Size == unsigned(MemoryLocation::UnknownSize))
- CommentOS << "Unknown-size Folded Spill\n";
- else
- CommentOS << *Size << "-byte Folded Spill\n";
- }
+ if (!Size->hasValue())
+ CommentOS << "Unknown-size Folded Spill\n";
+ else if (Size->getValue())
+ CommentOS << Size->getValue() << "-byte Folded Spill\n";
}
// Check for spill-induced copies
diff --git a/llvm/lib/CodeGen/MachineInstr.cpp b/llvm/lib/CodeGen/MachineInstr.cpp
index efbcc839f22d0c..6654e1d6ceceea 100644
--- a/llvm/lib/CodeGen/MachineInstr.cpp
+++ b/llvm/lib/CodeGen/MachineInstr.cpp
@@ -2354,29 +2354,35 @@ void MachineInstr::changeDebugValuesDefReg(Register Reg) {
using MMOList = SmallVector<const MachineMemOperand *, 2>;
-static unsigned getSpillSlotSize(const MMOList &Accesses,
- const MachineFrameInfo &MFI) {
- unsigned Size = 0;
+static LocationSize getSpillSlotSize(const MMOList &Accesses,
+ const MachineFrameInfo &MFI) {
+ uint64_t Size = 0;
for (const auto *A : Accesses)
if (MFI.isSpillSlotObjectIndex(
cast<FixedStackPseudoSourceValue>(A->getPseudoValue())
- ->getFrameIndex()))
- Size += A->getSize();
+ ->getFrameIndex())) {
+ uint64_t S = A->getSize();
+ if (S == ~UINT64_C(0))
+ return LocationSize::beforeOrAfterPointer();
+ Size += S;
+ }
return Size;
}
-std::optional<unsigned>
+std::optional<LocationSize>
MachineInstr::getSpillSize(const TargetInstrInfo *TII) const {
int FI;
if (TII->isStoreToStackSlotPostFE(*this, FI)) {
const MachineFrameInfo &MFI = getMF()->getFrameInfo();
- if (MFI.isSpillSlotObjectIndex(FI))
- return (*memoperands_begin())->getSize();
+ if (MFI.isSpillSlotObjectIndex(FI)) {
+ uint64_t Size = (*memoperands_begin())->getSize();
+ return Size == ~UINT64_C(0) ? LocationSize::beforeOrAfterPointer() : Size;
+ }
}
return std::nullopt;
}
-std::optional<unsigned>
+std::optional<LocationSize>
MachineInstr::getFoldedSpillSize(const TargetInstrInfo *TII) const {
MMOList Accesses;
if (TII->hasStoreToStackSlot(*this, Accesses))
@@ -2384,18 +2390,20 @@ MachineInstr::getFoldedSpillSize(const TargetInstrInfo *TII) const {
return std::nullopt;
}
-std::optional<unsigned>
+std::optional<LocationSize>
MachineInstr::getRestoreSize(const TargetInstrInfo *TII) const {
int FI;
if (TII->isLoadFromStackSlotPostFE(*this, FI)) {
const MachineFrameInfo &MFI = getMF()->getFrameInfo();
- if (MFI.isSpillSlotObjectIndex(FI))
- return (*memoperands_begin())->getSize();
+ if (MFI.isSpillSlotObjectIndex(FI)) {
+ uint64_t Size = (*memoperands_begin())->getSize();
+ return Size == ~UINT64_C(0) ? LocationSize::beforeOrAfterPointer() : Size;
+ }
}
return std::nullopt;
}
-std::optional<unsigned>
+std::optional<LocationSize>
MachineInstr::getFoldedRestoreSize(const TargetInstrInfo *TII) const {
MMOList Accesses;
if (TII->hasLoadFromStackSlot(*this, Accesses))
More information about the llvm-commits
mailing list