mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-10 21:41:14 +08:00
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:
parent
157e859ffe
commit
a5e022d5d6
@ -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.
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
|
@ -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" } } */
|
Loading…
x
Reference in New Issue
Block a user