]> git.ipfire.org Git - thirdparty/gcc.git/commit
Add a pass to back-propagate use information
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 21 Oct 2015 20:11:33 +0000 (20:11 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 21 Oct 2015 20:11:33 +0000 (20:11 +0000)
commit7fc2f61331a340fe6d948d69b8f8c1be8a3ae401
tree468c0e4a1b28417766a235b583ad1633ef8b346f
parentdda98ae93a1eea9e0d99c86317fb088914ec3ac9
Add a pass to back-propagate use information

This patch adds a pass that collects information that is common to
all uses of an SSA name X and back-propagates that information up
the statements that generate X.  The general idea is to use the
information to simplify instructions (rather than a pure DCE) so
I've simply called it gimple-ssa-backprop.c, to go with
tree-ssa-forwprop.c.

At the moment the only use of the pass is to remove unnecessary
sign operations, so that it's effectively a global version of
fold_strip_sign_ops.  I'm hoping it could be extended in future
to record which bits of an integer are significant.  There are
probably other potential uses too.

A later patch gets rid of fold_strip_sign_ops.

Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.

gcc/
* doc/invoke.texi (-fdump-tree-backprop, -fssa-backprop): Document.
* Makefile.in (OBJS): Add gimple-ssa-backprop.o.
* common.opt (fssa-backprop): New option.
* fold-const.h (negate_mathfn_p): Declare.
* fold-const.c (negate_mathfn_p): Make public.
* timevar.def (TV_TREE_BACKPROP): New.
* tree-pass.h (make_pass_backprop): Declare.
* passes.def (pass_backprop): Add.
* gimple-ssa-backprop.c: New file.

gcc/testsuite/
* gcc.dg/tree-ssa/backprop-1.c, gcc.dg/tree-ssa/backprop-2.c,
gcc.dg/tree-ssa/backprop-3.c, gcc.dg/tree-ssa/backprop-4.c,
gcc.dg/tree-ssa/backprop-5.c, gcc.dg/tree-ssa/backprop-6.c: New tests.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@229139 138bc75d-0d04-0410-961f-82ee72b054a4
17 files changed:
gcc/ChangeLog
gcc/Makefile.in
gcc/common.opt
gcc/doc/invoke.texi
gcc/fold-const.c
gcc/fold-const.h
gcc/gimple-ssa-backprop.c [new file with mode: 0644]
gcc/passes.def
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/backprop-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/backprop-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/backprop-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/backprop-4.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/backprop-5.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/backprop-6.c [new file with mode: 0644]
gcc/timevar.def
gcc/tree-pass.h