nios2.c (nios2_legitimize_address): When handling 'reg + reloc' cases...
authorChung-Lin Tang <cltang@codesourcery.com>
Tue, 22 Sep 2015 12:19:27 +0000 (12:19 +0000)
committerChung-Lin Tang <cltang@gcc.gnu.org>
Tue, 22 Sep 2015 12:19:27 +0000 (12:19 +0000)
2015-09-22  Chung-Lin Tang  <cltang@codesourcery.com>

* config/nios2/nios2.c (nios2_legitimize_address): When handling
'reg + reloc' cases, allow first operand to be non-REG, and use
force_reg() to enforce address pattern.

From-SVN: r228012

gcc/ChangeLog
gcc/config/nios2/nios2.c

index 3de9aef06351a37b90deb0237aaf60b9b01fbc2c..7eb8b6dbf7f408abf16db12d1d6d816c043aff8b 100644 (file)
@@ -1,3 +1,9 @@
+2015-09-22  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       * config/nios2/nios2.c (nios2_legitimize_address): When handling
+       'reg + reloc' cases, allow first operand to be non-REG, and use
+       force_reg() to enforce address pattern.
+
 2015-09-22  Alexander Fomin <alexander.fomin@intel.com>
 
        PR target/67480
index 0fb11ea968c4ff334a713b972d71e67d94780e95..76bc85dcc7a18fb2489f419fb8216d41c2bf2118 100644 (file)
@@ -2265,15 +2265,15 @@ nios2_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
 
      Which will be output as '%tls_le(var+48)(r23)' in assembly.  */
   if (GET_CODE (x) == PLUS
-      && GET_CODE (XEXP (x, 0)) == REG
       && GET_CODE (XEXP (x, 1)) == CONST)
     {
-      rtx unspec, offset, reg = XEXP (x, 0);
+      rtx unspec, offset;
       split_const (XEXP (x, 1), &unspec, &offset);
       if (GET_CODE (unspec) == UNSPEC
          && !nios2_large_offset_p (XINT (unspec, 1))
          && offset != const0_rtx)
        {
+         rtx reg = force_reg (Pmode, XEXP (x, 0));
          unspec = copy_rtx (unspec);
          XVECEXP (unspec, 0, 0)
            = plus_constant (Pmode, XVECEXP (unspec, 0, 0), INTVAL (offset));