X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftree-vect-transform.c;h=6168fdab74d9dfb84c87fd7c5f8145cc0018d455;hb=9ec0fbe12f5d88044672d79ff164eff1d2ec3f94;hp=a35e963b48f2caa30f4bbd61eb242f4d747ef0c7;hpb=70337474d37fdba76f7220fa92d7279e014a314d;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/tree-vect-transform.c b/gcc/tree-vect-transform.c index a35e963b48f..6168fdab74d 100644 --- a/gcc/tree-vect-transform.c +++ b/gcc/tree-vect-transform.c @@ -1102,8 +1102,12 @@ vect_create_data_ref_ptr (tree stmt, struct loop *at_loop, new_temp = vect_create_addr_base_for_vector_ref (stmt, &new_stmt_list, offset, loop); pe = loop_preheader_edge (loop); - new_bb = bsi_insert_on_edge_immediate (pe, new_stmt_list); - gcc_assert (!new_bb); + if (new_stmt_list) + { + new_bb = bsi_insert_on_edge_immediate (pe, new_stmt_list); + gcc_assert (!new_bb); + } + *initial_address = new_temp; /* Create: p = (vectype *) initial_base */ @@ -3631,6 +3635,9 @@ vectorizable_conversion (tree stmt, block_stmt_iterator *bsi, *vec_stmt = STMT_VINFO_VEC_STMT (stmt_info); } + if (vec_oprnds0) + VEC_free (tree, heap, vec_oprnds0); + return true; } @@ -4582,11 +4589,8 @@ vect_permute_store_chain (VEC(tree,heap) *dr_chain, tree scalar_dest, tmp; int i; unsigned int j; - VEC(tree,heap) *first, *second; scalar_dest = GIMPLE_STMT_OPERAND (stmt, 0); - first = VEC_alloc (tree, heap, length/2); - second = VEC_alloc (tree, heap, length/2); /* Check that the operation is supported. */ if (!vect_strided_store_supported (vectype)) @@ -4969,6 +4973,11 @@ vectorizable_store (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt, } } + VEC_free (tree, heap, dr_chain); + VEC_free (tree, heap, oprnds); + if (result_chain) + VEC_free (tree, heap, result_chain); + return true; } @@ -5474,6 +5483,8 @@ vect_transform_strided_load (tree stmt, VEC(tree,heap) *dr_chain, int size, break; } } + + VEC_free (tree, heap, result_chain); return true; } @@ -5911,6 +5922,7 @@ vectorizable_load (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt, if (!vect_transform_strided_load (stmt, dr_chain, group_size, bsi)) return false; *vec_stmt = STMT_VINFO_VEC_STMT (stmt_info); + VEC_free (tree, heap, dr_chain); dr_chain = VEC_alloc (tree, heap, group_size); } else @@ -5923,6 +5935,9 @@ vectorizable_load (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt, } } + if (dr_chain) + VEC_free (tree, heap, dr_chain); + return true; } @@ -7259,10 +7274,8 @@ vect_loop_versioning (loop_vec_info loop_vinfo) static void vect_remove_stores (tree first_stmt) { - stmt_ann_t ann; tree next = first_stmt; tree tmp; - stmt_vec_info next_stmt_info; block_stmt_iterator next_si; while (next) @@ -7270,11 +7283,8 @@ vect_remove_stores (tree first_stmt) /* Free the attached stmt_vec_info and remove the stmt. */ next_si = bsi_for_stmt (next); bsi_remove (&next_si, true); - next_stmt_info = vinfo_for_stmt (next); - ann = stmt_ann (next); - tmp = DR_GROUP_NEXT_DR (next_stmt_info); - free (next_stmt_info); - set_stmt_info (ann, NULL); + tmp = DR_GROUP_NEXT_DR (vinfo_for_stmt (next)); + free_stmt_vec_info (next); next = tmp; } } @@ -7373,7 +7383,7 @@ vect_transform_loop (loop_vec_info loop_vinfo) struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo); basic_block *bbs = LOOP_VINFO_BBS (loop_vinfo); int nbbs = loop->num_nodes; - block_stmt_iterator si, next_si; + block_stmt_iterator si; int i; tree ratio = NULL; int vectorization_factor = LOOP_VINFO_VECT_FACTOR (loop_vinfo); @@ -7538,37 +7548,19 @@ vect_transform_loop (loop_vec_info loop_vinfo) is_store = vect_transform_stmt (stmt, &si, &strided_store, NULL); if (is_store) { - stmt_ann_t ann; if (STMT_VINFO_STRIDED_ACCESS (stmt_info)) { /* Interleaving. If IS_STORE is TRUE, the vectorization of the interleaving chain was completed - free all the stores in the chain. */ - tree next = DR_GROUP_FIRST_DR (stmt_info); - tree tmp; - stmt_vec_info next_stmt_info; - - while (next) - { - next_si = bsi_for_stmt (next); - next_stmt_info = vinfo_for_stmt (next); - /* Free the attached stmt_vec_info and remove the stmt. */ - ann = stmt_ann (next); - tmp = DR_GROUP_NEXT_DR (next_stmt_info); - free (next_stmt_info); - set_stmt_info (ann, NULL); - bsi_remove (&next_si, true); - next = tmp; - } + vect_remove_stores (DR_GROUP_FIRST_DR (stmt_info)); bsi_remove (&si, true); continue; } else { /* Free the attached stmt_vec_info and remove the stmt. */ - ann = stmt_ann (stmt); - free (stmt_info); - set_stmt_info (ann, NULL); + free_stmt_vec_info (stmt); bsi_remove (&si, true); continue; }