Hi all,

The testcase gcc.target/aarch64/vldN_lane_1.c ICEs on aarch64 targets when RTL 
checking is enabled.
We end up taking the UINTVAL of a CONST_DOUBLE in 
aarch64_output_simd_mov_immediate.
This is because aarch64_output_simd_mov_immediate only handles SF and DF inner 
modes whereas in
that testcase it ends up being passed a V4HF immediate.

This patch generalises the check and allows for any FP inner mode.
The testcase now compiles successfully with RTL checking enabled.
There are some other RTL checking failures that have been reported in the last 
few days
and I'll tackle them as I go along.

Bootstrapped and tested on aarch64.

Ok for trunk?

Thanks,
Kyrill

2015-10-27  Kyrylo Tkachov  <kyrylo.tkac...@arm.com>

    * config/aarch64/aarch64.c (aarch64_output_simd_mov_immediate):
    Handle floating point inner modes properly.
commit a1714f9da4b4adef0ee2c83cf785b4216725b2fa
Author: Kyrylo Tkachov <kyrylo.tkac...@arm.com>
Date:   Tue Oct 27 10:27:23 2015 +0000

    [AArch64] Handle vector float modes properly in aarch64_output_simd_mov_immediate

diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index f4451f9..771b2cf 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -11432,9 +11432,11 @@ aarch64_output_simd_mov_immediate (rtx const_vector,
   lane_count = width / info.element_width;
 
   mode = GET_MODE_INNER (mode);
-  if (mode == SFmode || mode == DFmode)
+  if (GET_MODE_CLASS (mode) == MODE_FLOAT)
     {
       gcc_assert (info.shift == 0 && ! info.mvn);
+      /* For FP zero change it to a CONST_INT 0 and use the integer SIMD
+	 move immediate path.  */
       if (aarch64_float_const_zero_rtx_p (info.value))
         info.value = GEN_INT (0);
       else
@@ -11458,6 +11460,7 @@ aarch64_output_simd_mov_immediate (rtx const_vector,
   mnemonic = info.mvn ? "mvni" : "movi";
   shift_op = info.msl ? "msl" : "lsl";
 
+  gcc_assert (CONST_INT_P (info.value));
   if (lane_count == 1)
     snprintf (templ, sizeof (templ), "%s\t%%d0, " HOST_WIDE_INT_PRINT_HEX,
 	      mnemonic, UINTVAL (info.value));

Reply via email to