From ff0dbdd176ddd2bd1f40030e7adedb4d7e090fc1 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Mon, 3 Apr 1995 18:11:26 -0400 Subject: [PATCH] (nonzero_bits, case REG): Check POINTERS_EXTEND_UNSIGNED. (num_sign_bit_copies, case REG): Likewise. From-SVN: r9303 --- gcc/combine.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/gcc/combine.c b/gcc/combine.c index b25191e587f..05ec5d3e8a9 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -6752,10 +6752,18 @@ nonzero_bits (x, mode) sp_alignment = MIN (PUSH_ROUNDING (1), sp_alignment); #endif - return nonzero & ~ (sp_alignment - 1); + nonzero &= ~ (sp_alignment - 1); } #endif +#ifdef POINTERS_EXTEND_UNSIGNED + /* If pointers extend unsigned and this is a pointer in Pmode, say that + all the bits above ptr_mode are known to be zero. */ + if (POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode + && REGNO_POINTER_FLAG (REGNO (x))) + nonzero &= GET_MODE_MASK (ptr_mode); +#endif + /* If X is a register whose nonzero bits value is current, use it. Otherwise, if X is a register whose value we can find, use that value. Otherwise, use the previously-computed global nonzero bits @@ -7091,6 +7099,14 @@ num_sign_bit_copies (x, mode) { case REG: +#ifdef POINTERS_EXTEND_UNSIGNED + /* If pointers extend signed and this is a pointer in Pmode, say that + all the bits above ptr_mode are known to be sign bit copies. */ + if (! POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode && mode == Pmode + && REGNO_POINTER_FLAG (REGNO (x))) + return GET_MODE_BITSIZE (Pmode) - GET_MODE_BITSIZE (ptr_mode) + 1; +#endif + if (reg_last_set_value[REGNO (x)] != 0 && reg_last_set_mode[REGNO (x)] == mode && (reg_n_sets[REGNO (x)] == 1 -- 2.30.2