aboutsummaryrefslogtreecommitdiff
path: root/gcc/lra-int.h
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2013-11-20 20:32:57 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2013-11-20 20:32:57 +0000
commita2d0d374f69a87cde1a18bbcf197ff45168764fa (patch)
tree438f88188d619344b0bd8235fbee7824d4eb962e /gcc/lra-int.h
parent1fef36449e233448605e7812f4e2874baf05ce53 (diff)
downloadgcc-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.h35
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