aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>2012-02-06 21:39:34 +0000
committerWilliam Schmidt <wschmidt@gcc.gnu.org>2012-02-06 21:39:34 +0000
commitc5f14d626e38bf94e2cf8d3bda0409c2c4de1fe6 (patch)
treeccea64a899c732644dc9afe3e841813e2b2019bc /gcc
parent9903b69dbd7197ab5ea9a2f8e349d648df0e3f14 (diff)
downloadgcc-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/ChangeLog11
-rw-r--r--gcc/config/i386/i386.c2
-rw-r--r--gcc/config/rs6000/rs6000.c6
-rw-r--r--gcc/tree-vect-stmts.c4
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 .",