[X86] Return src/dest register from stack spill/restore recogniser
authorJeremy Morse <jeremy.morse@sony.com>
Fri, 9 Jul 2021 16:49:46 +0000 (17:49 +0100)
committerJeremy Morse <jeremy.morse@sony.com>
Fri, 9 Jul 2021 17:12:30 +0000 (18:12 +0100)
commit30cce54dadfcf231654dfaf3a14c27aa07d61aea
treec994ad36a8f9ce7772ac10ae6ee977089dcee15f
parent48de8bb0d37573cd18e1158c9fd95afafcf4e440
[X86] Return src/dest register from stack spill/restore recogniser

LLVM provides target hooks to recognise stack spill and restore
instructions, such as isLoadFromStackSlot, and it also provides post frame
elimination versions such as isLoadFromStackSlotPostFE. These are supposed
to return the store-source and load-destination registers; unfortunately on
X86, the PostFE recognisers just return "1", apparently to signify "yes
it's a spill/load". This patch alters the hooks to correctly return the
store-source and load-destination registers:

This is really useful for debug-info as we it helps follow variable values
as they move on/off the stack. There should be no codegen changes: the only
other users of these PostFE target hooks are MachineInstr::getRestoreSize
and MachineInstr::getSpillSize, which don't attempt to interpret the
returned register location.

While we're here, delete the (InstrRef) LiveDebugValues heuristic that
tries to find the spill source register by looking for a killed reg -- we
should be able to rely on the target hooks for that. This involves
temporarily turning off a n InstrRef LivedDebugValues test on aarch64
(patch to re-enable it is in D104521).

Differential Revision: https://reviews.llvm.org/D105428
llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp
llvm/lib/Target/X86/X86InstrInfo.cpp
llvm/test/CodeGen/AArch64/live-debugvalues-sve.mir
llvm/test/DebugInfo/MIR/InstrRef/follow-spill-of-live-value.mir [new file with mode: 0644]