GCC Bugzilla – Attachment 7646 Details for
Bug 15855
[3.4/4.0/4.1 Regression] g++ crash with -O2 and -O3 on input file
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
PPP
PPP (text/plain), 8.29 KB, created by
Jeffrey A. Law
on 2004-12-01 00:30:37 UTC
(
hide
)
Description:
PPP
Filename:
MIME Type:
Creator:
Jeffrey A. Law
Created:
2004-12-01 00:30:37 UTC
Size:
8.29 KB
patch
obsolete
> > * sbitmap.c (sbitmap_any_common_bits): New function. > * sbitmap.h (sbitmap_any_common_bits): Prototype. > * modulo-sched.c (sms_schedule_by_order): Use sbitmap_any_common_bits > No longer allocate/free "psp", "pss" sbitmaps. > * tree-ssa-alias.c (compute_flow_insensitive_aliasing): Similarly for > the "res" sbitmap. > (group_aliases): Similarly. > >Index: modulo-sched.c >=================================================================== >RCS file: /cvs/gcc/gcc/gcc/modulo-sched.c,v >retrieving revision 1.18 >diff -c -p -r1.18 modulo-sched.c >*** modulo-sched.c 22 Nov 2004 12:23:53 -0000 1.18 >--- modulo-sched.c 1 Dec 2004 00:25:22 -0000 >*************** sms_schedule_by_order (ddg_ptr g, int mi >*** 1219,1226 **** > ddg_edge_ptr e; > int start, end, step; /* Place together into one struct? */ > sbitmap sched_nodes = sbitmap_alloc (num_nodes); >- sbitmap psp = sbitmap_alloc (num_nodes); >- sbitmap pss = sbitmap_alloc (num_nodes); > sbitmap must_precede = sbitmap_alloc (num_nodes); > sbitmap must_follow = sbitmap_alloc (num_nodes); > >--- 1219,1224 ---- >*************** sms_schedule_by_order (ddg_ptr g, int mi >*** 1250,1259 **** > continue; > > /* 1. compute sched window for u (start, end, step). */ >! sbitmap_zero (psp); >! sbitmap_zero (pss); >! psp_not_empty = sbitmap_a_and_b_cg (psp, u_node_preds, sched_nodes); >! pss_not_empty = sbitmap_a_and_b_cg (pss, u_node_succs, sched_nodes); > > if (psp_not_empty && !pss_not_empty) > { >--- 1248,1255 ---- > continue; > > /* 1. compute sched window for u (start, end, step). */ >! psp_not_empty = sbitmap_any_common_bits (u_node_preds, sched_nodes); >! pss_not_empty = sbitmap_any_common_bits (u_node_succs, sched_nodes); > > if (psp_not_empty && !pss_not_empty) > { >*************** sms_schedule_by_order (ddg_ptr g, int mi >*** 1399,1406 **** > } /* While try_again_with_larger_ii. */ > > sbitmap_free (sched_nodes); >- sbitmap_free (psp); >- sbitmap_free (pss); > > if (ii >= maxii) > { >--- 1395,1400 ---- >Index: sbitmap.c >=================================================================== >RCS file: /cvs/gcc/gcc/gcc/sbitmap.c,v >retrieving revision 1.38 >diff -c -p -r1.38 sbitmap.c >*** sbitmap.c 22 Nov 2004 16:39:22 -0000 1.38 >--- sbitmap.c 1 Dec 2004 00:25:23 -0000 >*************** sbitmap_difference (sbitmap dst, sbitmap >*** 316,321 **** >--- 316,339 ---- > *dstp++ = *ap++; > } > >+ /* Return true if there are any bits set in A are also set in B. >+ Return false otherwise. */ >+ >+ bool >+ sbitmap_any_common_bits (sbitmap a, sbitmap b) >+ { >+ sbitmap_ptr ap = a->elms; >+ sbitmap_ptr bp = b->elms; >+ unsigned int i, n; >+ >+ n = MIN (a->size, b->size); >+ for (i = 0; i < n; i++) >+ if ((*ap++ & *bp++) != 0) >+ return true; >+ >+ return false; >+ } >+ > /* Set DST to be (A and B). > Return nonzero if any change is made. */ > >Index: sbitmap.h >=================================================================== >RCS file: /cvs/gcc/gcc/gcc/sbitmap.h,v >retrieving revision 1.25 >diff -c -p -r1.25 sbitmap.h >*** sbitmap.h 22 Oct 2004 19:48:43 -0000 1.25 >--- sbitmap.h 1 Dec 2004 00:25:23 -0000 >*************** extern void sbitmap_a_or_b_and_c (sbitma >*** 141,146 **** >--- 141,147 ---- > extern bool sbitmap_a_or_b_and_c_cg (sbitmap, sbitmap, sbitmap, sbitmap); > extern void sbitmap_a_and_b_or_c (sbitmap, sbitmap, sbitmap, sbitmap); > extern bool sbitmap_a_and_b_or_c_cg (sbitmap, sbitmap, sbitmap, sbitmap); >+ extern bool sbitmap_any_common_bits (sbitmap, sbitmap); > extern void sbitmap_a_and_b (sbitmap, sbitmap, sbitmap); > extern bool sbitmap_a_and_b_cg (sbitmap, sbitmap, sbitmap); > extern void sbitmap_a_or_b (sbitmap, sbitmap, sbitmap); >Index: tree-ssa-alias.c >=================================================================== >RCS file: /cvs/gcc/gcc/gcc/tree-ssa-alias.c,v >retrieving revision 2.59 >diff -c -p -r2.59 tree-ssa-alias.c >*** tree-ssa-alias.c 29 Nov 2004 00:59:25 -0000 2.59 >--- tree-ssa-alias.c 1 Dec 2004 00:25:23 -0000 >*************** static void >*** 927,933 **** > compute_flow_insensitive_aliasing (struct alias_info *ai) > { > size_t i; >- sbitmap res; > > /* Initialize counter for the total number of virtual operands that > aliasing will introduce. When AI->TOTAL_ALIAS_VOPS goes beyond the >--- 927,932 ---- >*************** compute_flow_insensitive_aliasing (struc >*** 1021,1028 **** > To avoid this problem, we do a final traversal of AI->POINTERS > looking for pairs of pointers that have no aliased symbols in > common and yet have conflicting alias set numbers. */ >- res = sbitmap_alloc (num_referenced_vars); >- > for (i = 0; i < ai->num_pointers; i++) > { > size_t j; >--- 1020,1025 ---- >*************** compute_flow_insensitive_aliasing (struc >*** 1042,1049 **** > > /* The two pointers may alias each other. If they already have > symbols in common, do nothing. */ >! sbitmap_a_and_b (res, may_aliases1, may_aliases2); >! if (sbitmap_first_set_bit (res) >= 0) > continue; > > if (sbitmap_first_set_bit (may_aliases2) >= 0) >--- 1039,1045 ---- > > /* The two pointers may alias each other. If they already have > symbols in common, do nothing. */ >! if (sbitmap_any_common_bits (may_aliases1, may_aliases2)) > continue; > > if (sbitmap_first_set_bit (may_aliases2) >= 0) >*************** compute_flow_insensitive_aliasing (struc >*** 1065,1072 **** > } > } > >- sbitmap_free (res); >- > if (dump_file) > fprintf (dump_file, "%s: Total number of aliased vops: %ld\n", > get_name (current_function_decl), >--- 1061,1066 ---- >*************** static void >*** 1209,1223 **** > group_aliases (struct alias_info *ai) > { > size_t i; >- sbitmap res; > > /* Sort the POINTERS array in descending order of contributed > virtual operands. */ > qsort (ai->pointers, ai->num_pointers, sizeof (struct alias_map_d *), > total_alias_vops_cmp); > >- res = sbitmap_alloc (num_referenced_vars); >- > /* For every pointer in AI->POINTERS, reverse the roles of its tag > and the tag's may-aliases set. */ > for (i = 0; i < ai->num_pointers; i++) >--- 1203,1214 ---- >*************** group_aliases (struct alias_info *ai) >*** 1237,1244 **** > { > sbitmap tag2_aliases = ai->pointers[j]->may_aliases; > >! sbitmap_a_and_b (res, tag1_aliases, tag2_aliases); >! if (sbitmap_first_set_bit (res) >= 0) > { > tree tag2 = var_ann (ai->pointers[j]->var)->type_mem_tag; > >--- 1228,1234 ---- > { > sbitmap tag2_aliases = ai->pointers[j]->may_aliases; > >! if (sbitmap_any_common_bits (tag1_aliases, tag2_aliases)) > { > tree tag2 = var_ann (ai->pointers[j]->var)->type_mem_tag; > >*************** group_aliases (struct alias_info *ai) >*** 1308,1315 **** > } > } > >- sbitmap_free (res); >- > if (dump_file) > fprintf (dump_file, > "%s: Total number of aliased vops after grouping: %ld%s\n", >--- 1298,1303 ---- >Index: tree-vectorizer.c >=================================================================== >RCS file: /cvs/gcc/gcc/gcc/tree-vectorizer.c,v >retrieving revision 2.45 >diff -c -p -r2.45 tree-vectorizer.c >*** tree-vectorizer.c 30 Nov 2004 14:40:37 -0000 2.45 >--- tree-vectorizer.c 1 Dec 2004 00:25:26 -0000 >*************** vect_analyze_data_refs (loop_vec_info lo >*** 4899,4905 **** > int nbbs = loop->num_nodes; > block_stmt_iterator si; > int j; >! struct data_reference *dr, *tmp_dr; > tree tag; > tree address_base; > bool base_aligned_p; >--- 4899,4905 ---- > int nbbs = loop->num_nodes; > block_stmt_iterator si; > int j; >! struct data_reference *dr; > tree tag; > tree address_base; > bool base_aligned_p; >*************** vect_analyze_data_refs (loop_vec_info lo >*** 5013,5021 **** > switch (TREE_CODE (address_base)) > { > case ARRAY_REF: >! tmp_dr = analyze_array (stmt, TREE_OPERAND (symbl, 0), >! DR_IS_READ (tmp_dr)); >! tag = vect_get_base_and_bit_offset (tmp_dr, DR_BASE_NAME (tmp_dr), > NULL_TREE, loop_vinfo, &offset, &base_aligned_p); > if (!tag) > { >--- 5013,5021 ---- > switch (TREE_CODE (address_base)) > { > case ARRAY_REF: >! dr = analyze_array (stmt, TREE_OPERAND (symbl, 0), >! DR_IS_READ(dr)); >! tag = vect_get_base_and_bit_offset (dr, DR_BASE_NAME (dr), > NULL_TREE, loop_vinfo, &offset, &base_aligned_p); > if (!tag) > {
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 15855
:
6484
|
7585
|
7614
|
7628
| 7646 |
7651
|
7654
|
9484
|
9485