re PR target/77324 (ICE in push_reload, at reload.c:1350)
authorEric Botcazou <ebotcazou@adacore.com>
Sun, 28 Aug 2016 08:50:09 +0000 (08:50 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Sun, 28 Aug 2016 08:50:09 +0000 (08:50 +0000)
PR target/77324
* config/sparc/sparc.c (sparc_legitimate_address_p): Accept special
HIGH+LO construct during reload.

From-SVN: r239807

gcc/ChangeLog
gcc/config/sparc/sparc.c

index 9ddb5bd188bb3819157a49dd18626714f17c5564..95fcf6a56561e458d711dad1fcff72fe815b493c 100644 (file)
@@ -1,3 +1,9 @@
+2016-08-28  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR target/77324
+       * config/sparc/sparc.c (sparc_legitimate_address_p): Accept special
+       HIGH+LO construct during reload.
+
 2016-08-28  Tom de Vries  <tom@codesourcery.com>
 
        PR lto/70955
index f5cc113dc0f73189aafd4238f422e7f4e2637b40..254b72298a36d57625f9d6555e2c295e684178e8 100644 (file)
@@ -4039,6 +4039,13 @@ sparc_legitimate_address_p (machine_mode mode, rtx addr, bool strict)
         than the alignment (8) may cause the LO_SUM to overflow.  */
       if (mode == TFmode && TARGET_ARCH32)
        return 0;
+
+      /* During reload, accept the HIGH+LO_SUM construct generated by
+        sparc_legitimize_reload_address.  */
+      if (reload_in_progress
+         && GET_CODE (rs1) == HIGH
+         && XEXP (rs1, 0) == imm1)
+       return 1;
     }
   else if (GET_CODE (addr) == CONST_INT && SMALL_INT (addr))
     return 1;