diff options
author | Christophe Lyon <christophe.lyon@linaro.org> | 2024-11-24 18:08:48 +0000 |
---|---|---|
committer | Christophe Lyon <christophe.lyon@linaro.org> | 2024-12-13 14:25:36 +0000 |
commit | 2089009210a1774c37e527ead8bbcaaa1a7a9d2d (patch) | |
tree | fee4abba8f1270a49d40412531dbce5be7829c44 /gcc/fortran/trans-expr.cc | |
parent | 4f4e13dd235bba9c706948a3ecb3e530dd68aad1 (diff) | |
download | gcc-2089009210a1774c37e527ead8bbcaaa1a7a9d2d.zip gcc-2089009210a1774c37e527ead8bbcaaa1a7a9d2d.tar.gz gcc-2089009210a1774c37e527ead8bbcaaa1a7a9d2d.tar.bz2 |
arm: [MVE intrinsics] Fix support for predicate constants [PR target/114801]
In this PR, we have to handle a case where MVE predicates are supplied
as a const_int, where individual predicates have illegal boolean
values (such as 0xc for a 4-bit boolean predicate). To avoid the ICE,
fix the constant (any non-zero value is converted to all 1s) and emit
a warning.
On MVE, V8BI and V4BI multi-bit masks are interpreted byte-by-byte at
instruction level, but end-users should describe lanes rather than
bytes (so all bytes of a true-predicated lane should be '1'), see the
section on MVE intrinsics in the Arm ACLE specification.
Since force_lowpart_subreg cannot handle const_int (because they have VOID mode),
use gen_lowpart on them, force_lowpart_subreg otherwise.
2024-11-20 Christophe Lyon <christophe.lyon@linaro.org>
Jakub Jelinek <jakub@redhat.com>
PR target/114801
gcc/
* config/arm/arm-mve-builtins.cc
(function_expander::add_input_operand): Handle CONST_INT
predicates.
gcc/testsuite/
* gcc.target/arm/mve/pr108443.c: Update predicate constant.
* gcc.target/arm/mve/pr108443-run.c: Likewise.
* gcc.target/arm/mve/pr114801.c: New test.
Diffstat (limited to 'gcc/fortran/trans-expr.cc')
0 files changed, 0 insertions, 0 deletions