tree-vect-transform.c (vect_min_worthwhile_factor): Declare.
* tree-vect-transform.c (vect_min_worthwhile_factor): Declare. (vect_create_epilog_for_reduction): Don't use vec_shr if the operation is emulated. (vectorizable_reduction): Duplicate vect_min_worthwhile_factor tests from vectorizable_operation. From-SVN: r101433
This commit is contained in:
parent
affb0e06f4
commit
afc1ab6196
@ -1,3 +1,11 @@
|
||||
2005-06-29 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* tree-vect-transform.c (vect_min_worthwhile_factor): Declare.
|
||||
(vect_create_epilog_for_reduction): Don't use vec_shr if the
|
||||
operation is emulated.
|
||||
(vectorizable_reduction): Duplicate vect_min_worthwhile_factor
|
||||
tests from vectorizable_operation.
|
||||
|
||||
2005-06-29 Caroline Tice <ctice@apple.com>
|
||||
|
||||
Fix PR 21956
|
||||
|
@ -72,6 +72,7 @@ static void vect_update_inits_of_drs (loop_vec_info, tree);
|
||||
static void vect_do_peeling_for_alignment (loop_vec_info, struct loops *);
|
||||
static void vect_do_peeling_for_loop_bound
|
||||
(loop_vec_info, tree *, struct loops *);
|
||||
static int vect_min_worthwhile_factor (enum tree_code);
|
||||
|
||||
|
||||
/* Function vect_get_new_vect_var.
|
||||
@ -940,6 +941,21 @@ vect_create_epilog_for_reduction (tree vect_def, tree stmt, tree reduction_op,
|
||||
else
|
||||
have_whole_vector_shift = false;
|
||||
|
||||
/* Regardless of whether we have a whole vector shift, if we're
|
||||
emulating the operation via tree-vect-generic, we don't want
|
||||
to use it. Only the first round of the reduction is likely
|
||||
to still be profitable via emulation. */
|
||||
/* ??? It might be better to emit a reduction tree code here, so that
|
||||
tree-vect-generic can expand the first round via bit tricks. */
|
||||
if (!VECTOR_MODE_P (mode))
|
||||
have_whole_vector_shift = false;
|
||||
else
|
||||
{
|
||||
optab optab = optab_for_tree_code (code, vectype);
|
||||
if (optab->handlers[mode].insn_code == CODE_FOR_nothing)
|
||||
have_whole_vector_shift = false;
|
||||
}
|
||||
|
||||
if (have_whole_vector_shift)
|
||||
{
|
||||
/*** Case 2:
|
||||
@ -1211,6 +1227,21 @@ vectorizable_reduction (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
|
||||
{
|
||||
if (vect_print_dump_info (REPORT_DETAILS, UNKNOWN_LOC))
|
||||
fprintf (vect_dump, "op not supported by target.");
|
||||
if (GET_MODE_SIZE (vec_mode) != UNITS_PER_WORD
|
||||
|| LOOP_VINFO_VECT_FACTOR (loop_vinfo)
|
||||
< vect_min_worthwhile_factor (code))
|
||||
return false;
|
||||
if (vect_print_dump_info (REPORT_DETAILS, UNKNOWN_LOC))
|
||||
fprintf (vect_dump, "proceeding using word mode.");
|
||||
}
|
||||
|
||||
/* Worthwhile without SIMD support? */
|
||||
if (!VECTOR_MODE_P (TYPE_MODE (vectype))
|
||||
&& LOOP_VINFO_VECT_FACTOR (loop_vinfo)
|
||||
< vect_min_worthwhile_factor (code))
|
||||
{
|
||||
if (vect_print_dump_info (REPORT_DETAILS, UNKNOWN_LOC))
|
||||
fprintf (vect_dump, "not worthwhile without SIMD support.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user