[AArch64][SVE] Only fold frame indexes referencing SVE objects into SVE loads/stores
authorBradley Smith <bradley.smith@arm.com>
Tue, 26 Apr 2022 12:19:32 +0000 (12:19 +0000)
committerBradley Smith <bradley.smith@arm.com>
Tue, 3 May 2022 09:48:13 +0000 (09:48 +0000)
commit96bbd359edbf8582fc2d29b57d7e65e54e98709b
treeea4806928d04e6686e4c28725dbed3ae0bc95331
parentf496a0eba4f7983257069b0bb2c2fb4463106b49
[AArch64][SVE] Only fold frame indexes referencing SVE objects into SVE loads/stores

Currently we always fold frame indexes into SVE load/store instructions,
however these instructions can only encode VL scaled offests. This means
that when we are accessing a fixed length stack object with these
instructions, the folded in frame index gets pulled back out during frame
lowering. This can cause issues when we have no spare registers and no
emergency spill slot.

Rather than causing issues like this, don't fold in frame indexes that
reference fixed length objects.

Fixes: #55041

Differential Revision: https://reviews.llvm.org/D124457
llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
llvm/test/CodeGen/AArch64/sve-fixed-length-frame-offests-crash.ll [new file with mode: 0644]
llvm/test/CodeGen/AArch64/sve-fixed-length-frame-offests.ll [new file with mode: 0644]