shrink-wrap.h: #define SHRINK_WRAPPING_ENABLED.

ChangeLog:
2014-09-09  Zhenqiang Chen  <zhenqiang.chen@arm.com>

	* shrink-wrap.h: #define SHRINK_WRAPPING_ENABLED.
	* ira.c: #include "shrink-wrap.h"
	(split_live_ranges_for_shrink_wrap): Use SHRINK_WRAPPING_ENABLED.
	* ifcvt.c: #include "shrink-wrap.h"
	(dead_or_predicable): Use SHRINK_WRAPPING_ENABLED.

testsuite/ChangeLog:
2014-09-09  Zhenqiang Chen  <zhenqiang.chen@arm.com>

	* gcc.target/arm/split-live-ranges-for-shrink-wrap.c: New test.

From-SVN: r215041
This commit is contained in:
Zhenqiang Chen 2014-09-09 05:30:36 +00:00 committed by Zhenqiang Chen
parent 157e859ffe
commit a5e022d5d6
6 changed files with 33 additions and 4 deletions

View File

@ -1,3 +1,11 @@
2014-09-09 Zhenqiang Chen <zhenqiang.chen@arm.com>
* shrink-wrap.h: #define SHRINK_WRAPPING_ENABLED.
* ira.c: #include "shrink-wrap.h"
(split_live_ranges_for_shrink_wrap): Use SHRINK_WRAPPING_ENABLED.
* ifcvt.c: #include "shrink-wrap.h"
(dead_or_predicable): Use SHRINK_WRAPPING_ENABLED.
2014-09-08 Trevor Saunders <tsaunders@mozilla.com>
* common/config/picochip/picochip-common.c: Remove.

View File

@ -42,6 +42,7 @@
#include "df.h"
#include "vec.h"
#include "dbgcnt.h"
#include "shrink-wrap.h"
#ifndef HAVE_conditional_move
#define HAVE_conditional_move 0
@ -4288,14 +4289,13 @@ dead_or_predicable (basic_block test_bb, basic_block merge_bb,
if (NONDEBUG_INSN_P (insn))
df_simulate_find_defs (insn, merge_set);
#ifdef HAVE_simple_return
/* If shrink-wrapping, disable this optimization when test_bb is
the first basic block and merge_bb exits. The idea is to not
move code setting up a return register as that may clobber a
register used to pass function parameters, which then must be
saved in caller-saved regs. A caller-saved reg requires the
prologue, killing a shrink-wrap opportunity. */
if ((flag_shrink_wrap && HAVE_simple_return && !epilogue_completed)
if ((SHRINK_WRAPPING_ENABLED && !epilogue_completed)
&& ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb == test_bb
&& single_succ_p (new_dest)
&& single_succ (new_dest) == EXIT_BLOCK_PTR_FOR_FN (cfun)
@ -4342,7 +4342,6 @@ dead_or_predicable (basic_block test_bb, basic_block merge_bb,
}
BITMAP_FREE (return_regs);
}
#endif
}
no_body:

View File

@ -393,6 +393,7 @@ along with GCC; see the file COPYING3. If not see
#include "dce.h"
#include "dbgcnt.h"
#include "rtl-iter.h"
#include "shrink-wrap.h"
struct target_ira default_target_ira;
struct target_ira_int default_target_ira_int;
@ -4780,7 +4781,7 @@ split_live_ranges_for_shrink_wrap (void)
bitmap_head need_new, reachable;
vec<basic_block> queue;
if (!flag_shrink_wrap)
if (!SHRINK_WRAPPING_ENABLED)
return false;
bitmap_initialize (&need_new, 0);

View File

@ -47,6 +47,9 @@ extern void convert_to_simple_return (edge entry_edge, edge orig_entry_edge,
bitmap_head bb_flags,
rtx_insn *returnjump,
vec<edge> unconverted_simple_returns);
#define SHRINK_WRAPPING_ENABLED (flag_shrink_wrap && HAVE_simple_return)
#else
#define SHRINK_WRAPPING_ENABLED false
#endif
#endif /* GCC_SHRINK_WRAP_H */

View File

@ -1,3 +1,7 @@
2014-09-09 Zhenqiang Chen <zhenqiang.chen@arm.com>
* gcc.target/arm/split-live-ranges-for-shrink-wrap.c: New test.
2014-09-08 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/60196

View File

@ -0,0 +1,14 @@
/* { dg-do assemble } */
/* { dg-options "-mthumb -Os -fdump-rtl-ira " } */
/* { dg-require-effective-target arm_thumb1_ok } */
int foo (char *, char *, int);
int test (int d, char * out, char *in, int len)
{
if (out != in)
foo (out, in, len);
return 0;
}
/* { dg-final { object-size text <= 20 } } */
/* { dg-final { scan-rtl-dump-not "Split live-range of register" "ira" } } */
/* { dg-final { cleanup-rtl-dump "ira" } } */