diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2013-11-20 20:32:57 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2013-11-20 20:32:57 +0000 |
commit | a2d0d374f69a87cde1a18bbcf197ff45168764fa (patch) | |
tree | 438f88188d619344b0bd8235fbee7824d4eb962e /gcc/lra-int.h | |
parent | 1fef36449e233448605e7812f4e2874baf05ce53 (diff) | |
download | gcc-a2d0d374f69a87cde1a18bbcf197ff45168764fa.zip gcc-a2d0d374f69a87cde1a18bbcf197ff45168764fa.tar.gz gcc-a2d0d374f69a87cde1a18bbcf197ff45168764fa.tar.bz2 |
re PR rtl-optimization/59133 (ICE after r204219 on SPEC2006 435.gromacs.)
2013-11-20 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/59133
* lra.c (expand_reg_data): Add new argument. Set up ALL_REGS for
new pseudos.
(lra_create_new_reg_with_unique_value): Pass new argument value.
(lra_emit_add, lra_emit_move): Ditto.
* lra-constraints.c (in_class_p): Add check for move for a new
insn.
(change_class): Rename to lra_change_class. Move to lra-int.h.
(get_reload_reg, narrow_reload_pseudo_class): Adjust calls of
change_class.
(process_addr_reg, process_addr): Ditto.
(curr_insn_transform): Ditto. Add check on old pseudo for
optional reload.
* lra-int.h (lra_get_regno_hard_regno): Move below.
(lra_change_class): Renamed change_class from lra.c.
2013-11-20 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/59133
* gcc.target/i386/pr59133.c: New.
From-SVN: r205141
Diffstat (limited to 'gcc/lra-int.h')
-rw-r--r-- | gcc/lra-int.h | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/gcc/lra-int.h b/gcc/lra-int.h index cb45c65..c545d9d 100644 --- a/gcc/lra-int.h +++ b/gcc/lra-int.h @@ -33,16 +33,6 @@ along with GCC; see the file COPYING3. If not see base and index registers might require a reload too. */ #define LRA_MAX_INSN_RELOADS (MAX_RECOG_OPERANDS * 3) -/* Return the hard register which given pseudo REGNO assigned to. - Negative value means that the register got memory or we don't know - allocation yet. */ -static inline int -lra_get_regno_hard_regno (int regno) -{ - resize_reg_info (); - return reg_renumber[regno]; -} - typedef struct lra_live_range *lra_live_range_t; /* The structure describes program points where a given pseudo lives. @@ -394,6 +384,31 @@ extern void lra_eliminate_reg_if_possible (rtx *); +/* Return the hard register which given pseudo REGNO assigned to. + Negative value means that the register got memory or we don't know + allocation yet. */ +static inline int +lra_get_regno_hard_regno (int regno) +{ + resize_reg_info (); + return reg_renumber[regno]; +} + +/* Change class of pseudo REGNO to NEW_CLASS. Print info about it + using TITLE. Output a new line if NL_P. */ +static void inline +lra_change_class (int regno, enum reg_class new_class, + const char *title, bool nl_p) +{ + lra_assert (regno >= FIRST_PSEUDO_REGISTER); + if (lra_dump_file != NULL) + fprintf (lra_dump_file, "%s class %s for r%d", + title, reg_class_names[new_class], regno); + setup_reg_classes (regno, new_class, NO_REGS, new_class); + if (lra_dump_file != NULL && nl_p) + fprintf (lra_dump_file, "\n"); +} + /* Update insn operands which are duplication of NOP operand. The insn is represented by its LRA internal representation ID. */ static inline void |