aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authorJim Wilson <wilson@cygnus.com>2000-09-08 01:35:53 +0000
committerJim Wilson <wilson@gcc.gnu.org>2000-09-07 18:35:53 -0700
commit46146529f66e8e16ad5eef0eb286d903722649e5 (patch)
tree1249b18fdb950c858b6285494d6803b5dbb322ab /gcc/reload.c
parentf1158db34242a2bfcce395ebbe4f6ab7a1eaa759 (diff)
downloadgcc-46146529f66e8e16ad5eef0eb286d903722649e5.zip
gcc-46146529f66e8e16ad5eef0eb286d903722649e5.tar.gz
gcc-46146529f66e8e16ad5eef0eb286d903722649e5.tar.bz2
Fix ia64-linux compiler abort on perl.
* reload.c (push_reload): Use CLASS_CANNOT_CHANGE_MODE_P in addition to CLASS_CANNOT_CHANGE_MODE. * config/ia64/ia64.h (CLASS_CANNOT_CHANGE_MODE_P): True only if the mode classes are different. From-SVN: r36256
Diffstat (limited to 'gcc/reload.c')
-rw-r--r--gcc/reload.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/reload.c b/gcc/reload.c
index d83b1f6..d8abd39 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -946,7 +946,8 @@ push_reload (in, out, inloc, outloc, class,
if (in != 0 && GET_CODE (in) == SUBREG
&& (SUBREG_WORD (in) == 0 || strict_low)
#ifdef CLASS_CANNOT_CHANGE_MODE
- && class != CLASS_CANNOT_CHANGE_MODE
+ && (class != CLASS_CANNOT_CHANGE_MODE
+ || ! CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (in)), inmode))
#endif
&& (CONSTANT_P (SUBREG_REG (in))
|| GET_CODE (SUBREG_REG (in)) == PLUS
@@ -1051,7 +1052,9 @@ push_reload (in, out, inloc, outloc, class,
if (out != 0 && GET_CODE (out) == SUBREG
&& (SUBREG_WORD (out) == 0 || strict_low)
#ifdef CLASS_CANNOT_CHANGE_MODE
- && class != CLASS_CANNOT_CHANGE_MODE
+ && (class != CLASS_CANNOT_CHANGE_MODE
+ || ! CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (out)),
+ outmode))
#endif
&& (CONSTANT_P (SUBREG_REG (out))
|| strict_low