* [committed] Fix PR target/56214
@ 2013-02-18 15:39 John David Anglin
0 siblings, 0 replies; only message in thread
From: John David Anglin @ 2013-02-18 15:39 UTC (permalink / raw)
To: gcc-patches
The attached change fixes PR target/56214. We need to reject everything
but QImode and HImode when reload is in progress and strict is specified.
Tested on hppa2.0w-hp-hpux11.11 and hppa64-hp-hpux11.11. Committed to
trunk.
Dave
--
J. David Anglin dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6602)
2013-02-18 John David Anglin <dave.anglin@nrc-cnrc.ca>
PR target/56214
* config/pa/predicates.md (base14_operand): Except for BLKmode, QImode
and HImode, require all displacements to be an integer multiple of their
mode size.
* config/pa/pa.c (pa_legitimate_address_p): For REG+BASE addresses,
only allow QImode and HImode when reload is in progress and strict is
true. Likewise for symbolic addresses. Use base14_operand to check
displacements in REG+BASE addresses.
Index: config/pa/predicates.md
===================================================================
--- config/pa/predicates.md (revision 196102)
+++ config/pa/predicates.md (working copy)
@@ -272,22 +272,13 @@
assumed in the instruction encoding. */
switch (mode)
{
+ case BLKmode:
case QImode:
case HImode:
return true;
- case SImode:
- case SFmode:
- case SCmode:
- return (INTVAL (op) % 4) == 0;
-
- case DImode:
- case DFmode:
- case DCmode:
- return (INTVAL (op) % 8) == 0;
-
default:
- break;
+ return (INTVAL (op) % GET_MODE_SIZE (mode)) == 0;
}
return false;
Index: config/pa/pa.c
===================================================================
--- config/pa/pa.c (revision 196102)
+++ config/pa/pa.c (working copy)
@@ -10517,21 +10532,13 @@
the majority of accesses will use floating point instructions
that don't support 14-bit offsets. */
if (!INT14_OK_STRICT
- && (GET_MODE_CLASS (mode) == MODE_FLOAT
- || (reload_in_progress
- && strict
- && (mode == SImode || mode == DImode))))
- return false;
+ && reload_in_progress
+ && strict
+ && mode != QImode
+ && mode != HImode)
+ return false;
- if (INT_14_BITS (index)
- && (mode == BLKmode
- || mode == QImode
- || mode == HImode
- /* Displacement must be a multiple of its size. */
- || (INTVAL (index) % GET_MODE_SIZE (mode)) == 0))
- return true;
-
- return false;
+ return base14_operand (index, mode);
}
if (!TARGET_DISABLE_INDEXING
@@ -10586,11 +10593,11 @@
return true;
if (!INT14_OK_STRICT
- && (GET_MODE_CLASS (mode) == MODE_FLOAT
- || (reload_in_progress
- && strict
- && (mode == SImode || mode == DImode))))
- return false;
+ && reload_in_progress
+ && strict
+ && mode != QImode
+ && mode != HImode)
+ return false;
if (CONSTANT_P (XEXP (x, 1)))
return true;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2013-02-18 15:39 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-02-18 15:39 [committed] Fix PR target/56214 John David Anglin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).