From: Richard Kenner Date: Mon, 3 Apr 1995 22:11:26 +0000 (-0400) Subject: (nonzero_bits, case REG): Check POINTERS_EXTEND_UNSIGNED. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ff0dbdd176ddd2bd1f40030e7adedb4d7e090fc1;p=gcc.git (nonzero_bits, case REG): Check POINTERS_EXTEND_UNSIGNED. (num_sign_bit_copies, case REG): Likewise. From-SVN: r9303 --- 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