public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Sandiford <richard.sandiford@arm.com>
To: Richard Biener <richard.guenther@gmail.com>
Cc: GCC Patches <gcc-patches@gcc.gnu.org>, segher@kernel.crashing.org
Subject: Re: PR 66685: parallel returns being misclassified
Date: Wed, 01 Jul 2015 15:25:00 -0000	[thread overview]
Message-ID: <87zj3fnbmt.fsf@e105548-lin.cambridge.arm.com> (raw)
In-Reply-To: <CAFiYyc2MRO2kmboSkwv-jCcSfs9S4s5J-r-dovC1iECpoBonOw@mail.gmail.com>	(Richard Biener's message of "Wed, 1 Jul 2015 10:34:57 +0200")

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.

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

  reply	other threads:[~2015-07-01 15:25 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-01  8:27 Richard Sandiford
2015-07-01  8:35 ` Richard Biener
2015-07-01 15:25   ` Richard Sandiford [this message]
2015-07-01 16:45     ` Jeff Law

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87zj3fnbmt.fsf@e105548-lin.cambridge.arm.com \
    --to=richard.sandiford@arm.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=richard.guenther@gmail.com \
    --cc=segher@kernel.crashing.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).