diff mbox

PR 66685: parallel returns being misclassified

Message ID 87zj3fnbmt.fsf@e105548-lin.cambridge.arm.com
State New
Headers show

Commit Message

Richard Sandiford July 1, 2015, 3:25 p.m. UTC
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.

Comments

Jeff Law July 1, 2015, 4:46 p.m. UTC | #1
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
diff mbox

Patch

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