[PATCH 1/2] Allow folding all statements.
authorRobin Dapp <rdapp@linux.ibm.com>
Mon, 26 Aug 2019 10:18:24 +0000 (10:18 +0000)
committerRobin Dapp <rdapp@gcc.gnu.org>
Mon, 26 Aug 2019 10:18:24 +0000 (10:18 +0000)
commite944354ec05891474b0d204c6c239c04ee7b527b
tree7d6c6f10d0b328443395adfe609be168ff339997
parentbf05a3bbb58b355899ccabe861a06e85b7abe6e4
[PATCH 1/2] Allow folding all statements.

This patch allows users of the substitute_and_fold_engine to
enable folding all statements.  It is now enabled for VRP which
is needed for the match.pd pattern in patch 2/2.

The loop versioning pass was missing one case when
deconstructing addresses that would only be triggered after
this patch for me:
It could handle addition and subsequent convert/nop but not
a convert/nop directly.  This would cause the hash to be
calculated differently and, in turn, cause the pass to miss
a versioning opportunity.  Fixed this by adding the missing
case.

--

gcc/ChangeLog:

2019-08-26  Robin Dapp  <rdapp@linux.ibm.com>

        * gimple-loop-versioning.cc (loop_versioning::record_address_fragment):
        Add nop_convert case.
        * tree-ssa-propagate.c (substitute_and_fold_dom_walker::before_dom_children):
        Fold all statements if requested.
        * tree-ssa-propagate.h (class substitute_and_fold_engine):
        Allow to fold all statements.
        * tree-vrp.c (class vrp_folder):
        Let substitute_and_fold_engine fold all statements.

From-SVN: r274923
gcc/ChangeLog
gcc/gimple-loop-versioning.cc
gcc/tree-ssa-propagate.c
gcc/tree-ssa-propagate.h
gcc/tree-vrp.c