This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] PR/44970, fix broken fwprop incremental dataflow


On 10/18/2010 11:27 PM, Paolo Bonzini wrote:
It turns out fwprop has been incredibly broken since it's inception. :(

Its incremental dataflow update looks at the uses in the instruction
before propagation, and creates new uses based on their presence after
propagation. But when fwprop copy propagates a pseudo into another
instruction, it misses the uses of the propagated pseudo. I find it
incredible that this never triggered in so many years.

To fix the problem, the patch does not look at the old uses, and instead
reconstructs them using df-scan. To do this it cannot use
df_insn_rescan, because this would remove the old defs and make the
use->def links dangling. So I just created a new function df_uses_create
that scans an instruction and creates new refs like df_ref_create would
have done.

With this in place, there is the question of how to create use->def
links for the new uses. The old way to do the updates could easily
create the links because, by knowing a correspondence from old to new
uses, it could reuse each old use's def link.

The new scheme, instead, is based on the following observation: the new
uses can only refer to very few pseudos, those in the propagated-from
insn and those in the propagated-to insn. fwprop walks the uses in the
two insns and prepares in advance a map from pseudos to their defs. When
checking is enabled, I added assertions that the values of the array
indeed were set for the right insns.

Bootstrapped/regtested x86_64-pc-linux-gnu, bootstrapped on
hppa64-hp-hpux11.11 by Steve Ellcey.

Ok for mainline?

PING?


Paolo


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]