diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c914ab4f4f8..d34890b7b81 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2019-11-11 Kewen Lin + + * config/rs6000/rs6000.c (rs6000_builtin_vectorization_cost): + Make scalar_load, vector_load, unaligned_load and + vector_gather_load cost more to conform hardware latency and + insn cost settings. + 2019-11-10 Iain Sandoe * config/darwin.h (MACHO_SYMBOL_FLAG_LINKER_VIS): New. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index d48157a975c..6e67db75590 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -4783,15 +4783,17 @@ rs6000_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, switch (type_of_cost) { case scalar_stmt: - case scalar_load: case scalar_store: case vector_stmt: - case vector_load: case vector_store: case vec_to_scalar: case scalar_to_vec: case cond_branch_not_taken: return 1; + case scalar_load: + case vector_load: + /* Like rs6000_insn_cost, make load insns cost a bit more. */ + return 2; case vec_perm: /* Power7 has only one permute unit, make it a bit expensive. */ @@ -4812,42 +4814,44 @@ rs6000_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, case unaligned_load: case vector_gather_load: + /* Like rs6000_insn_cost, make load insns cost a bit more. */ if (TARGET_EFFICIENT_UNALIGNED_VSX) - return 1; + return 2; - if (TARGET_VSX && TARGET_ALLOW_MOVMISALIGN) - { - elements = TYPE_VECTOR_SUBPARTS (vectype); - if (elements == 2) - /* Double word aligned. */ - return 2; + if (TARGET_VSX && TARGET_ALLOW_MOVMISALIGN) + { + elements = TYPE_VECTOR_SUBPARTS (vectype); + if (elements == 2) + /* Double word aligned. */ + return 4; - if (elements == 4) - { - switch (misalign) - { - case 8: - /* Double word aligned. */ - return 2; + if (elements == 4) + { + switch (misalign) + { + case 8: + /* Double word aligned. */ + return 4; - case -1: - /* Unknown misalignment. */ - case 4: - case 12: - /* Word aligned. */ - return 22; + case -1: + /* Unknown misalignment. */ + case 4: + case 12: + /* Word aligned. */ + return 33; - default: - gcc_unreachable (); - } - } - } + default: + gcc_unreachable (); + } + } + } - if (TARGET_ALTIVEC) - /* Misaligned loads are not supported. */ - gcc_unreachable (); + if (TARGET_ALTIVEC) + /* Misaligned loads are not supported. */ + gcc_unreachable (); - return 2; + /* Like rs6000_insn_cost, make load insns cost a bit more. */ + return 4; case unaligned_store: case vector_scatter_store: