diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1992-06-24 19:14:43 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1992-06-24 19:14:43 -0400 |
commit | 08af8e094f5a13d5e80823f2b6c239c68533bb53 (patch) | |
tree | a6699d9d404221460e98ab50b0e63df35b1f46b1 /gcc/expr.c | |
parent | 5959a6cddfe1a70d79dcd5de0fe4da1cc2efd059 (diff) | |
download | gcc-08af8e094f5a13d5e80823f2b6c239c68533bb53.tar.gz |
*** empty log message ***
From-SVN: r1279
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 14 |
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; |