------- Comment #1 from wilson at gcc dot gnu dot org 2010-04-27 01:17 ------- Some further investigation shows that there is code in expand_expr_real_2 that is supposed to be able to generate multiply-accumulate instructions, but it isn't general enough. In my gimple, I have D.1999_10 = D.1998_9 * D.1996_7; total_11 = total_19 + D.1999_10; The code in expr.c does - if ((TREE_CODE (type) == INTEGER_TYPE - || TREE_CODE (type) == FIXED_POINT_TYPE) - && (subexp0_def = get_def_for_expr (treeop0, - MULT_EXPR))) which fails because the multiply operand is treeop1 not treeop0. We need to check both operands for the multiply here. I have an initial patch that needs testing.
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43902