diff options
author | Bill Schmidt <wschmidt@linux.vnet.ibm.com> | 2012-02-06 21:39:34 +0000 |
---|---|---|
committer | William Schmidt <wschmidt@gcc.gnu.org> | 2012-02-06 21:39:34 +0000 |
commit | c5f14d626e38bf94e2cf8d3bda0409c2c4de1fe6 (patch) | |
tree | ccea64a899c732644dc9afe3e841813e2b2019bc /gcc | |
parent | 9903b69dbd7197ab5ea9a2f8e349d648df0e3f14 (diff) | |
download | gcc-c5f14d626e38bf94e2cf8d3bda0409c2c4de1fe6.zip gcc-c5f14d626e38bf94e2cf8d3bda0409c2c4de1fe6.tar.gz gcc-c5f14d626e38bf94e2cf8d3bda0409c2c4de1fe6.tar.bz2 |
re PR tree-optimization/50969 (17% degradation in 168.wupwise for interleave via permutation)
2012-02-06 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 2 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 6 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 4 |
4 files changed, 19 insertions, 4 deletions
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 <wschmidt@linux.vnet.ibm.com> + + 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 <rguenther@suse.de> 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 .", |