From 64d3b4ca2df1dc216f16d05b4e8667237eceeb8a Mon Sep 17 00:00:00 2001 From: Jeffrey A Law Date: Thu, 26 Mar 1998 23:51:11 +0000 Subject: [PATCH] regclass.c (reg_scan_mark_refs): Be more selective about when we mark a register with REGNO_POINTER_FLAG. * regclass.c (reg_scan_mark_refs): Be more selective about when we mark a register with REGNO_POINTER_FLAG. From-SVN: r18849 --- gcc/ChangeLog | 5 +++++ gcc/regclass.c | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a86f834ee33..54a1c3e40e0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Fri Mar 27 00:49:46 1998 Jeffrey A Law (law@cygnus.com) + + * regclass.c (reg_scan_mark_refs): Be more selective about + when we mark a register with REGNO_POINTER_FLAG. + Thu Mar 26 23:00:11 1998 J"orn Rennecke reload inheritance improvement: diff --git a/gcc/regclass.c b/gcc/regclass.c index 396222b7192..e964e99a82c 100644 --- a/gcc/regclass.c +++ b/gcc/regclass.c @@ -1919,6 +1919,12 @@ reg_scan_mark_refs (x, insn, note_flag) if (GET_CODE (SET_DEST (x)) == REG && REGNO (SET_DEST (x)) >= FIRST_PSEUDO_REGISTER + /* If the destination pseudo is set more than once, then other + sets might not be to a pointer value (consider access to a + union in two threads of control in the presense of global + optimizations). So only set REGNO_POINTER_FLAG on the destination + pseudo if this is the only set of that pseudo. */ + && REG_N_SETS (REGNO (SET_DEST (x))) == 1 && ! REG_USERVAR_P (SET_DEST (x)) && ! REGNO_POINTER_FLAG (REGNO (SET_DEST (x))) && ((GET_CODE (SET_SRC (x)) == REG