summaryrefslogtreecommitdiff
path: root/gcc/hard-reg-set.h
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2014-09-22 07:38:12 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2014-09-22 07:38:12 +0000
commit18d9a6142b44d7a83ee7684d07a9b722cdc7bbbc (patch)
treec22e285369e1c4471ca4321ef553f4227182b181 /gcc/hard-reg-set.h
parentb46f680981be1a5455fea46342cc0cc6f6073daa (diff)
downloadgcc-18d9a6142b44d7a83ee7684d07a9b722cdc7bbbc.tar.gz
gcc/
* hard-reg-set.h: Include hash-table.h. (target_hard_regs): Add a finalize method and a x_simplifiable_subregs field. * target-globals.c (target_globals::~target_globals): Call hard_regs->finalize. * rtl.h (subreg_shape): New structure. (shape_of_subreg): New function. (simplifiable_subregs): Declare. * reginfo.c (simplifiable_subreg): New structure. (simplifiable_subregs_hasher): Likewise. (simplifiable_subregs): New function. (invalid_mode_changes): Delete. (alid_mode_changes, valid_mode_changes_obstack): New variables. (record_subregs_of_mode): Remove subregs_of_mode parameter. Record valid mode changes in valid_mode_changes. (find_subregs_of_mode): Remove subregs_of_mode parameter. Update calls to record_subregs_of_mode. (init_subregs_of_mode): Remove invalid_mode_changes and bitmap handling. Initialize new variables. Update call to find_subregs_of_mode. (invalid_mode_change_p): Check new variables instead of invalid_mode_changes. (finish_subregs_of_mode): Finalize new variables instead of invalid_mode_changes. (target_hard_regs::finalize): New function. * ira-costs.c (print_allocno_costs): Call invalid_mode_change_p even when CLASS_CANNOT_CHANGE_MODE is undefined. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@215449 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/hard-reg-set.h')
-rw-r--r--gcc/hard-reg-set.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/hard-reg-set.h b/gcc/hard-reg-set.h
index 401fea1bab8..c32516c6913 100644
--- a/gcc/hard-reg-set.h
+++ b/gcc/hard-reg-set.h
@@ -20,6 +20,8 @@ along with GCC; see the file COPYING3. If not see
#ifndef GCC_HARD_REG_SET_H
#define GCC_HARD_REG_SET_H
+#include "hash-table.h"
+
/* Define the type of a set of hard registers. */
/* HARD_REG_ELT_TYPE is a typedef of the unsigned integral type which
@@ -613,7 +615,11 @@ hard_reg_set_iter_next (hard_reg_set_iterator *iter, unsigned *regno)
extern char global_regs[FIRST_PSEUDO_REGISTER];
+struct simplifiable_subregs_hasher;
+
struct target_hard_regs {
+ void finalize ();
+
/* The set of registers that actually exist on the current target. */
HARD_REG_SET x_accessible_reg_set;
@@ -688,6 +694,10 @@ struct target_hard_regs {
/* Vector indexed by hardware reg giving its name. */
const char *x_reg_names[FIRST_PSEUDO_REGISTER];
+
+ /* Records which registers can form a particular subreg, with the subreg
+ being identified by its outer mode, inner mode and offset. */
+ hash_table <simplifiable_subregs_hasher> *x_simplifiable_subregs;
};
extern struct target_hard_regs default_target_hard_regs;