aboutsummaryrefslogtreecommitdiff
path: root/gcc/lcm.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>2000-05-17 14:01:07 -0700
committerRichard Henderson <rth@gcc.gnu.org>2000-05-17 14:01:07 -0700
commit97d36f455e71c16d284bc5e2735fd174673b9e0f (patch)
tree29b79c5c989692d01b7a5e6d73a5c535c51e4e48 /gcc/lcm.c
parent79f50f2abde174891bd80390909c410c2296fa10 (diff)
downloadgcc-97d36f455e71c16d284bc5e2735fd174673b9e0f.zip
gcc-97d36f455e71c16d284bc5e2735fd174673b9e0f.tar.gz
gcc-97d36f455e71c16d284bc5e2735fd174673b9e0f.tar.bz2
toplev.c (rest_of_compilation): Don't call optimize_mode_switching unless OPTIMIZE_MODE_SWITCHING.
* toplev.c (rest_of_compilation): Don't call optimize_mode_switching unless OPTIMIZE_MODE_SWITCHING. Conditionally set no_new_pseudos. Don't call recompute_reg_usage if no_new_pseudos is true. * lcm.c (optimize_mode_switching): Move ifdefs outside function. Return true if we did work; update global life information. * basic-block.h (optimize_mode_switching): Update decl. From-SVN: r33965
Diffstat (limited to 'gcc/lcm.c')
-rw-r--r--gcc/lcm.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/gcc/lcm.c b/gcc/lcm.c
index 2d054d1..2f9aaa8 100644
--- a/gcc/lcm.c
+++ b/gcc/lcm.c
@@ -958,16 +958,14 @@ reg_becomes_live (reg, setter, live)
nregs--)
SET_HARD_REG_BIT (* (HARD_REG_SET *) live, regno + nregs);
}
-#endif
-/* Find all insns that need a particular mode
- setting, and insert the necessary mode switches. */
+/* Find all insns that need a particular mode setting, and insert the
+ necessary mode switches. Return true if we did work. */
-void
+int
optimize_mode_switching (file)
- FILE *file ATTRIBUTE_UNUSED;
+ FILE *file;
{
-#ifdef OPTIMIZE_MODE_SWITCHING
rtx insn;
int bb, e;
edge eg;
@@ -994,7 +992,7 @@ optimize_mode_switching (file)
}
if (! n_entities)
- return;
+ return 0;
#ifdef MODE_USES_IN_EXIT_BLOCK
/* For some ABIs a particular mode setting is required at function exit. */
@@ -1017,7 +1015,7 @@ optimize_mode_switching (file)
else if (NEXT_INSN (use) == BLOCK_HEAD (bb))
BLOCK_HEAD (bb) = NEXT_INSN (insn);
}
-#endif
+#endif /* MODE_USES_IN_EXIT_BLOCK */
/* Create the bitmap vectors. */
@@ -1034,7 +1032,7 @@ optimize_mode_switching (file)
struct bb_info *info = bb_info[j];
/* Determine what the first use (if any) need for a mode of entity E is.
- This will be th mode that is anticipatable for this block.
+ This will be the mode that is anticipatable for this block.
Also compute the initial transparency settings. */
for (bb = 0 ; bb < n_basic_blocks; bb++)
{
@@ -1253,5 +1251,18 @@ optimize_mode_switching (file)
if (need_commit)
commit_edge_insertions ();
-#endif /* OPTIMIZE_MODE_SWITCHING */
+
+ /* Ideally we'd figure out what blocks were affected and start from
+ there, but this is enormously complicated by commit_edge_insertions,
+ which would screw up any indicies we'd collected, and also need to
+ be involved in the update. Bail and recompute global life info for
+ everything. */
+
+ allocate_reg_life_data ();
+ update_life_info (NULL, UPDATE_LIFE_GLOBAL_RM_NOTES,
+ (PROP_DEATH_NOTES | PROP_KILL_DEAD_CODE
+ | PROP_SCAN_DEAD_CODE | PROP_REG_INFO));
+
+ return 1;
}
+#endif /* OPTIMIZE_MODE_SWITCHING */