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] Loop-aware SLP 2/5


This is the second part of loop-ware SLP patch.
We add SLP analysis and transformation functions here.

The analysis for SLP builds computation trees in a recursive bottom-up,
use-def manner rooted at interleaved
store groups. Each node in a tree contains the same number of isomorphic
statements, which can execute
in parallel. At each step, the uses of statements in the current node are
examined for their corresponding
defs, and we either extend the tree by additional child nodes, conclude
that the current node is a leaf, or terminate the tree. When the def
statements are all loop invariant (including constants) or are all loads
from interleaved memory addresses (i.e., form an interleaved load group),
the node is considered a leaf. Additional
child nodes are created when the def statements are all loop-variant,
isomorphic and independent non-load
statements. In all other cases, including reaching defs which belong to SSA
phi-nodes, we terminate the tree
and delete it.

Upon reaching the first statement of a computation tree to be SLPâed
(typically the first load), we generate the vectorized version of the whole
tree, from leaves to root, getting vector def stmts from already scheduled
tree nodes. (Note that this part of the patch doesn't contain actual call
to vect_schedule_slp(), which is called from vect_transform_loop() - this
will be added in the next part of the patch).

Thanks,
Ira

ChangeLog:

      * tree-vect-analyze.c (vect_analyze_operations): For not pure SLP
stmts
      with strided access check that the group size is power of 2. Update
the
      vectorization factor according to SLP.
      (vect_get_and_check_slp_defs, vect_build_slp_tree,
vect_print_slp_tree,
      vect_mark_slp_stmts, vect_analyze_slp_instance, vect_analyze_slp,
      vect_make_slp_decision, vect_detect_hybrid_slp_stmts,
      vect_detect_hybrid_slp): New.
      (vect_analyze_loop): Call vect_analyze_slp, vect_make_slp_decision
      and vect_detect_hybrid_slp.
      * tree-vect-transform.c (vect_get_constant_vectors,
      vect_get_slp_vect_defs, vect_get_slp_defs, vect_remove_stores,
      vect_schedule_slp_instance, vect_schedule_slp): New.
      * Makefile.in: (tree-vect-analyze.o): Depend on recog.h.

(See attached file: slp-part2.txt)

Attachment: slp-part2.txt
Description: Text document


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