https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104943
Bug ID: 104943 Summary: Analyzer fails to purge state for local structs Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: analyzer Assignee: dmalcolm at gcc dot gnu.org Reporter: dmalcolm at gcc dot gnu.org Target Milestone: --- State purging only happens for SSA names, and locals of struct type aren't SSA names. Given e.g.: struct boxed { int value; }; extern struct boxed boxed_add (struct boxed a, struct boxed b); extern struct boxed boxed_mul (struct boxed a, struct boxed b); struct boxed test (struct boxed a, struct boxed b) { struct boxed result = boxed_add (boxed_mul (a, a), boxed_mul (b, b)); return result; } without optimization we have this gimple: struct boxed test (struct boxed a, struct boxed b) { struct boxed result; struct boxed D.1994; struct boxed D.1993; struct boxed D.1992; <bb 2> : D.1992 = boxed_mul (b, b); D.1993 = boxed_mul (a, a); result = boxed_add (D.1993, D.1992); D.1994 = result; result ={v} {CLOBBER(eol)}; <bb 3> : <L1>: return D.1994; } and this final exploded node: EN 11: preds: EN: 10 succs: callstring: [] after SN: 3 rmodel: stack depth: 1 frame (index 0): frame: ‘test’@1 clusters within frame: ‘test’@1 cluster for: <anonymous>: CONJURED(D.1992 = boxed_mul (b, b);, <anonymous>) cluster for: <anonymous>: CONJURED(D.1993 = boxed_mul (a, a);, <anonymous>) cluster for: <anonymous>: CONJURED(result = boxed_add (D.1993, D.1992);, result) cluster for: <anonymous>: CONJURED(result = boxed_add (D.1993, D.1992);, result) m_called_unknown_fn: TRUE constraint_manager: equiv classes: constraints: where the various <anonymous> are the values of the local temporaries of struct type, which ought to be purged; they don't matter anymore. Seen on linux kernel: drivers/gpu/drm/amd/display/dc/calcs/dce_calcs.c which amongst other things has: struct bw_fixed { int64_t value; }; with numerous calls to manipulate values; the states get bloated with bindings for temporaries that persist far longer than they are needed.