[PATCH] Fix parloops gimple_uid usage

Tom de Vries Tom_deVries@mentor.com
Fri Oct 9 21:11:00 GMT 2015


Hi,

In tree-parloops.c:gather_scalar_reductions, we find the comment:
...
   /* As gimple_uid is used by the vectorizer in between
      vect_analyze_loop_form and destroy_loop_vec_info, we can set
      gimple_uid of reduc_phi stmts only now.  */
   reduction_list->traverse <void *, set_reduc_phi_uids> (NULL);
...

However, the usage of gimple_uid seems to extend until the 
free_stmt_vec_info_vec call at the end of parallelize_loops (the pass 
top-level function). During free_stmt_vec_info_vec we test for 
gimple_uid == 0 in vinfo_for_stmt.

By initializing all the phis in the function with -1 before using them 
in the reduct_phi stmts:
...
    destroy_loop_vec_info (simple_loop_info, true);
    destroy_loop_vec_info (simple_inner_loop_info, true);
 
 

    /* As gimple_uid is used by the vectorizer in between
       vect_analyze_loop_form and destroy_loop_vec_info, we can set
       gimple_uid of reduc_phi stmts only now. */
+  basic_block bb;
+  FOR_EACH_BB_FN (bb, cfun)
+    for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+      gimple_set_uid (gsi_stmt (gsi), (unsigned int)-1);
  reduction_list->traverse <void *, set_reduc_phi_uids> (NULL);
...
we trigger a sigsegv in vinfo_for_stmt while trying to access 
stmt_vec_info_vec[4294967295 - 1].

This patch fixes that by moving the calls to init_stmt_vec_info_vec and
free_stmt_vec_info_vec from parallelize_loops and gather_scalar_reductions.

Furthermore, now that the gimple_uids are properly initialized, we can 
in reduction_phi:
- handle 0 (new phi) and -1 (initialized) values, both meaning the
   phi's not in the table, and
- assert that returned entries in fact match the phi argument.

OK for trunk if bootstrap and reg-test passes?

Thanks,
- Tom

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Fix-parloops-gimple_uid-usage.patch
Type: text/x-patch
Size: 2691 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20151009/6cda08f7/attachment.bin>


More information about the Gcc-patches mailing list