Building mainline I got

> .../aarch64.c:4879:134: error: invalid conversion from ‘reg_class_t {aka 
> int}’ to ‘machine_mode’ [-fpermissive]
>    if (! TARGET_SIMD && GET_MODE_SIZE (from) == 128 && GET_MODE_SIZE (to) == 
> 128)

Sure enough, TO and FROM are not modes.  Did mainline just change away from
permissive or something?  It surely seems like we ought to have seen this
earlier...

Anyway, applied as obvious to all active branches.


r~
        * config/aarch64/aarch64.c (aarch64_register_move_cost): Pass a mode
        to GET_MODE_SIZE, not a reg_class_t.



diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index a3147ee..7b6c2b3 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -4847,9 +4847,11 @@ aarch64_address_cost (rtx x ATTRIBUTE_UNUSED,
 }
 
 static int
-aarch64_register_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED,
-                           reg_class_t from, reg_class_t to)
+aarch64_register_move_cost (enum machine_mode mode,
+                           reg_class_t from_i, reg_class_t to_i)
 {
+  enum reg_class from = (enum reg_class) from_i;
+  enum reg_class to = (enum reg_class) to_i;
   const struct cpu_regmove_cost *regmove_cost
     = aarch64_tune_params->regmove_cost;
 
@@ -4875,8 +4877,7 @@ aarch64_register_move_cost (enum machine_mode mode 
ATTRIBUTE_UNUSED,
      secondary reload.  A general register is used as a scratch to move
      the upper DI value and the lower DI value is moved directly,
      hence the cost is the sum of three moves. */
-
-  if (! TARGET_SIMD && GET_MODE_SIZE (from) == 128 && GET_MODE_SIZE (to) == 
128)
+  if (! TARGET_SIMD && GET_MODE_SIZE (mode) == 128)
     return regmove_cost->GP2FP + regmove_cost->FP2GP + regmove_cost->FP2FP;
 
   return regmove_cost->FP2FP;

Reply via email to