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;
     }

Reply via email to