This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/22141] [4.8/4.9/5 Regression] Missing optimization when storing structures
- From: "hariharan.gcc at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 02 Feb 2015 19:30:41 +0000
- Subject: [Bug middle-end/22141] [4.8/4.9/5 Regression] Missing optimization when storing structures
- Auto-submitted: auto-generated
- References: <bug-22141-4 at http dot gcc dot gnu dot org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=22141
hariharan.gcc at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |hariharan.gcc at gmail dot com
--- Comment #30 from hariharan.gcc at gmail dot com ---
I saw a related problem, this time with bitfields
$more bitfieldtest.c
typedef union {
struct {
unsigned int b1:1;
unsigned int b2:1;
unsigned int b3:1;
unsigned int b4:1;
unsigned int b5:1;
}fields;
unsigned int word;
} _t_bitfields;
void _const_populate_bits(_t_bitfields * data)
{
data->fields.b1 = 1;
data->fields.b2 = 0;
data->fields.b3 = 1;
data->fields.b4 = 1;
data->fields.b5 = 0;
}
At the end of tree stages, it looks like this
$more bitfieldtest.c.165t.optimized
;; Function _const_populate_bits (_const_populate_bits, funcdef_no=0,
decl_uid=1339, cgraph_uid=0)
_const_populate_bits (union _t_bitfields * data)
{
<bb 2>:
data_2(D)->fields.b1 = 1;
data_2(D)->fields.b2 = 0;
data_2(D)->fields.b3 = 1;
data_2(D)->fields.b4 = 1;
data_2(D)->fields.b5 = 0;
return;
}
Expand expands each one of the assignments in turn and some get combined later
on into ok-ish code. It would be nice to be able to combine all 5 assignments
into one.
Its kind of related to this PR, but is it sufficiently different to warrant a
separate PR for it?