aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJ"orn Rennecke <joern.rennecke@superh.com>2002-07-22 14:22:58 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2002-07-22 15:22:58 +0100
commit0d541696aa1fce80cf0d521be3e1664391526c28 (patch)
tree46ec71384d4da8c03d74e1033eca3bb9635fd5e0 /gcc
parentbb9b3805344933d33cc30323e6d72ae69623f91a (diff)
downloadgcc-0d541696aa1fce80cf0d521be3e1664391526c28.zip
gcc-0d541696aa1fce80cf0d521be3e1664391526c28.tar.gz
gcc-0d541696aa1fce80cf0d521be3e1664391526c28.tar.bz2
optabs.c (expand_vector_unop): Don't expand using sub_optab if we got the wrong mode.
* optabs.c (expand_vector_unop): Don't expand using sub_optab if we got the wrong mode. From-SVN: r55648
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/optabs.c5
2 files changed, 8 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6e8dfd6..1f413bb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,7 @@
-Mon Jul 22 15:18:58 2002 J"orn Rennecke <joern.rennecke@superh.com>
+Mon Jul 22 15:21:41 2002 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * optabs.c (expand_vector_unop): Don't expand using sub_optab
+ if we got the wrong mode.
* hwint.c (define HOST_WIDE_INT_PRINT_DEC_C): New define.
* genrecog.c (write_switch, write_cond): Use it.
diff --git a/gcc/optabs.c b/gcc/optabs.c
index dcb4df5..c2f9863 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -2049,7 +2049,10 @@ expand_vector_unop (mode, unoptab, op0, target, unsignedp)
submode = tmode;
}
/* If there is no negate operation, try doing a subtract from zero. */
- if (unoptab == neg_optab && GET_MODE_CLASS (submode) == MODE_INT)
+ if (unoptab == neg_optab && GET_MODE_CLASS (submode) == MODE_INT
+ /* Avoid infinite recursion when an
+ error has left us with the wrong mode. */
+ && GET_MODE (op0) == mode)
{
rtx temp;
temp = expand_binop (mode, sub_optab, CONST0_RTX (mode), op0,