OSDN Git Service

2006-11-17 Zdenek Dvorak <dvorakz@suse.cz>
authorrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 17 Nov 2006 09:34:08 +0000 (09:34 +0000)
committerrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 17 Nov 2006 09:34:08 +0000 (09:34 +0000)
* tree-vect-transform.c (vect_create_epilog_for_reduction): Fix
formating.
(vect_generate_tmps_on_preheader, vect_update_ivs_after_vectorizer,
vect_gen_niters_for_prolog_loop): Fold the emited expressions.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@118925 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-vect-transform.c

index dc85734..ebdf75f 100644 (file)
@@ -1,5 +1,12 @@
 2006-11-17  Zdenek Dvorak <dvorakz@suse.cz>
 
+       * tree-vect-transform.c (vect_create_epilog_for_reduction): Fix
+       formating.
+       (vect_generate_tmps_on_preheader, vect_update_ivs_after_vectorizer,
+       vect_gen_niters_for_prolog_loop): Fold the emited expressions.
+
+2006-11-17  Zdenek Dvorak <dvorakz@suse.cz>
+
        * tree-ssa-alias.c (new_type_alias): Do not use offset of expr to
        select subvars of var.
 
index 19097fd..e59c152 100644 (file)
@@ -1100,13 +1100,15 @@ vect_create_epilog_for_reduction (tree vect_def, tree stmt,
              tree bitpos = size_int (bit_offset);
 
              epilog_stmt = build2 (MODIFY_EXPR, vectype, vec_dest,
-             build2 (shift_code, vectype, new_temp, bitpos));
+                                   build2 (shift_code, vectype,
+                                           new_temp, bitpos));
              new_name = make_ssa_name (vec_dest, epilog_stmt);
              TREE_OPERAND (epilog_stmt, 0) = new_name;
              bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
 
              epilog_stmt = build2 (MODIFY_EXPR, vectype, vec_dest,
-             build2 (code, vectype, new_name, new_temp));
+                                   build2 (code, vectype,
+                                           new_name, new_temp));
              new_temp = make_ssa_name (vec_dest, epilog_stmt);
              TREE_OPERAND (epilog_stmt, 0) = new_temp;
              bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
@@ -3165,29 +3167,33 @@ vect_generate_tmps_on_preheader (loop_vec_info loop_vinfo,
 
   /* Create: ratio = ni >> log2(vf) */
 
-  var = create_tmp_var (TREE_TYPE (ni), "bnd");
-  add_referenced_var (var);
-  ratio_name = make_ssa_name (var, NULL_TREE);
-  stmt = build2 (MODIFY_EXPR, void_type_node, ratio_name,
-          build2 (RSHIFT_EXPR, TREE_TYPE (ni_name), ni_name, log_vf));
-  SSA_NAME_DEF_STMT (ratio_name) = stmt;
+  ratio_name = fold_build2 (RSHIFT_EXPR, TREE_TYPE (ni_name), ni_name, log_vf);
+  if (!is_gimple_val (ratio_name))
+    {
+      var = create_tmp_var (TREE_TYPE (ni), "bnd");
+      add_referenced_var (var);
 
-  pe = loop_preheader_edge (loop);
-  new_bb = bsi_insert_on_edge_immediate (pe, stmt);
-  gcc_assert (!new_bb);
+      ratio_name = force_gimple_operand (ratio_name, &stmt, true, var);
+      pe = loop_preheader_edge (loop);
+      new_bb = bsi_insert_on_edge_immediate (pe, stmt);
+      gcc_assert (!new_bb);
+    }
        
   /* Create: ratio_mult_vf = ratio << log2 (vf).  */
 
-  var = create_tmp_var (TREE_TYPE (ni), "ratio_mult_vf");
-  add_referenced_var (var);
-  ratio_mult_vf_name = make_ssa_name (var, NULL_TREE);
-  stmt = build2 (MODIFY_EXPR, void_type_node, ratio_mult_vf_name,
-          build2 (LSHIFT_EXPR, TREE_TYPE (ratio_name), ratio_name, log_vf));
-  SSA_NAME_DEF_STMT (ratio_mult_vf_name) = stmt;
+  ratio_mult_vf_name = fold_build2 (LSHIFT_EXPR, TREE_TYPE (ratio_name),
+                                   ratio_name, log_vf);
+  if (!is_gimple_val (ratio_mult_vf_name))
+    {
+      var = create_tmp_var (TREE_TYPE (ni), "ratio_mult_vf");
+      add_referenced_var (var);
 
-  pe = loop_preheader_edge (loop);
-  new_bb = bsi_insert_on_edge_immediate (pe, stmt);
-  gcc_assert (!new_bb);
+      ratio_mult_vf_name = force_gimple_operand (ratio_mult_vf_name, &stmt,
+                                                true, var);
+      pe = loop_preheader_edge (loop);
+      new_bb = bsi_insert_on_edge_immediate (pe, stmt);
+      gcc_assert (!new_bb);
+    }
 
   *ni_name_ptr = ni_name;
   *ratio_mult_vf_name_ptr = ratio_mult_vf_name;
@@ -3375,9 +3381,9 @@ vect_update_ivs_after_vectorizer (loop_vec_info loop_vinfo, tree niters,
       init_expr = unshare_expr (initial_condition_in_loop_num (access_fn, 
                                                               loop->num));
 
-      ni = build2 (PLUS_EXPR, TREE_TYPE (init_expr),
-                 build2 (MULT_EXPR, TREE_TYPE (niters),
-                      niters, step_expr), init_expr);
+      ni = fold_build2 (PLUS_EXPR, TREE_TYPE (init_expr),
+                       fold_build2 (MULT_EXPR, TREE_TYPE (niters),
+                                    niters, step_expr), init_expr);
 
       var = create_tmp_var (TREE_TYPE (init_expr), "tmp");
       add_referenced_var (var);
@@ -3530,15 +3536,15 @@ vect_gen_niters_for_prolog_loop (loop_vec_info loop_vinfo, tree loop_niters)
   
       /* Create:  byte_misalign = addr & (vectype_size - 1)  */
       byte_misalign = 
-        build2 (BIT_AND_EXPR, type, start_addr, vectype_size_minus_1);
+        fold_build2 (BIT_AND_EXPR, type, start_addr, vectype_size_minus_1);
   
       /* Create:  elem_misalign = byte_misalign / element_size  */
       elem_misalign =
-        build2 (RSHIFT_EXPR, type, byte_misalign, elem_size_log);
+        fold_build2 (RSHIFT_EXPR, type, byte_misalign, elem_size_log);
 
       /* Create:  (niters_type) (VF - elem_misalign)&(VF - 1)  */
-      iters = build2 (MINUS_EXPR, type, vf_tree, elem_misalign);
-      iters = build2 (BIT_AND_EXPR, type, iters, vf_minus_1);
+      iters = fold_build2 (MINUS_EXPR, type, vf_tree, elem_misalign);
+      iters = fold_build2 (BIT_AND_EXPR, type, iters, vf_minus_1);
       iters = fold_convert (niters_type, iters);
     }
 
@@ -3547,7 +3553,7 @@ vect_gen_niters_for_prolog_loop (loop_vec_info loop_vinfo, tree loop_niters)
      greater than vf; since the misalignment ('iters') is at most vf, there's
      no need to generate the MIN_EXPR in this case.  */
   if (TREE_CODE (loop_niters) != INTEGER_CST)
-    iters = build2 (MIN_EXPR, niters_type, iters, loop_niters);
+    iters = fold_build2 (MIN_EXPR, niters_type, iters, loop_niters);
 
   if (vect_print_dump_info (REPORT_DETAILS))
     {