Hi Richard,

On 24/01/16 10:54, Richard Henderson wrote:
This looks to be an incomplete transition of the aarch64 backend to 
CONST_WIDE_INT.  I haven't checked to see if it's a regression from gcc5, but I 
suspect not, since there should have been similar checks for CONST_DOUBLE.


FWIW, I defined TARGET_SUPPORTS_WIDE_INT for aarch64 on trunk and the GCC 5 
branch in order to fix
PR 68129.

This is probably gcc7 fodder, but it helped me debug another TImode PR.


r~

+    case CONST_WIDE_INT:
+      *cost = 0;
+      for (unsigned int n = CONST_WIDE_INT_NUNITS(x), i = 0; i < n; ++i)
+       {
+         unsigned HOST_WIDE_INT e = CONST_WIDE_INT_ELT(x, i);
+         if (e != 0)
+           *cost += COSTS_N_INSNS (aarch64_internal_mov_immediate
+                                   (NULL_RTX, GEN_INT (e), false, DImode));
+       }
+      return true;
+

We usually avoid creating intermediate rtxes in the cost function because
it can potentially be called many times during compilation and we want to avoid
creating too many short-lived objects, though I suppose there's no way getting
around this one (the GEN_INT call).

Thanks,
Kyrill

Reply via email to