Message ID | 87zj3fnbmt.fsf@e105548-lin.cambridge.arm.com |
---|---|
State | New |
Headers | show |
On 07/01/2015 09:25 AM, Richard Sandiford wrote: > Richard Biener <richard.guenther@gmail.com> writes: >> On Wed, Jul 1, 2015 at 10:27 AM, Richard Sandiford >> <richard.sandiford@arm.com> wrote: >>> This patch should restore bootstrap on hppa (and probably other targets >>> besides). The change to use target-insns.def put more stress on the >>> emit()/classify_insn() group of functions, which were missing a case >>> for parallel returns. >>> >>> Tested with a cross-compiler that it fixes the hppa problem. Bootstrap >>> in progress on x86_64-linux-gnu. OK to install? >> >> Ok. > > I think this has probably broken bootstrap on powerpc64, where sibcalls > have both calls and returns. The loop picks the last candidate, > which is the return. > > Is this patch OK? > > Thanks, > Richard > > gcc/ > PR bootstrap/66685 > * rtl.c (classify_insn): Only return JUMP_INSN for parallel returns if > there are no CALLs in the same pattern. OK. jeff
Index: gcc/rtl.c =================================================================== --- gcc/rtl.c 2015-07-01 16:19:55.055415254 +0100 +++ gcc/rtl.c 2015-07-01 16:19:55.383411635 +0100 @@ -683,17 +683,20 @@ classify_insn (rtx x) if (GET_CODE (x) == PARALLEL) { int j; + bool has_return_p = false; for (j = XVECLEN (x, 0) - 1; j >= 0; j--) if (GET_CODE (XVECEXP (x, 0, j)) == CALL) return CALL_INSN; else if (ANY_RETURN_P (XVECEXP (x, 0, j))) - return JUMP_INSN; + has_return_p = true; else if (GET_CODE (XVECEXP (x, 0, j)) == SET && GET_CODE (SET_DEST (XVECEXP (x, 0, j))) == PC) return JUMP_INSN; else if (GET_CODE (XVECEXP (x, 0, j)) == SET && GET_CODE (SET_SRC (XVECEXP (x, 0, j))) == CALL) return CALL_INSN; + if (has_return_p) + return JUMP_INSN; } #ifdef GENERATOR_FILE if (GET_CODE (x) == MATCH_OPERAND