summaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1992-06-24 19:14:43 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1992-06-24 19:14:43 -0400
commit08af8e094f5a13d5e80823f2b6c239c68533bb53 (patch)
treea6699d9d404221460e98ab50b0e63df35b1f46b1 /gcc/expr.c
parent5959a6cddfe1a70d79dcd5de0fe4da1cc2efd059 (diff)
downloadgcc-08af8e094f5a13d5e80823f2b6c239c68533bb53.tar.gz
*** empty log message ***
From-SVN: r1279
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index fef186e8916..f869b58c9de 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -5927,11 +5927,14 @@ do_jump (exp, if_false_label, if_true_label)
combine can't do this for us because it can't know whether a
ZERO_EXTRACT or a compare in a smaller mode exists, but we do. */
- if (TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST
+ if (! SLOW_BYTE_ACCESS
+ && TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST
&& TYPE_PRECISION (TREE_TYPE (exp)) <= HOST_BITS_PER_INT
&& (i = floor_log2 (TREE_INT_CST_LOW (TREE_OPERAND (exp, 1)))) >= 0
&& (type = type_for_size (i + 1, 1)) != 0
- && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (exp)))
+ && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (exp))
+ && (cmp_optab->handlers[(int) TYPE_MODE (type)].insn_code
+ != CODE_FOR_nothing))
{
do_jump (convert (type, exp), if_false_label, if_true_label);
break;
@@ -5980,8 +5983,11 @@ do_jump (exp, if_false_label, if_true_label)
&mode, &unsignedp, &volatilep);
type = type_for_size (bitsize, unsignedp);
- if (type != 0 && bitsize >= 0
- && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (exp)))
+ if (! SLOW_BYTE_ACCESS
+ && type != 0 && bitsize >= 0
+ && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (exp))
+ && (cmp_optab->handlers[(int) TYPE_MODE (type)].insn_code
+ != CODE_FOR_nothing))
{
do_jump (convert (type, exp), if_false_label, if_true_label);
break;