From c5f14d626e38bf94e2cf8d3bda0409c2c4de1fe6 Mon Sep 17 00:00:00 2001 From: Bill Schmidt Date: Mon, 6 Feb 2012 21:39:34 +0000 Subject: re PR tree-optimization/50969 (17% degradation in 168.wupwise for interleave via permutation) 2012-02-06 Bill Schmidt PR tree-optimization/50969 * tree-vect-stmts.c (vect_model_store_cost): Correct statement cost to use vec_perm rather than vector_stmt. (vect_model_load_cost): Likewise. * config/i386/i386.c (ix86_builtin_vectorization_cost): Change cost of vec_perm to be the same as other vector statements. * config/rs6000/rs6000.c (rs6000_builtin_vectorization_cost): Revise cost of vec_perm for TARGET_VSX. From-SVN: r183944 --- gcc/ChangeLog | 11 +++++++++++ gcc/config/i386/i386.c | 2 +- gcc/config/rs6000/rs6000.c | 6 +++++- gcc/tree-vect-stmts.c | 4 ++-- 4 files changed, 19 insertions(+), 4 deletions(-) (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 28f130f..9bacd9d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2012-02-06 Bill Schmidt + + PR tree-optimization/50969 + * tree-vect-stmts.c (vect_model_store_cost): Correct statement cost to + use vec_perm rather than vector_stmt. + (vect_model_load_cost): Likewise. + * config/i386/i386.c (ix86_builtin_vectorization_cost): Change cost of + vec_perm to be the same as other vector statements. + * config/rs6000/rs6000.c (rs6000_builtin_vectorization_cost): Revise + cost of vec_perm for TARGET_VSX. + 2012-02-06 Richard Guenther PR tree-optimization/52115 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index a50d871..009dd53 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -35336,7 +35336,7 @@ ix86_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, return ix86_cost->cond_not_taken_branch_cost; case vec_perm: - return 1; + return ix86_cost->vec_stmt_cost; default: gcc_unreachable (); diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 751ce2c..4190b25 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -3540,9 +3540,13 @@ rs6000_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, case vec_to_scalar: case scalar_to_vec: case cond_branch_not_taken: - case vec_perm: return 1; + case vec_perm: + if (!TARGET_VSX) + return 1; + return 2; + case cond_branch_taken: return 3; diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 6ce742c..e854da5 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -882,7 +882,7 @@ vect_model_store_cost (stmt_vec_info stmt_info, int ncopies, { /* Uses a high and low interleave operation for each needed permute. */ inside_cost = ncopies * exact_log2(group_size) * group_size - * vect_get_stmt_cost (vector_stmt); + * vect_get_stmt_cost (vec_perm); if (vect_print_dump_info (REPORT_COST)) fprintf (vect_dump, "vect_model_store_cost: strided group_size = %d .", @@ -988,7 +988,7 @@ vect_model_load_cost (stmt_vec_info stmt_info, int ncopies, bool load_lanes_p, { /* Uses an even and odd extract operations for each needed permute. */ inside_cost = ncopies * exact_log2(group_size) * group_size - * vect_get_stmt_cost (vector_stmt); + * vect_get_stmt_cost (vec_perm); if (vect_print_dump_info (REPORT_COST)) fprintf (vect_dump, "vect_model_load_cost: strided group_size = %d .", -- cgit v1.1