On 1/16/19 3:49 PM, Jakub Jelinek wrote: > Hi! > > While looking at this PR (I've just started) I've noticed that > add_stack_var_conflict is quite often called with x == y. > We don't really need to record that a variable conflicts with itself, > the only reader of the conflicts bitmaps, stack_var_conflict_p, > starts with > if (x == y) > return false; > conflicts bitmap are set either by this function, or by the > EXECUTE_IF_SET_IN_BITMAP (work, 0, i, bi) > { > struct stack_var *a = &stack_vars[i]; > if (!a->conflicts) > a->conflicts = BITMAP_ALLOC (&stack_var_bitmap_obstack); > bitmap_ior_into (a->conflicts, work); > } > code (where work isn't derived from any conflicts bitmap though, so > doesn't care if we've added those self-conflicts or not). The above > bitmap_ior_into stuff actually always sets self-conflicts (if you think > bitmap_clear_bit is worth it, I can add it afterwards though). > > But I think the following patch is helpful, don't create the conflicts > bitmaps at all if all we'd record is just self-conflict which we'll ignore. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? > > 2019-01-16 Jakub Jelinek <ja...@redhat.com> > > PR tree-optimization/86214 > * cfgexpand.c (add_stack_var_conflict): Don't add any conflicts > if x == y. Yea. Seems reasonable.
jeff