diff options
author | Simon Tatham <simon.tatham@arm.com> | 2025-10-22 09:09:40 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-10-22 09:09:40 +0100 |
commit | f36f2bff843c2bdf388189f0fd39fe3512070e1d (patch) | |
tree | 95907ec1e397c3160d534c9b7eb994ed4b1abcbe /llvm/lib/CodeGen/LiveDebugValues/LiveDebugValues.cpp | |
parent | 3656f6f22652b01eb13fc2f39afcf36396d64c4f (diff) | |
download | llvm-f36f2bff843c2bdf388189f0fd39fe3512070e1d.zip llvm-f36f2bff843c2bdf388189f0fd39fe3512070e1d.tar.gz llvm-f36f2bff843c2bdf388189f0fd39fe3512070e1d.tar.bz2 |
[ARM][MVE] Invalid tail predication in LowOverheadLoop pass (#163941)
When a loop is converted into a low-overhead loop using tail predication
via FPSCR.LTPSIZE, the MQPRCopy pseudo-instruction is expanded into
either two VMOVD or a single MVE_VORR, depending on whether the values
written to the lanes with a 'false' predicate matter. (MVE_VORR uses the
ambient LTPSIZE predicate, so it won't write those lanes at all; the
double VMOVD is slower but gets them right.)
This check was done based on whether the output of the MQPRCopy is live
coming out of the loop. But it missed a case where the live-out value is
not _itself_ an MQPRCopy, but is a predicated operation taking its false
lanes from an MQPRCopy.
Fixes #162644, and adds a new MIR test case derived from the reproducer
in that bug.
Diffstat (limited to 'llvm/lib/CodeGen/LiveDebugValues/LiveDebugValues.cpp')
0 files changed, 0 insertions, 0 deletions