diff options
author | Jeffrey A Law <law@cygnus.com> | 1998-03-26 23:51:11 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-03-26 16:51:11 -0700 |
commit | 64d3b4ca2df1dc216f16d05b4e8667237eceeb8a (patch) | |
tree | 0a29b4dc71dd63cac1c341fe037ab31ad9d3d658 /gcc/regclass.c | |
parent | e6e52be0731568a32b46ca158cd8ef5c3835f1c6 (diff) | |
download | gcc-64d3b4ca2df1dc216f16d05b4e8667237eceeb8a.zip gcc-64d3b4ca2df1dc216f16d05b4e8667237eceeb8a.tar.gz gcc-64d3b4ca2df1dc216f16d05b4e8667237eceeb8a.tar.bz2 |
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
Diffstat (limited to 'gcc/regclass.c')
-rw-r--r-- | gcc/regclass.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/regclass.c b/gcc/regclass.c index 396222b..e964e99 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 |