[Bug middle-end/71509] Bitfield causes load hit store with larger store than load
luoxhu at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Feb 10 06:56:00 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71509
luoxhu at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |luoxhu at gcc dot gnu.org
--- Comment #11 from luoxhu at gcc dot gnu.org ---
(In reply to Anton Blanchard from comment #4)
> Created attachment 39683 [details]
> Another bitop LHS test case
>
> Here's another issue found in the Linux kernel. Seems like this should be a
> single lwz/stw since the union of counter and the bitops completely overlap.
>
> The half word store followed by word load is going to prevent it from store
> forwarding.
>
> 0000000000000000 <set_page_slub_counters>:
> 0: 00 00 03 81 lwz r8,0(r3)
> 4: 20 00 89 78 clrldi r9,r4,32
> 8: c2 0f 2a 79 rldicl r10,r9,33,31
> c: 00 f8 48 51 rlwimi r8,r10,31,0,0
> 10: 5e 00 2a 55 rlwinm r10,r9,0,1,15
> 14: 00 00 03 91 stw r8,0(r3)
> 18: 00 00 83 b0 sth r4,0(r3)
> 1c: 00 00 42 60 ori r2,r2,0
> 20: 00 00 23 81 lwz r9,0(r3)
> 24: 00 04 29 55 rlwinm r9,r9,0,16,0
> 28: 78 53 29 7d or r9,r9,r10
> 2c: 00 00 23 91 stw r9,0(r3)
> 30: 20 00 80 4e blr
This case only is fixed on latest gcc 10 already (issues in case
__skb_decr_checksum_unnecessary from Anton Blanchard and test2 from Nicholas
Piggin still exist).
gcc version 10.0.1 20200210
objdump -d set_page_slub_counters.o
set_page_slub_counters.o: file format elf64-powerpcle
Disassembly of section .text:
0000000000000000 <set_page_slub_counters>:
0: 22 84 89 78 rldicl r9,r4,48,48
4: 00 00 83 b0 sth r4,0(r3)
8: 02 00 23 b1 sth r9,2(r3)
c: 20 00 80 4e blr
More information about the Gcc-bugs
mailing list