Take the following example from PR 21591: struct a { int length; int a1[256]; };
struct a *malloc1(__SIZE_TYPE__) __attribute__((malloc)); void free(void*); void f(void) { struct a *a = malloc1(sizeof(struct a)); struct a *b = malloc1(sizeof(struct a)); struct a *c = malloc1(sizeof(struct a)); int i; for (i = 0; i < 256; i++) { b->a1[i] = i; c->a1[i] = i; } for (i = 0; i < 256; i++) { a->a1[i] = b->a1[i] + c->a1[i]; } free(a); free(b); free(c); } ---- In .alias1: i.0_18 = i_1; # HEAP.7_46 = V_MAY_DEF <HEAP.7_22>; b_6->a1[i.0_18] = i_1; i.0_19 = i_1; # HEAP.8_47 = V_MAY_DEF <HEAP.8_23>; c_8->a1[i.0_19] = i_1; i_20 = i_1 + 1; In .alias2: # HEAP.19_14 = V_MAY_DEF <HEAP.19_21>; b_5->a1[i_65] = i_65; # HEAP.20_73 = V_MAY_DEF <HEAP.20_10>; c_7->a1[i_65] = i_65; i_20 = i_65 + 1; --- I don't know how much harm in compile time does this hurt in normal code but we then keep on adding them to clobbered variables: # HEAP.6_27 = V_MAY_DEF <HEAP.6_24>; # HEAP.7_28 = V_MAY_DEF <HEAP.7_25>; # HEAP.8_29 = V_MAY_DEF <HEAP.8_26>; # HEAP.18_6 = V_MAY_DEF <HEAP.18_9>; # HEAP.19_8 = V_MAY_DEF <HEAP.19_64>; # HEAP.20_1 = V_MAY_DEF <HEAP.20_4>; a_3 = malloc1 (1028); -- Summary: [4.1 Regression] tree-ssa-alias creates a new virtual variable for malloc each time may_alias is run (HEAP) Product: gcc Version: 4.1.0 Status: UNCONFIRMED Keywords: memory-hog, compile-time-hog Severity: normal Priority: P2 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: pinskia at gcc dot gnu dot org CC: dberlin at gcc dot gnu dot org,dnovillo at gcc dot gnu dot org,gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23382