This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/48156] [4.6/4.7 Regression] wrong code with -fcrossjumping
- From: "jakub at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 18 Mar 2011 14:14:37 +0000
- Subject: [Bug rtl-optimization/48156] [4.6/4.7 Regression] wrong code with -fcrossjumping
- Auto-submitted: auto-generated
- References: <bug-48156-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48156
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-03-18 14:14:15 UTC ---
Another option is:
--- gcc/combine-stack-adj.c 2010-12-02 11:51:32.000000000 +0100
+++ gcc/combine-stack-adj.c 2011-03-18 15:12:09.497674812 +0100
@@ -551,7 +551,16 @@ gate_handle_stack_adjustments (void)
static unsigned int
rest_of_handle_stack_adjustments (void)
{
- cleanup_cfg (flag_crossjumping ? CLEANUP_CROSSJUMP : 0);
+ if (flag_crossjumping && optimize <= 1)
+ {
+ df_live_add_problem ();
+ df_live_set_all_dirty ();
+ df_analyze ();
+ cleanup_cfg (CLEANUP_CROSSJUMP);
+ df_remove_problem (df_live);
+ }
+ else
+ cleanup_cfg (flag_crossjumping ? CLEANUP_CROSSJUMP : 0);
/* This is kind of a heuristic. We need to run combine_stack_adjustments
even for machines with possibly nonzero TARGET_RETURN_POPS_ARGS
ifcvt.c already does something similar, so the df_get_bb_dirty calls it does
always return whether the bb is dirty in df_live.