From 05ef889761d0e3abce59f40c9cfc85fc9488e83c Mon Sep 17 00:00:00 2001 From: Jeffrey A Law Date: Mon, 15 Sep 1997 21:37:39 +0000 Subject: [PATCH] cse.c (simplify_relational_operation): If MODE specifies a mode wider than HOST_WIDE_INT... * cse.c (simplify_relational_operation): If MODE specifies a mode wider than HOST_WIDE_INT, then the high word of a CONST_INT is derived from the sign bit of the low word. Brought over from r5900 branch. From-SVN: r15454 --- gcc/ChangeLog | 6 ++++++ gcc/cse.c | 18 ++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7d5badd098a..f3b148c10ca 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Mon Sep 15 15:39:26 1997 Jeffrey A Law (law@cygnus.com) + + * cse.c (simplify_relational_operation): If MODE specifies a + mode wider than HOST_WIDE_INT, then the high word of a CONST_INT + is derived from the sign bit of the low word. + 1997-09-15 Brendan Kehoe * except.c (find_exception_handler_labels): Use xmalloc instead of diff --git a/gcc/cse.c b/gcc/cse.c index 71bc3584432..9bcdcc3675e 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -4482,7 +4482,14 @@ simplify_relational_operation (code, mode, op0, op1) else { l0u = l0s = INTVAL (op0); - h0u = 0, h0s = l0s < 0 ? -1 : 0; + h0s = l0s < 0 ? -1 : 0; + /* If WIDTH is nonzero and larger than HOST_BITS_PER_WIDE_INT, + then the high word is derived from the sign bit of the low + word, else the high word is zero. */ + if (width != 0 && width > HOST_BITS_PER_WIDE_INT) + h0u = l0s < 0 ? -1 : 0; + else + h0u = 0; } if (GET_CODE (op1) == CONST_DOUBLE) @@ -4493,7 +4500,14 @@ simplify_relational_operation (code, mode, op0, op1) else { l1u = l1s = INTVAL (op1); - h1u = 0, h1s = l1s < 0 ? -1 : 0; + h1s = l1s < 0 ? -1 : 0; + /* If WIDTH is nonzero and larger than HOST_BITS_PER_WIDE_INT, + then the high word is derived from the sign bit of the low + word, else the high word is zero. */ + if (width != 0 && width > HOST_BITS_PER_WIDE_INT) + h1u = l1s < 0 ? -1 : 0; + else + h1u = 0; } /* If WIDTH is nonzero and smaller than HOST_BITS_PER_WIDE_INT,