* [PATCH] cfgcleanup: Ignore clobbers in bb_is_just_return
@ 2017-05-18 21:20 Segher Boessenkool
2017-05-22 3:47 ` Jeff Law
0 siblings, 1 reply; 2+ messages in thread
From: Segher Boessenkool @ 2017-05-18 21:20 UTC (permalink / raw)
To: gcc-patches; +Cc: Segher Boessenkool
The function bb_is_just_return finds if the BB it is asked about does
just a return and nothing else. It currently does not allow clobbers
in the block either, which we of course can allow just fine.
This patch changes that. Bootstrapped and tested on powerpc64-linux
{-m32,-m64} (and tested that the new test fails before the patch, too).
Is this okay for trunk?
Segher
2017-05-18 Segher Boessenkool <segher@kernel.crashing.org>
* cfgcleanup.c (bb_is_just_return): Allow CLOBBERs.
gcc/testsuite/
* gcc.target/powerpc/conditional-return.c: New testcase.
---
gcc/cfgcleanup.c | 14 ++++++++------
gcc/testsuite/gcc.target/powerpc/conditional-return.c | 15 +++++++++++++++
2 files changed, 23 insertions(+), 6 deletions(-)
create mode 100644 gcc/testsuite/gcc.target/powerpc/conditional-return.c
diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c
index f68a964..3e1406c 100644
--- a/gcc/cfgcleanup.c
+++ b/gcc/cfgcleanup.c
@@ -2666,7 +2666,7 @@ trivially_empty_bb_p (basic_block bb)
/* Return true if BB contains just a return and possibly a USE of the
return value. Fill in *RET and *USE with the return and use insns
- if any found, otherwise NULL. */
+ if any found, otherwise NULL. All CLOBBERs are ignored. */
static bool
bb_is_just_return (basic_block bb, rtx_insn **ret, rtx_insn **use)
@@ -2680,13 +2680,15 @@ bb_is_just_return (basic_block bb, rtx_insn **ret, rtx_insn **use)
FOR_BB_INSNS (bb, insn)
if (NONDEBUG_INSN_P (insn))
{
- if (!*ret && ANY_RETURN_P (PATTERN (insn)))
+ rtx pat = PATTERN (insn);
+
+ if (!*ret && ANY_RETURN_P (pat))
*ret = insn;
- else if (!*ret && !*use && GET_CODE (PATTERN (insn)) == USE
- && REG_P (XEXP (PATTERN (insn), 0))
- && REG_FUNCTION_VALUE_P (XEXP (PATTERN (insn), 0)))
+ else if (!*ret && !*use && GET_CODE (pat) == USE
+ && REG_P (XEXP (pat, 0))
+ && REG_FUNCTION_VALUE_P (XEXP (pat, 0)))
*use = insn;
- else
+ else if (GET_CODE (pat) != CLOBBER)
return false;
}
diff --git a/gcc/testsuite/gcc.target/powerpc/conditional-return.c b/gcc/testsuite/gcc.target/powerpc/conditional-return.c
new file mode 100644
index 0000000..6b3ef5f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/conditional-return.c
@@ -0,0 +1,15 @@
+/* Check that a conditional return is used. */
+
+/* { dg-do compile } */
+/* { dg-options "-O2 -w" } */
+
+/* { dg-final { scan-assembler {\mbeqlr\M} } } */
+
+
+int f(int x)
+{
+ if (x)
+ return x + 31;
+
+ return;
+}
--
1.9.3
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] cfgcleanup: Ignore clobbers in bb_is_just_return
2017-05-18 21:20 [PATCH] cfgcleanup: Ignore clobbers in bb_is_just_return Segher Boessenkool
@ 2017-05-22 3:47 ` Jeff Law
0 siblings, 0 replies; 2+ messages in thread
From: Jeff Law @ 2017-05-22 3:47 UTC (permalink / raw)
To: Segher Boessenkool, gcc-patches
On 05/18/2017 02:58 PM, Segher Boessenkool wrote:
> The function bb_is_just_return finds if the BB it is asked about does
> just a return and nothing else. It currently does not allow clobbers
> in the block either, which we of course can allow just fine.
>
> This patch changes that. Bootstrapped and tested on powerpc64-linux
> {-m32,-m64} (and tested that the new test fails before the patch, too).
> Is this okay for trunk?
>
>
> Segher
>
>
> 2017-05-18 Segher Boessenkool <segher@kernel.crashing.org>
>
> * cfgcleanup.c (bb_is_just_return): Allow CLOBBERs.
>
> gcc/testsuite/
> * gcc.target/powerpc/conditional-return.c: New testcase.
OK.
jeff
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-05-22 2:07 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-18 21:20 [PATCH] cfgcleanup: Ignore clobbers in bb_is_just_return Segher Boessenkool
2017-05-22 3:47 ` Jeff Law
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).