diff options
author | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-11-22 14:58:36 +0000 |
---|---|---|
committer | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-11-22 14:58:36 +0000 |
commit | cfea6514a4b6ced0930593ebb48d0037e9716d87 (patch) | |
tree | eeccf866e18463f7dc7ea882ea944247d4ed1010 /gcc/lra.c | |
parent | 9456798d72d0e81a2a553287f436dcb05cff175a (diff) | |
download | gcc-cfea6514a4b6ced0930593ebb48d0037e9716d87.tar.gz |
[./]
2013-11-22 Basile Starynkevitch <basile@starynkevitch.net>
{{merge with trunk GCC 4.9 svn rev 205247 now in stage 3}}
[gcc/]
2013-11-22 Basile Starynkevitch <basile@starynkevitch.net>
{{merge with trunk GCC 4.9 svn rev 205247 now in stage 3}}
* Makefile.in (MELT_GCC_VERSION_NUM): New make variable.
(melt-run-md5.h, melt-run.h): Use it.
* melt-runtime.cc: With GCC 4.9 include print-tree.h,
gimple-iterator.h, gimple-walk.h.
(meltgc_start_all_new_modules, meltgc_start_flavored_module)
(meltgc_do_initial_mode, meltgc_set_user_options)
(meltgc_load_modules_and_do_mode): Improve debugprintf...
(melt_gt_ggc_mx_gimple_seq_d): Handle GCC 4.9 specifically.
* melt-runtime.h (gt_ggc_mx_gimple_statement_d): Temporarily
define this macro.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@205264 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/lra.c')
-rw-r--r-- | gcc/lra.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/gcc/lra.c b/gcc/lra.c index 1aea599a2e5..f4791a2de8b 100644 --- a/gcc/lra.c +++ b/gcc/lra.c @@ -130,11 +130,13 @@ static void invalidate_insn_data_regno_info (lra_insn_recog_data_t, rtx, int); /* Expand all regno related info needed for LRA. */ static void -expand_reg_data (void) +expand_reg_data (int old) { resize_reg_info (); expand_reg_info (); ira_expand_reg_equiv (); + for (int i = (int) max_reg_num () - 1; i >= old; i--) + lra_change_class (i, ALL_REGS, " Set", true); } /* Create and return a new reg of ORIGINAL mode. If ORIGINAL is NULL @@ -178,7 +180,7 @@ lra_create_new_reg_with_unique_value (enum machine_mode md_mode, rtx original, title, REGNO (new_reg)); fprintf (lra_dump_file, "\n"); } - expand_reg_data (); + expand_reg_data (max_reg_num ()); setup_reg_classes (REGNO (new_reg), rclass, NO_REGS, rclass); return new_reg; } @@ -417,7 +419,7 @@ lra_emit_add (rtx x, rtx y, rtx z) /* Functions emit_... can create pseudos -- so expand the pseudo data. */ if (old != max_reg_num ()) - expand_reg_data (); + expand_reg_data (old); } /* The number of emitted reload insns so far. */ @@ -443,7 +445,7 @@ lra_emit_move (rtx x, rtx y) /* Function emit_move can create pseudos -- so expand the pseudo data. */ if (old != max_reg_num ()) - expand_reg_data (); + expand_reg_data (old); return; } lra_emit_add (x, XEXP (y, 0), XEXP (y, 1)); @@ -2059,14 +2061,14 @@ has_nonexceptional_receiver (void) return true; /* First determine which blocks can reach exit via normal paths. */ - tos = worklist = XNEWVEC (basic_block, n_basic_blocks + 1); + tos = worklist = XNEWVEC (basic_block, n_basic_blocks_for_fn (cfun) + 1); FOR_EACH_BB (bb) bb->flags &= ~BB_REACHABLE; /* Place the exit block on our worklist. */ - EXIT_BLOCK_PTR->flags |= BB_REACHABLE; - *tos++ = EXIT_BLOCK_PTR; + EXIT_BLOCK_PTR_FOR_FN (cfun)->flags |= BB_REACHABLE; + *tos++ = EXIT_BLOCK_PTR_FOR_FN (cfun); /* Iterate: find everything reachable from what we've already seen. */ while (tos != worklist) @@ -2238,6 +2240,10 @@ lra (FILE *f) init_insn_recog_data (); + /* We can not set up reload_in_progress because it prevents new + pseudo creation. */ + lra_in_progress = 1; + #ifdef ENABLE_CHECKING check_rtl (false); #endif @@ -2248,10 +2254,6 @@ lra (FILE *f) setup_reg_spill_flag (); - /* We can not set up reload_in_progress because it prevents new - pseudo creation. */ - lra_in_progress = 1; - /* Function remove_scratches can creates new pseudos for clobbers -- so set up lra_constraint_new_regno_start before its call to permit changing reg classes for pseudos created by this |