[Bug tree-optimization/95295] g++ produces incorrect code with -O3 for loops
vsevolod.livinskij at frtk dot ru
gcc-bugzilla@gcc.gnu.org
Wed May 27 01:29:59 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95295
--- Comment #6 from Vsevolod Livinskiy <vsevolod.livinskij at frtk dot ru> ---
Thank you for such a quick fix!
Sorry about duplicates, I saw different assert messages and thought that they
were different bugs.
I still can see ICE in hoist_memory_references (bug 95283) on trunk. I've
attached the reproducer below.
Please let me know if it is a different bug, and I'll create another bug
report.
Error:
>$ g++ -c -O3 func.cpp
during GIMPLE pass: lim
func.cpp: In function ‘void test()’:
func.cpp:5:6: internal compiler error: in hoist_memory_references, at
tree-ssa-loop-im.c:2615
5 | void test() {
| ^~~~
0x82318c hoist_memory_references
gcc_src/gcc/tree-ssa-loop-im.c:2615
0x82318c store_motion_loop
gcc_src/gcc/tree-ssa-loop-im.c:2912
0x123853a do_store_motion
gcc_src/gcc/tree-ssa-loop-im.c:2937
0x123853a tree_ssa_lim
gcc_src/gcc/tree-ssa-loop-im.c:3156
0x123853a execute
gcc_src/gcc/tree-ssa-loop-im.c:3206
Reproducer:
extern short var_15, var_20;
extern int var_18, var_21, var_23;
extern bool arr_2[];
extern long arr_3[];
void test() {
var_20 = 1;
for (int a = 0; a < 12; a += 2)
for (short b = 0; b < 8; b += 2) {
arr_2[b] = var_21 = var_18 ? var_15 : 0;
arr_3[b] = 8569;
}
var_23 = -1096835496;
}
GCC version:
11.0.0 (adad99eb906164af7d2b398ad7e430aebe3adeb4)
More information about the Gcc-bugs
mailing list