Attached is an updated version of the patch. Based on Philipp's review, some changes:
1. Defined new enum fma_state to describe the state of FMA candidates
for a list of operands. (Since the tests seems simple after the
change, I didn't add predicates on it.)
2. Changed return type of convert_mult_to_fma_1 and convert_mult_to_fma
to tree, to remove the in/out parameter.
3. Added description of return value values of rank_ops_for_fma.
---
gcc/ChangeLog:
* tree-ssa-math-opts.cc (convert_mult_to_fma_1): Added new parameter
check_only_p. Changed return type to tree.
(struct fma_transformation_info): Moved to header.
(class fma_deferring_state): Moved to header.
(convert_mult_to_fma): Added new parameter check_only_p. Changed
return type to tree.
* tree-ssa-math-opts.h (struct fma_transformation_info): Moved from .cc.
(class fma_deferring_state): Moved from .cc.
(convert_mult_to_fma): Add function decl.
* tree-ssa-reassoc.cc (enum fma_state): Defined new enum to describe
the state of FMA candidates for a list of operands.
(rewrite_expr_tree_parallel): Changed boolean parameter to enum type.
(rank_ops_for_fma): Return enum fma_state.
(reassociate_bb): Avoid rewriting to parallel if nested FMAs are found.
Thanks,
Di Zhao
0001-Check-for-nested-FMA-chains-in-reassoc.patch
Description: 0001-Check-for-nested-FMA-chains-in-reassoc.patch
