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] |
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] |