[Bug tree-optimization/71509] New: Bitfield causes load hit store with larger store than load
anton at samba dot org
gcc-bugzilla@gcc.gnu.org
Sun Jun 12 23:12:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71509
Bug ID: 71509
Summary: Bitfield causes load hit store with larger store than
load
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: anton at samba dot org
Target Milestone: ---
I notice a nasty load hit store in the following test case built with -O2 on
ppc64le. The load is larger than the store, which means on many CPUs the store
cannot be forwarded and it has to wait until it completes in the cache.
struct sk_buff a;
struct sk_buff {
long blah;
char csum_level:2;
};
void __skb_decr_checksum_unnecessary(struct sk_buff *p1)
{
p1->csum_level--;
}
void func(void);
void tcp_v4_rcv(void)
{
struct sk_buff *b = &a;
func();
__skb_decr_checksum_unnecessary(b);
func();
__skb_decr_checksum_unnecessary(b);
}
We end up with this odd situation where we do both a byte and a double
word load:
# objdump -d testcase.o | grep r31
58: 08 00 5f e9 ld r10,8(r31)
5c: 08 00 3f 89 lbz r9,8(r31)
70: 08 00 3f 99 stb r9,8(r31)
7c: 08 00 5f e9 ld r10,8(r31)
84: 08 00 3f 89 lbz r9,8(r31)
a0: 08 00 3f 99 stb r9,8(r31)
More information about the Gcc-bugs
mailing list