From e291e4eed1807ee9b4566c604c8cde5ef9c6e584 Mon Sep 17 00:00:00 2001 From: rth Date: Fri, 5 May 2000 16:48:24 +0000 Subject: [PATCH] * rtlanal.c (reg_overlap_mentioned_p): Treat parallels in the same way emit_group_load does. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33715 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/rtlanal.c | 27 ++++++++++++++++----------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e0e69d5..84e96eb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-05-05 Richard Henderson + + * rtlanal.c (reg_overlap_mentioned_p): Treat parallels in the + same way emit_group_load does. + 2000-05-05 Mark Elbrecht * toplev.c (output_file_directive): Use IS_DIR_SEPARATOR. diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index 2f9b376..8a3eb62 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -992,17 +992,22 @@ reg_overlap_mentioned_p (x, in) return reg_mentioned_p (x, in); case PARALLEL: - if (GET_MODE (x) == BLKmode) - { - register int i; - - /* If any register in here refers to it we return true. */ - for (i = XVECLEN (x, 0) - 1; i >= 0; i--) - if (reg_overlap_mentioned_p (SET_DEST (XVECEXP (x, 0, i)), in)) - return 1; - return 0; - } - break; + { + int i, n; + + /* Check for a NULL entry, used to indicate that the parameter goes + both on the stack and in registers. */ + if (XEXP (XVECEXP (x, 0, 0), 0)) + i = 0; + else + i = 1; + + /* If any register in here refers to it we return true. */ + for (n = XVECLEN (x, 0); i < n; ++i) + if (reg_overlap_mentioned_p (XEXP (XVECEXP (x, 0, i), 0), in)) + return 1; + return 0; + } default: break; -- 2.7.4