From cc9fe6bbd78a0b1740c5c1c5713d36e3da6e7165 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Tue, 17 Oct 2017 19:35:54 +0200 Subject: [PATCH] target.h (enum vect_cost_for_stmt): Add vec_gather_load and vec_scatter_store * target.h (enum vect_cost_for_stmt): Add vec_gather_load and vec_scatter_store * tree-vect-stmts.c (record_stmt_cost): Make difference between normal and scatter/gather ops. * aarch64/aarch64.c (aarch64_builtin_vectorization_cost): Add vec_gather_load and vec_scatter_store. * arm/arm.c (arm_builtin_vectorization_cost): Likewise. * powerpcspe/powerpcspe.c (rs6000_builtin_vectorization_cost): Likewise. * rs6000/rs6000.c (rs6000_builtin_vectorization_cost): Likewise. * s390/s390.c (s390_builtin_vectorization_cost): Likewise. * spu/spu.c (spu_builtin_vectorization_cost): Likewise. From-SVN: r253823 --- gcc/ChangeLog | 15 +++++++++++++++ gcc/config/aarch64/aarch64.c | 2 ++ gcc/config/arm/arm.c | 2 ++ gcc/config/powerpcspe/powerpcspe.c | 2 ++ gcc/config/rs6000/rs6000.c | 2 ++ gcc/config/s390/s390.c | 2 ++ gcc/config/spu/spu.c | 2 ++ gcc/target.h | 2 ++ gcc/tree-vect-stmts.c | 6 ++++++ 9 files changed, 35 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3c7fac739df..6b9a62eac2f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,18 @@ +2017-10-17 Jan Hubicka + + * target.h (enum vect_cost_for_stmt): Add vec_gather_load and + vec_scatter_store + * tree-vect-stmts.c (record_stmt_cost): Make difference between normal + and scatter/gather ops. + + * aarch64/aarch64.c (aarch64_builtin_vectorization_cost): Add + vec_gather_load and vec_scatter_store. + * arm/arm.c (arm_builtin_vectorization_cost): Likewise. + * powerpcspe/powerpcspe.c (rs6000_builtin_vectorization_cost): Likewise. + * rs6000/rs6000.c (rs6000_builtin_vectorization_cost): Likewise. + * s390/s390.c (s390_builtin_vectorization_cost): Likewise. + * spu/spu.c (spu_builtin_vectorization_cost): Likewise. + 2017-10-17 Uros Bizjak * reg-stack.c (compare_for_stack_reg): Add bool argument. diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index ec055876a74..ed30b8c5858 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -8559,9 +8559,11 @@ aarch64_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, return costs->scalar_to_vec_cost; case unaligned_load: + case vector_gather_load: return costs->vec_unalign_load_cost; case unaligned_store: + case vector_scatter_store: return costs->vec_unalign_store_cost; case cond_branch_taken: diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 557c971e80d..013e7d91df0 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -11253,9 +11253,11 @@ arm_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, return current_tune->vec_costs->scalar_to_vec_cost; case unaligned_load: + case vector_gather_load: return current_tune->vec_costs->vec_unalign_load_cost; case unaligned_store: + case vector_scatter_store: return current_tune->vec_costs->vec_unalign_store_cost; case cond_branch_taken: diff --git a/gcc/config/powerpcspe/powerpcspe.c b/gcc/config/powerpcspe/powerpcspe.c index 528f62da71d..0f90e95f1e0 100644 --- a/gcc/config/powerpcspe/powerpcspe.c +++ b/gcc/config/powerpcspe/powerpcspe.c @@ -5855,6 +5855,7 @@ rs6000_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, return 3; case unaligned_load: + case vector_gather_load: if (TARGET_P9_VECTOR) return 3; @@ -5896,6 +5897,7 @@ rs6000_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, return 2; case unaligned_store: + case vector_scatter_store: if (TARGET_EFFICIENT_UNALIGNED_VSX) return 1; diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index b08cd316e68..4837e14a0e6 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -5419,6 +5419,7 @@ rs6000_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, return 3; case unaligned_load: + case vector_gather_load: if (TARGET_EFFICIENT_UNALIGNED_VSX) return 1; @@ -5457,6 +5458,7 @@ rs6000_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, return 2; case unaligned_store: + case vector_scatter_store: if (TARGET_EFFICIENT_UNALIGNED_VSX) return 1; diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 3ef3c197fed..6e3ac3b7d0f 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -3717,6 +3717,8 @@ s390_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, case vector_stmt: case vector_load: case vector_store: + case vector_gather_load: + case vector_scatter_store: case vec_to_scalar: case scalar_to_vec: case cond_branch_not_taken: diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c index b9af9a969f7..eda7fcaaeb9 100644 --- a/gcc/config/spu/spu.c +++ b/gcc/config/spu/spu.c @@ -6640,6 +6640,8 @@ spu_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, return 2; case unaligned_load: + case vector_gather_load: + case vector_scatter_store: return 2; case cond_branch_taken: diff --git a/gcc/target.h b/gcc/target.h index ac43b16a549..62601933338 100644 --- a/gcc/target.h +++ b/gcc/target.h @@ -171,9 +171,11 @@ enum vect_cost_for_stmt scalar_store, vector_stmt, vector_load, + vector_gather_load, unaligned_load, unaligned_store, vector_store, + vector_scatter_store, vec_to_scalar, scalar_to_vec, cond_branch_not_taken, diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index d3fa5164238..7e5fe4c7cad 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -95,6 +95,12 @@ record_stmt_cost (stmt_vector_for_cost *body_cost_vec, int count, enum vect_cost_for_stmt kind, stmt_vec_info stmt_info, int misalign, enum vect_cost_model_location where) { + if ((kind == vector_load || kind == unaligned_load) + && STMT_VINFO_GATHER_SCATTER_P (stmt_info)) + kind = vector_gather_load; + if ((kind == vector_store || kind == unaligned_store) + && STMT_VINFO_GATHER_SCATTER_P (stmt_info)) + kind = vector_scatter_store; if (body_cost_vec) { tree vectype = stmt_info ? stmt_vectype (stmt_info) : NULL_TREE; -- 2.30.2