aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust
diff options
context:
space:
mode:
authorTamar Christina <tamar.christina@arm.com>2022-12-12 15:20:30 +0000
committerTamar Christina <tamar.christina@arm.com>2022-12-12 15:20:30 +0000
commit594264e9bcb592b8edc4b50b5d9be5eb34c1d6d7 (patch)
tree7578c29ad6b5c26a409c211e96ffbc00c517ca27 /gcc/rust
parent17ae956c0fa6baac3d22764019d5dd5ebf5c2b11 (diff)
downloadgcc-594264e9bcb592b8edc4b50b5d9be5eb34c1d6d7.zip
gcc-594264e9bcb592b8edc4b50b5d9be5eb34c1d6d7.tar.gz
gcc-594264e9bcb592b8edc4b50b5d9be5eb34c1d6d7.tar.bz2
AArch64: Fix vector re-interpretation between partial SIMD modes
While writing a patch series I started getting incorrect codegen out from VEC_PERM on partial struct types. It turns out that this was happening because the TARGET_CAN_CHANGE_MODE_CLASS implementation has a slight bug in it. The hook only checked for SIMD to Partial but never Partial to SIMD. This resulted in incorrect subregs to be generated from the fallback code in VEC_PERM_EXPR expansions. I have unfortunately not been able to trigger it using a standalone testcase as the mid-end optimizes away the permute every time I try to describe a permute that would result in the bug. The patch now rejects any conversion of partial SIMD struct types, unless they are both partial structures of the same number of registers or one is a SIMD type who's size is less than 8 bytes. gcc/ChangeLog: * config/aarch64/aarch64.cc (aarch64_can_change_mode_class): Restrict conversions between partial struct types properly.
Diffstat (limited to 'gcc/rust')
0 files changed, 0 insertions, 0 deletions