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)
{
:
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?