aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-05-15 10:43:42 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1993-05-15 10:43:42 -0400
commite8095e803fe2b9d3b1200beeb2cbd47d2f419441 (patch)
treee5299038e17290a0f2a0eeb6b7f02ba20accf8d7 /gcc
parent8c25f9f8319413dd6bbafc9e4971fb1909436ad0 (diff)
downloadgcc-e8095e803fe2b9d3b1200beeb2cbd47d2f419441.zip
gcc-e8095e803fe2b9d3b1200beeb2cbd47d2f419441.tar.gz
gcc-e8095e803fe2b9d3b1200beeb2cbd47d2f419441.tar.bz2
(set_nonzero_bits_and_sign_copies): Don't record data for a a pseudo that is undefined on entry to a function.
(set_nonzero_bits_and_sign_copies): Don't record data for a a pseudo that is undefined on entry to a function. When a pseudo is clobbered, show we don't know anything about it. From-SVN: r4471
Diffstat (limited to 'gcc')
-rw-r--r--gcc/combine.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index 66375ff..e53d1a6 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -666,10 +666,18 @@ set_nonzero_bits_and_sign_copies (x, set)
&& REGNO (x) >= FIRST_PSEUDO_REGISTER
&& reg_n_sets[REGNO (x)] > 1
&& reg_basic_block[REGNO (x)] < 0
+ /* If this register is undefined at the start of the file, we can't
+ say what its contents were. */
+ && ! (basic_block_live_at_start[0][REGNO (x) / REGSET_ELT_BITS]
+ & ((REGSET_ELT_TYPE) 1 << (REGNO (x) % REGSET_ELT_BITS)))
&& GET_MODE_BITSIZE (GET_MODE (x)) <= HOST_BITS_PER_WIDE_INT)
{
if (GET_CODE (set) == CLOBBER)
- return;
+ {
+ reg_nonzero_bits[REGNO (x)] = GET_MODE_MASK (GET_MODE (x));
+ reg_sign_bit_copies[REGNO (x)] = 0;
+ return;
+ }
/* If this is a complex assignment, see if we can convert it into a
simple assignment. */