Avoid PRE insert iteration when possible
authorRichard Biener <rguenther@suse.de>
Thu, 12 Nov 2020 10:29:12 +0000 (11:29 +0100)
committerRichard Biener <rguenther@suse.de>
Thu, 12 Nov 2020 10:56:18 +0000 (11:56 +0100)
commit512c6ba04102295fccc62a173ee0086ca733c920
tree674b8b35bd87e2d9461593eb1dfee207c095b28c
parent7f445b5d6116000f1a6527f2164836cbc7c01dee
Avoid PRE insert iteration when possible

The following make sure to only iterate PRE insertion when
necessary - which is when AVAIL_OUT of a predecessor of a
block we already visited changed (that's backedge destinations).

To not regress this also makes sure to locally iterate insertion
since even topological sort of expressions isn't enough to
guarantee we get all opportunities of a block in one iteration.
This avoids costly re-compute of the topologically sorted expression
array (more micro-optimization is possible here).

2020-11-12  Richard Biener  <rguenther@suse.de>

* tree-ssa-pre.c (bitmap_value_replace_in_set): Return
whether we have changed anything.
(do_pre_regular_insertion): Get topologically sorted array
of expressions from caller.
(do_pre_partial_partial_insertion): Likewise.
(insert): Compute topologically sorted arrays of expressions
here and locally iterate actual insertion.  Iterate only
when AVAIL_OUT of an already visited block source changed.
gcc/tree-ssa-pre.c