diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2003-08-25 21:11:46 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@gcc.gnu.org> | 2003-08-25 21:11:46 +0000 |
commit | dc5c3188aa4570a39f45540a5e2c823aebb38ff3 (patch) | |
tree | 260e724a6feef7912abb6417fced519a0095722d | |
parent | ff619040add5835e96b9d39a6c5c3e4cfdb14e77 (diff) | |
download | gcc-dc5c3188aa4570a39f45540a5e2c823aebb38ff3.zip gcc-dc5c3188aa4570a39f45540a5e2c823aebb38ff3.tar.gz gcc-dc5c3188aa4570a39f45540a5e2c823aebb38ff3.tar.bz2 |
combine.c (simplify_comparison): Re-enable widening of comparisons with non-paradoxical subregs of non-REG...
* combine.c (simplify_comparison): Re-enable widening of comparisons
with non-paradoxical subregs of non-REG expressions.
From-SVN: r70785
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/combine.c | 12 |
2 files changed, 12 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a2bca73..e23a0e2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2003-08-25 Ulrich Weigand <uweigand@de.ibm.com> + * combine.c (simplify_comparison): Re-enable widening of comparisons + with non-paradoxical subregs of non-REG expressions. + +2003-08-25 Ulrich Weigand <uweigand@de.ibm.com> + * combine.c (distribute_notes): Handle REG_ALWAYS_RETURN. 2003-08-25 Ulrich Weigand <uweigand@de.ibm.com> diff --git a/gcc/combine.c b/gcc/combine.c index afa25b0..cc7c7de 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -11277,9 +11277,6 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1) op1 = make_compound_operation (op1, SET); if (GET_CODE (op0) == SUBREG && subreg_lowpart_p (op0) - /* Case 3 above, to sometimes allow (subreg (mem x)), isn't - implemented. */ - && GET_CODE (SUBREG_REG (op0)) == REG && GET_MODE_CLASS (GET_MODE (op0)) == MODE_INT && GET_MODE_CLASS (GET_MODE (SUBREG_REG (op0))) == MODE_INT && (code == NE || code == EQ)) @@ -11287,8 +11284,13 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1) if (GET_MODE_SIZE (GET_MODE (op0)) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (op0)))) { - op0 = SUBREG_REG (op0); - op1 = gen_lowpart_for_combine (GET_MODE (op0), op1); + /* For paradoxical subregs, allow case 1 as above. Case 3 isn't + implemented. */ + if (GET_CODE (SUBREG_REG (op0)) == REG) + { + op0 = SUBREG_REG (op0); + op1 = gen_lowpart_for_combine (GET_MODE (op0), op1); + } } else if ((GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (op0))) <= HOST_BITS_PER_WIDE_INT) |