This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fill more delay slots in conditional returns


On 03/25/2013 05:25 AM, Eric Botcazou wrote:
Hi,

for a private port with conditional returns and delay slots, only the simple
algorithm (fill_simple_delay_slots) is able to fill the slots.  It's because
get_branch_condition just punts on conditional returns.

Fixed thusly.  While I investigated this, I realized that the block of code in
fill_simple_delay_slots between line 2097 and line 2274 is dead for JUMP insns
(and has been so for a long time, which is consistent with various comments in
the code, for example the head comment of fill_eager_delay_slots) so the patch
also cleans it up (modulo the formatting to make the patch readable).

Jeff, any objections?  Tested on SPARC/Solaris, no difference in the generated
code at -O2 for the gcc.c-torture/compile testsuite.


2013-03-25  Eric Botcazou<ebotcazou@adacore.com>

	* reorg.c (get_branch_condition): Deal with conditional returns.
	(fill_simple_delay_slots): Remove dead code dealing with jumps.


-- Eric Botcazou


p.diff


Index: reorg.c
===================================================================
--- reorg.c	(revision 196816)
+++ reorg.c	(working copy)
@@ -921,8 +921,8 @@ get_branch_condition (rtx insn, rtx targ
    if (condjump_in_parallel_p (insn))
      pat = XVECEXP (pat, 0, 0);

-  if (ANY_RETURN_P (pat))
-    return pat == target ? const_true_rtx : 0;
+  if (ANY_RETURN_P (pat) && pat == target)
+    return const_true_rtx;
I'm not sure what this is supposed to do. How is pat == target ever going to be true when ANY_RETURN_P (pat) is true? Isn't target supposed to be a CODE_LABEL or NULL? What am I missing?


What does the RTL for your conditional return look like

(if_then_else (cond) (pc) (return))

Where the (pc) and (return) can be reversed as well? That's what the later hunks in get_branch_condition seem to imply.


Maybe if I saw the RTL that first hunk would make sense. It feels like I'm missing something.

The cleanup stuff is OK, check that in whenver you'd like.

jeff




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]