Compilation of the boinc package currently fails with an ICE caused by adjusting an address with a misaligned offset in adjust_address. This occurs when the adjustment occurs for an INT5 offset that is always valid and an INT14 offset whose validity is mode dependent. The offsetable address check doesn't work well here because QImode offsets within the INT14 range are always
valid.

The fix is to simply not check the validity of the adjustment. The result is better checked by the
assembler and runtime execution.

Tested on hppa-unknown-linux-gnu and hppa2.0w-hp-hpux11.11. Committed to active branches.

Dave
--
John David Anglin       dave.ang...@bell.net


2014-02-24  John David Anglin  <dang...@gcc.gnu.org>

        * config/pa/pa.c (pa_output_move_double): Don't valididate when
        adjusting offsetable addresses.

Index: config/pa/pa.c
===================================================================
--- config/pa/pa.c      (revision 208059)
+++ config/pa/pa.c      (working copy)
@@ -2627,7 +2627,7 @@
   if (optype0 == REGOP)
     latehalf[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
   else if (optype0 == OFFSOP)
-    latehalf[0] = adjust_address (operands[0], SImode, 4);
+    latehalf[0] = adjust_address_nv (operands[0], SImode, 4);
   else
     latehalf[0] = operands[0];
 
@@ -2634,7 +2634,7 @@
   if (optype1 == REGOP)
     latehalf[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
   else if (optype1 == OFFSOP)
-    latehalf[1] = adjust_address (operands[1], SImode, 4);
+    latehalf[1] = adjust_address_nv (operands[1], SImode, 4);
   else if (optype1 == CNSTOP)
     split_double (operands[1], &operands[1], &latehalf[1]);
   else

Reply via email to