+2019-11-11 Kewen Lin <linkw@gcc.gnu.org>
+
+ * 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 <iain@sandoe.co.uk>
* config/darwin.h (MACHO_SYMBOL_FLAG_LINKER_VIS): New.
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. */
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;
-
- if (TARGET_VSX && TARGET_ALLOW_MOVMISALIGN)
- {
- elements = TYPE_VECTOR_SUBPARTS (vectype);
- if (elements == 2)
- /* Double word aligned. */
- return 2;
-
- if (elements == 4)
- {
- switch (misalign)
- {
- case 8:
- /* Double word aligned. */
- return 2;
+ return 2;
- case -1:
- /* Unknown misalignment. */
- case 4:
- case 12:
- /* Word aligned. */
- return 22;
+ if (TARGET_VSX && TARGET_ALLOW_MOVMISALIGN)
+ {
+ elements = TYPE_VECTOR_SUBPARTS (vectype);
+ if (elements == 2)
+ /* Double word aligned. */
+ return 4;
- default:
- gcc_unreachable ();
- }
- }
- }
+ if (elements == 4)
+ {
+ switch (misalign)
+ {
+ case 8:
+ /* Double word aligned. */
+ return 4;
+
+ case -1:
+ /* Unknown misalignment. */
+ case 4:
+ case 12:
+ /* Word aligned. */
+ return 33;
+
+ 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: