aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2013-09-26 13:38:54 +0000
committerAndrew Macleod <amacleod@gcc.gnu.org>2013-09-26 13:38:54 +0000
commit78bca40d1df75b037b946d10dc1151fffc17fbf9 (patch)
treebf1ee8e68198405d46df67850c59d9346411f5b3 /gcc/expr.c
parentff2a63a749c386637ef085f7bc3102a8d8d2aab3 (diff)
downloadgcc-78bca40d1df75b037b946d10dc1151fffc17fbf9.zip
gcc-78bca40d1df75b037b946d10dc1151fffc17fbf9.tar.gz
gcc-78bca40d1df75b037b946d10dc1151fffc17fbf9.tar.bz2
tree-ssa-live.h (find_replaceable_exprs, [...]): Move prototypes to...
2013-09-26 Andrew MacLeod <amacleod@redhat.com> * tree-ssa-live.h (find_replaceable_exprs, dump_replaceable_exprs): Move prototypes to... * tree-ssa-ter.h: New File. Move prototypes here. * tree-flow.h (stmt_is_replaceable_p): Remove prototype. * tree-outof-ssa.h: New. Rename ssaexpand.h, include tree-ssa-ter.h. * tree-outof-ssa.c (ssa_is_replaceable_p): New. Refactor common bits from is_replaceable_p. * tree-ssa-ter.c (is_replaceable_p, stmt_is_replaceable_p): Delete. (ter_is_replaceable_p): New. Use new refactored ssa_is_replaceable_p. (process_replaceable): Use ter_is_replaceable_p. (find_replaceable_in_bb): Use ter_is_replaceable_p. * expr.c (stmt_is_replaceable_p): Relocate from tree-ssa-ter.c. Use newly refactored ssa_is_replaceable_p. * cfgexpand.c: Include tree-outof-ssa.h. * ssaexpand.h: Delete. From-SVN: r202946
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 5949b13..235cd67 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -49,7 +49,7 @@ along with GCC; see the file COPYING3. If not see
#include "timevar.h"
#include "df.h"
#include "diagnostic.h"
-#include "ssaexpand.h"
+#include "tree-outof-ssa.h"
#include "target-globals.h"
#include "params.h"
@@ -9126,6 +9126,24 @@ expand_expr_real_2 (sepops ops, rtx target, enum machine_mode tmode,
}
#undef REDUCE_BIT_FIELD
+
+/* Return TRUE if expression STMT is suitable for replacement.
+ Never consider memory loads as replaceable, because those don't ever lead
+ into constant expressions. */
+
+static bool
+stmt_is_replaceable_p (gimple stmt)
+{
+ if (ssa_is_replaceable_p (stmt))
+ {
+ /* Don't move around loads. */
+ if (!gimple_assign_single_p (stmt)
+ || is_gimple_val (gimple_assign_rhs1 (stmt)))
+ return true;
+ }
+ return false;
+}
+
rtx
expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
enum expand_modifier modifier, rtx *alt_rtl)