aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhenqiang Chen <zhenqiang.chen@arm.com>2014-09-09 05:30:36 +0000
committerZhenqiang Chen <zqchen@gcc.gnu.org>2014-09-09 05:30:36 +0000
commita5e022d5d6b2921c5e4ca19bc366d87dd0195d01 (patch)
treefa424604153880fba58f911b58a8fd6e973ae8d9
parent157e859ffe3b5d43db1e19475711c1a3d21ab57a (diff)
downloadgcc-a5e022d5d6b2921c5e4ca19bc366d87dd0195d01.zip
gcc-a5e022d5d6b2921c5e4ca19bc366d87dd0195d01.tar.gz
gcc-a5e022d5d6b2921c5e4ca19bc366d87dd0195d01.tar.bz2
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
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/ifcvt.c5
-rw-r--r--gcc/ira.c3
-rw-r--r--gcc/shrink-wrap.h3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/arm/split-live-ranges-for-shrink-wrap.c14
6 files changed, 33 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 44caf78..3248a84 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index bce9fb3..ed30a59 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -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:
diff --git a/gcc/ira.c b/gcc/ira.c
index a48368c..757819d 100644
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -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);
diff --git a/gcc/shrink-wrap.h b/gcc/shrink-wrap.h
index 29bdcfd..7b8031a 100644
--- a/gcc/shrink-wrap.h
+++ b/gcc/shrink-wrap.h
@@ -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 */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cce4f26..a53d965 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/gcc.target/arm/split-live-ranges-for-shrink-wrap.c b/gcc/testsuite/gcc.target/arm/split-live-ranges-for-shrink-wrap.c
new file mode 100644
index 0000000..e36000b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/split-live-ranges-for-shrink-wrap.c
@@ -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" } } */