This patch fixes a failure in gcc.target/aarch64/reload-valid-spoff.c triggered...
authorWilco Dijkstra <wdijkstr@arm.com>
Wed, 28 Jun 2017 14:21:04 +0000 (14:21 +0000)
committerWilco Dijkstra <wilco@gcc.gnu.org>
Wed, 28 Jun 2017 14:21:04 +0000 (14:21 +0000)
This patch fixes a failure in gcc.target/aarch64/reload-valid-spoff.c
triggered by https://gcc.gnu.org/ml/gcc-patches/2017-06/msg01367.html.

In ILP32 all memory accesses must have Pmode as the base address, but
aarch64_expand_mov_immediate wasn't emitting a conversion in one case.
Besides fixing this add an assert that flags any MEM operands that are
not Pmode.

    gcc/
* config/aarch64/aarch64 (aarch64_expand_mov_immediate):
Convert memory address to Pmode.
(aarch64_print_operand): Assert MEM operands are always Pmode.

From-SVN: r249741

gcc/ChangeLog
gcc/config/aarch64/aarch64.c

index 0ed9bfc8580ff3e9ce21f75ce3c1546ea775f802..293671b8ff285b952aca69a1aa35ac7a72209e63 100644 (file)
@@ -1,3 +1,9 @@
+2017-06-28  Wilco Dijkstra  <wdijkstr@arm.com>
+
+       * config/aarch64/aarch64 (aarch64_expand_mov_immediate):
+       Convert memory address to Pmode.
+       (aarch64_print_operand): Assert MEM operands are always Pmode.
+
 2017-06-28  Wilco Dijkstra  <wdijkstr@arm.com>
 
        PR target/79665
index 6bff74c86a69b2c9525cec3aaa5eff5f9af5ea82..593263ff9b2900be4ca2c08aa27473f0e2e2a781 100644 (file)
@@ -2002,6 +2002,8 @@ aarch64_expand_mov_immediate (rtx dest, rtx imm)
              gcc_assert (can_create_pseudo_p ());
              base = gen_reg_rtx (ptr_mode);
              aarch64_expand_mov_immediate (base, XEXP (mem, 0));
+             if (ptr_mode != Pmode)
+               base = convert_memory_address (Pmode, base);
              mem = gen_rtx_MEM (ptr_mode, base);
            }
 
@@ -5265,6 +5267,8 @@ aarch64_print_operand (FILE *f, rtx x, int code)
 
        case MEM:
          output_address (GET_MODE (x), XEXP (x, 0));
+         /* Check all memory references are Pmode - even with ILP32.  */
+         gcc_assert (GET_MODE (XEXP (x, 0)) == Pmode);
          break;
 
        case CONST: