I discovered the vectorizable_operation while trying to figure out why ia64 wasn't generating the mul_highpart pattern as I expected: we always force CODE_FOR_nothing to 0. Oops.
The change to expr.c was just to satisfy the grep I did to make sure there were not other occurrences of a similar problem. r~ * expr.c (store_constructor): Initialize icode with CODE_FOR_nothing. * tree-vect-stmts.c (vectorizable_operation): Use LAST_INSN_CODE for dummy != CODE_FOR_nothing value. --- gcc/ChangeLog | 6 ++++++ gcc/expr.c | 2 +- gcc/tree-vect-stmts.c | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gcc/expr.c b/gcc/expr.c index 5aec53e..9650863 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -6130,7 +6130,7 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size) constructor_elt *ce; int i; int need_to_clear; - int icode = 0; + int icode = CODE_FOR_nothing; tree elttype = TREE_TYPE (type); int elt_size = tree_low_cst (TYPE_SIZE (elttype), 1); enum machine_mode eltmode = TYPE_MODE (elttype); diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index fb05063..bb42cbc 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -3531,7 +3531,7 @@ vectorizable_operation (gimple stmt, gimple_stmt_iterator *gsi, if (code == MULT_HIGHPART_EXPR) { if (can_mult_highpart_p (vec_mode, TYPE_UNSIGNED (vectype))) - icode = 0; + icode = LAST_INSN_CODE; else icode = CODE_FOR_nothing; }