diff options
Diffstat (limited to 'gcc/rtlanal.c')
| -rw-r--r-- | gcc/rtlanal.c | 27 |
1 files changed, 16 insertions, 11 deletions
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; |
