Fix unaligned load with small memcpy on the ARM
authorEric Botcazou <ebotcazou@gcc.gnu.org>
Fri, 13 Mar 2020 08:16:29 +0000 (09:16 +0100)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Fri, 13 Mar 2020 08:21:42 +0000 (09:21 +0100)
commit82f620e2ba4c440c5e89bb1f73d10a11ed0f2eb4
tree7aebe15ddd0a4439c4897b7cabb05a32fe6e796a
parent54e69cb00da0b50e4fa228a0617e4e8713bbc998
Fix unaligned load with small memcpy on the ARM

store_integral_bit_field is ready to handle BLKmode fields, there is
even a subtlety with their handling on big-endian targets, see e.g.
PR middle-end/50325, but not if they are unaligned, so the fix is
simply to call extract_bit_field for them in order to generate an
unaligned load.  As a bonus, this subsumes  the big-endian specific
path that was added under PR middle-end/50325.

PR middle-end/92071
* expmed.c (store_integral_bit_field): For fields larger than a
word, call extract_bit_field on the value if the mode is BLKmode.
Remove specific path for big-endian targets and tidy things up a
little bit.
gcc/ChangeLog
gcc/expmed.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/20200313-1.c [new file with mode: 0644]