diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2024-07-26 22:04:10 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2024-07-26 22:04:10 +0000 |
| commit | ac9a064cb179f3425b310fa2847f8764ac970a4d (patch) | |
| tree | 6f945cdaa68c2b4c688dcf9fec4f922d35f4d1a4 /llvm/lib/CodeGen/StackFrameLayoutAnalysisPass.cpp | |
| parent | 4df029cc74e5ec124f14a5682e44999ce4f086df (diff) | |
Diffstat (limited to 'llvm/lib/CodeGen/StackFrameLayoutAnalysisPass.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/StackFrameLayoutAnalysisPass.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/llvm/lib/CodeGen/StackFrameLayoutAnalysisPass.cpp b/llvm/lib/CodeGen/StackFrameLayoutAnalysisPass.cpp index 5d3903ed84ce..940aecd1cb36 100644 --- a/llvm/lib/CodeGen/StackFrameLayoutAnalysisPass.cpp +++ b/llvm/lib/CodeGen/StackFrameLayoutAnalysisPass.cpp @@ -62,11 +62,14 @@ struct StackFrameLayoutAnalysisPass : public MachineFunctionPass { int Align; int Offset; SlotType SlotTy; + bool Scalable; SlotData(const MachineFrameInfo &MFI, const int ValOffset, const int Idx) : Slot(Idx), Size(MFI.getObjectSize(Idx)), Align(MFI.getObjectAlign(Idx).value()), - Offset(MFI.getObjectOffset(Idx) - ValOffset), SlotTy(Invalid) { + Offset(MFI.getObjectOffset(Idx) - ValOffset), SlotTy(Invalid), + Scalable(false) { + Scalable = MFI.getStackID(Idx) == TargetStackID::ScalableVector; if (MFI.isSpillSlotObjectIndex(Idx)) SlotTy = SlotType::Spill; else if (Idx == MFI.getStackProtectorIndex()) @@ -75,9 +78,12 @@ struct StackFrameLayoutAnalysisPass : public MachineFunctionPass { SlotTy = SlotType::Variable; } - // we use this to sort in reverse order, so that the layout is displayed - // correctly - bool operator<(const SlotData &Rhs) const { return Offset > Rhs.Offset; } + // We use this to sort in reverse order, so that the layout is displayed + // correctly. Scalable slots are sorted to the end of the list. + bool operator<(const SlotData &Rhs) const { + return std::make_tuple(!Scalable, Offset) > + std::make_tuple(!Rhs.Scalable, Rhs.Offset); + } }; StackFrameLayoutAnalysisPass() : MachineFunctionPass(ID) {} @@ -153,7 +159,7 @@ struct StackFrameLayoutAnalysisPass : public MachineFunctionPass { Rem << Prefix << ore::NV("Offset", D.Offset) << "], Type: " << ore::NV("Type", getTypeString(D.SlotTy)) << ", Align: " << ore::NV("Align", D.Align) - << ", Size: " << ore::NV("Size", D.Size); + << ", Size: " << ore::NV("Size", ElementCount::get(D.Size, D.Scalable)); } void emitSourceLocRemark(const MachineFunction &MF, const DILocalVariable *N, |
