https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60712
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |missed-optimization Last reconfirmed|2014-03-31 00:00:00 |2020-2-28 CC| |msebor at gcc dot gnu.org Known to fail| |10.0, 4.8.5, 4.9.4, 5.4.0, | |6.4.0, 7.3.0, 8.3.0, 9.1.0 --- Comment #4 from Martin Sebor <msebor at gcc dot gnu.org> --- No change in GCC 10: $ cat pr60712.c && gcc -O3 -S -Wall -fdump-tree-optimized=/dev/stdout pr60712.c void sum(int *restrict a, int *restrict b) { *a = 0; for (int i=0; i<100; i++) *a += *b; } int *global_a, *global_b; void bug_when_inline() { sum(global_a, global_b); } void bug_when_local_variable() { int* restrict a = global_a; int* restrict b = global_b; *a = 0; for (int i=0; i<100; i++) *a += *b; } ;; Function sum (sum, funcdef_no=0, decl_uid=1931, cgraph_uid=1, symbol_order=0) sum (int * restrict a, int * restrict b) { int _2; int _13; <bb 2> [local count: 10737416]: _2 = *b_9(D); _13 = _2 * 100; *a_7(D) = _13; return; } ;; Function bug_when_inline (bug_when_inline, funcdef_no=1, decl_uid=1939, cgraph_uid=2, symbol_order=3) bug_when_inline () { int * global_b.0_1; int * global_a.1_2; int _5; int _12; <bb 2> [local count: 10737416]: global_b.0_1 = global_b; global_a.1_2 = global_a; _5 = *global_b.0_1; _12 = _5 * 100; *global_a.1_2 = _12; return; } ;; Function bug_when_local_variable (bug_when_local_variable, funcdef_no=2, decl_uid=1941, cgraph_uid=3, symbol_order=4) Removing basic block 5 bug_when_local_variable () { int * restrict b; int * restrict a; int _2; int _3; unsigned int ivtmp_4; unsigned int ivtmp_5; int prephitmp_15; <bb 2> [local count: 10737416]: a_7 = global_a; b_8 = global_b; *a_7 = 0; <bb 3> [local count: 1063004409]: # prephitmp_15 = PHI <0(2), _3(3)> # ivtmp_5 = PHI <100(2), ivtmp_4(3)> _2 = *b_8; _3 = _2 + prephitmp_15; *a_7 = _3; ivtmp_4 = ivtmp_5 + 4294967295; if (ivtmp_4 != 0) goto <bb 3>; [98.99%] else goto <bb 4>; [1.01%] <bb 4> [local count: 10737416]: return; }