https://gcc.gnu.org/bugzilla/show_bug.cgi?id=35363
Andrew Pinski changed:
What|Removed |Added
Resolution|--- |FIXED
Status|NEW
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=35363
--- Comment #8 from Andrew Pinski ---
There are two issues here, one is SLOW_BYTE_ACCESS and the second is the
lowering of bit-fields. I am going to fix the lower part for GCC 9. The
SLOW_BTYE_ACCESS was being looked at by someone else in the r
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35363
davidxl changed:
What|Removed |Added
CC||xinliangli at gmail dot com
Version|
--- Comment #6 from rguenth at gcc dot gnu dot org 2008-02-25 18:54 ---
The IL after MEM_REF lowering looks like
bar ()
{
int D.1193;
unsigned int D.1192;
unsigned int D.1191;
unsigned int D.1190;
int D.1189;
D.1189 = MEM ;
D.1190 = (unsigned int) D.1189;
D.1191 = D.119
--- Comment #5 from rguenth at gcc dot gnu dot org 2008-02-25 18:51 ---
With MEM_REF I get on i686
foo:
movla, %eax
pushl %ebp
movl%esp, %ebp
popl%ebp
andl$-33554240, %eax
orl $2074, %eax
movl%eax, a
--- Comment #4 from rguenth at gcc dot gnu dot org 2008-02-25 18:49 ---
So, the same code should be generated for
union {
struct {
int b1: 3;
int b2: 3;
int b3: 2;
int b4: 17;
}a;
int b;
} a;
void foo()
{
a.a.b1 = 2;
a.a.b2 = 3;
a.a.b4 = 8;
}
void bar()
{
a.b = (a.b
--- Comment #3 from rguenth at gcc dot gnu dot org 2008-02-25 18:44 ---
I would expect the equivalent of
int tmp = a;
tmp &= 0x0030; // fix the mask to be correct, all bits of b3
tmp |= 2 | 3 | 8; // constant folded and properly shifted
a = tmp;
I still see three ORs for ppc64