[Bug c/113106] Missing CSE with cast to volatile

2023-12-21 Thread ubizjak at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113106 --- Comment #5 from Uroš Bizjak --- The issue in comment #2 happens in a couple of places when compiling linux kernel (with named address spaces enabled). However, the issue is not specific to named AS, I was just more attentive to moves from %g

[Bug c/113106] Missing CSE with cast to volatile

2023-12-21 Thread ubizjak at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113106 --- Comment #4 from Uroš Bizjak --- (In reply to Richard Biener from comment #3) > The situation with address-spaces isn't valid as we need to preserve the > second load because it's volatile. I think we simply refuse to combine > volatile load

[Bug c/113106] Missing CSE with cast to volatile

2023-12-21 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113106 Richard Biener changed: What|Removed |Added CC||rguenth at gcc dot gnu.org --- Comment

[Bug c/113106] Missing CSE with cast to volatile

2023-12-21 Thread ubizjak at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113106 --- Comment #2 from Uroš Bizjak --- For reference, the same optimization should be applied with address spaces: --cut here-- int __seg_gs b; int bar(void) { return *(volatile __seg_gs int *) &b + b; } --cut here-- the above testcase current

[Bug c/113106] Missing CSE with cast to volatile

2023-12-21 Thread ubizjak at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113106 --- Comment #1 from Uroš Bizjak --- Perhaps related, --cut here-- int a; int foo(void) { return *(volatile int *) &a + *(volatile int *) &a; } --cut here-- compiles with -O2 to: movla(%rip), %eax movla(%rip), %edx