[AArch64][SVE] Fix CFA calculation in presence of SVE objects.
authorSander de Smalen <sander.desmalen@arm.com>
Tue, 4 Aug 2020 09:58:47 +0000 (10:58 +0100)
committerSander de Smalen <sander.desmalen@arm.com>
Tue, 4 Aug 2020 10:47:06 +0000 (11:47 +0100)
commitfd6584a22043b254a323635c142b28ce80ae5b5b
treede8b1f793e7daa5436ac1b4ffc34e472c9a99b6b
parent79b44a4d470041acf202027054ba86e935d86aa1
[AArch64][SVE] Fix CFA calculation in presence of SVE objects.

The CFA is calculated as (SP/FP + offset), but when there are
SVE objects on the stack the SP offset is partly scalable and
should instead be expressed as the DWARF expression:

     SP + offset + scalable_offset * VG

where VG is the Vector Granule register, containing the
number of 64bits 'granules' in a scalable vector.

Reviewed By: efriedma

Differential Revision: https://reviews.llvm.org/D84043
llvm/include/llvm/MC/MCDwarf.h
llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
llvm/lib/Target/AArch64/AArch64FrameLowering.h
llvm/lib/Target/AArch64/AArch64RegisterInfo.td
llvm/lib/Target/AArch64/AArch64StackOffset.h
llvm/test/CodeGen/AArch64/framelayout-sve.mir
llvm/test/CodeGen/AArch64/sve-trunc.ll