This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/15184] [4.8/4.9/5 Regression] Direct access to byte inside word not working with -march=pentiumpro
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 15 Jan 2015 14:55:27 +0000
- Subject: [Bug target/15184] [4.8/4.9/5 Regression] Direct access to byte inside word not working with -march=pentiumpro
- Auto-submitted: auto-generated
- References: <bug-15184-4 at http dot gcc dot gnu dot org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=15184
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |thomas.preudhomme at arm dot com
--- Comment #28 from Richard Biener <rguenth at gcc dot gnu.org> ---
c.f. comment#24 and using bswap for this kind of value composition
gu (unsigned char c)
{
short unsigned int y.7_2;
signed short y.8_3;
signed short _4;
int _6;
int _7;
signed short _8;
signed short _9;
short unsigned int y.9_10;
<bb 2>:
y.7_2 = y;
y.8_3 = (signed short) y.7_2;
_4 = y.8_3 & 255;
_6 = (int) c_5(D);
_7 = _6 << 8;
_8 = (signed short) _7;
_9 = _4 | _8;
y.9_10 = (short unsigned int) _9;
y = y.9_10;
return;
this could be
BIT_FIELD_REF <y, ....> = c_5;
or if not both stores and loads are seen at least
y.7_2 = y;
y.9_10 = BIT_FIELD_EXPR <y.7_2, ..., c_5(D)>;
y = y.9_10;
with the new BIT_FIELD_EXPR code I proposed some time ago for bitfield
insertion.
Technically not limited to byte offsets of course, so maybe not a 100%
fit for the bswap pass. And of course the BIT_FIELD_EXPR would still
need to be expanded properly (extv/insv support would fit naturally).
Without BIT_FIELD_EXPR the bswap pass could see if the final value
has a single use in a store and then still use a BIT_FIELD_REF on that.