https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90676
Bug ID: 90676 Summary: ambiguous GIMPLE after store merging Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: msebor at gcc dot gnu.org Target Milestone: --- Some stores do not show up in tree dumps. It looks like the problem is the result of store merging coalescing multiple trailing zero stores. For example, in the code below, even though each function writes different numbers of bytes, they all look the same in the optimized GIMPLE. Very confusing! $ cat a.c && gcc -O2 -S -Wall -Wextra -fdump-tree-optimized=/dev/stdout a.c char a[8]; void f2 (void) { a[0] = 1; a[1] = 0; } void f4 (void) { a[0] = 1; a[1] = 0; a[2] = 0; a[3] = 0; } void f8 (void) { a[0] = 1; for (int i = 1; i != 8; ++i) a[i] = 0; } ;; Function f2 (f2, funcdef_no=0, decl_uid=1907, cgraph_uid=1, symbol_order=1) f2 () { <bb 2> [local count: 1073741824]: MEM[(char *)&a] = 1; return; } ;; Function f4 (f4, funcdef_no=1, decl_uid=1910, cgraph_uid=2, symbol_order=2) f4 () { <bb 2> [local count: 1073741824]: MEM[(char *)&a] = 1; return; } ;; Function f8 (f8, funcdef_no=2, decl_uid=1913, cgraph_uid=3, symbol_order=3) f8 () { <bb 2> [local count: 134217728]: MEM[(char *)&a] = 1; return; }