20#ifndef GCC_HARD_REG_SET_H
21#define GCC_HARD_REG_SET_H
45#if FIRST_PSEUDO_REGISTER <= HOST_BITS_PER_WIDEST_FAST_INT
52#define HARD_REG_SET_LONGS \
53 ((FIRST_PSEUDO_REGISTER + HOST_BITS_PER_WIDEST_FAST_INT - 1) \
54 / HOST_BITS_PER_WIDEST_FAST_INT)
62 for (
unsigned int i = 0;
i < ARRAY_SIZE (elts); ++
i)
63 res.elts[
i] = ~elts[
i];
71 for (
unsigned int i = 0;
i < ARRAY_SIZE (elts); ++
i)
72 res.elts[
i] = elts[
i] & other.elts[
i];
79 for (
unsigned int i = 0;
i < ARRAY_SIZE (elts); ++
i)
80 elts[
i] &= other.elts[
i];
88 for (
unsigned int i = 0;
i < ARRAY_SIZE (elts); ++
i)
89 res.elts[
i] = elts[
i] | other.elts[
i];
96 for (
unsigned int i = 0;
i < ARRAY_SIZE (elts); ++
i)
97 elts[
i] |= other.elts[
i];
105 for (
unsigned int i = 0;
i < ARRAY_SIZE (elts); ++
i)
106 bad |= (elts[
i] ^ other.elts[
i]);
143#define HARD_CONST(X) ((HARD_REG_ELT_TYPE) (X))
162#define UHOST_BITS_PER_WIDE_INT ((unsigned) HOST_BITS_PER_WIDEST_FAST_INT)
164#if FIRST_PSEUDO_REGISTER <= HOST_BITS_PER_WIDEST_FAST_INT
166#define SET_HARD_REG_BIT(SET, BIT) \
167 ((SET) |= HARD_CONST (1) << (BIT))
168#define CLEAR_HARD_REG_BIT(SET, BIT) \
169 ((SET) &= ~(HARD_CONST (1) << (BIT)))
170#define TEST_HARD_REG_BIT(SET, BIT) \
171 (!!((SET) & (HARD_CONST (1) << (BIT))))
173#define CLEAR_HARD_REG_SET(TO) ((TO) = HARD_CONST (0))
174#define SET_HARD_REG_SET(TO) ((TO) = ~ HARD_CONST (0))
248 for (
unsigned int i = 0;
i < ARRAY_SIZE (
set.elts); ++
i)
255 for (
unsigned int i = 0;
i < ARRAY_SIZE (
set.elts); ++
i)
263 for (
unsigned int i = 0;
i < ARRAY_SIZE (x.elts); ++
i)
264 bad |= (x.elts[
i] & ~
y.elts[
i]);
272 for (
unsigned int i = 0;
i < ARRAY_SIZE (x.elts); ++
i)
273 good |= (x.elts[
i] &
y.elts[
i]);
281 for (
unsigned int i = 0;
i < ARRAY_SIZE (x.elts); ++
i)
290 for (
unsigned int i = 0;
i < ARRAY_SIZE (x.elts); ++
i)
306 i < ARRAY_SIZE (x.elts); ++
i)
343#define HARD_REG_ELT_BITS UHOST_BITS_PER_WIDE_INT
349 unsigned min,
unsigned *regno)
351#ifdef HARD_REG_SET_LONGS
353 iter->
length = HARD_REG_SET_LONGS;
381 return (*regno < FIRST_PSEUDO_REGISTER);
401 iter->
bits &= ~ HARD_CONST (1);
408 static_assert (!std::is_rvalue_reference<T&&>::value,
"");
415#define EXECUTE_IF_SET_IN_HARD_REG_SET(SET, MIN, REGNUM, ITER) \
416 for (build_error_on_rvalue (SET), \
417 hard_reg_set_iter_init (&(ITER), (SET), (MIN), &(REGNUM)); \
418 hard_reg_set_iter_set (&(ITER), &(REGNUM)); \
419 hard_reg_set_iter_next (&(ITER), &(REGNUM)))
535#define this_target_hard_regs (&default_target_hard_regs)
538#define accessible_reg_set \
539 (this_target_hard_regs->x_accessible_reg_set)
540#define operand_reg_set \
541 (this_target_hard_regs->x_operand_reg_set)
543 (this_target_hard_regs->x_fixed_regs)
544#define fixed_reg_set \
545 (this_target_hard_regs->x_fixed_reg_set)
546#define fixed_nonglobal_reg_set \
547 (this_target_hard_regs->x_fixed_nonglobal_reg_set)
549#define call_used_regs \
550 (this_target_hard_regs->x_call_used_regs)
552#define savable_regs \
553 (this_target_hard_regs->x_savable_regs)
555#define regs_invalidated_by_call \
556 (this_target_hard_regs->x_regs_invalidated_by_call)
557#define call_used_or_fixed_regs \
558 (regs_invalidated_by_call | fixed_reg_set)
560#define eh_return_data_regs \
561 (this_target_hard_regs->x_eh_return_data_regs)
562#define reg_alloc_order \
563 (this_target_hard_regs->x_reg_alloc_order)
564#define inv_reg_alloc_order \
565 (this_target_hard_regs->x_inv_reg_alloc_order)
566#define reg_class_contents \
567 (this_target_hard_regs->x_reg_class_contents)
568#define class_only_fixed_regs \
569 (this_target_hard_regs->x_class_only_fixed_regs)
570#define reg_class_size \
571 (this_target_hard_regs->x_reg_class_size)
572#define reg_class_subclasses \
573 (this_target_hard_regs->x_reg_class_subclasses)
574#define reg_class_subunion \
575 (this_target_hard_regs->x_reg_class_subunion)
576#define reg_class_superunion \
577 (this_target_hard_regs->x_reg_class_superunion)
579 (this_target_hard_regs->x_reg_names)
587#define REG_CAN_CHANGE_MODE_P(REGN, FROM, TO) \
588 (targetm.can_change_mode_class (FROM, TO, REGNO_REG_CLASS (REGN)))
595call_used_or_fixed_reg_p (
unsigned int regno)
static unsigned int count[debug_counter_number_of_counters]
Definition dbgcnt.cc:50
dump_flags_t & operator&=(dump_flags_t &lhs, dump_flags_t rhs)
Definition dumpfile.h:240
dump_flags_t & operator|=(dump_flags_t &lhs, dump_flags_t rhs)
Definition dumpfile.h:232
dump_flags_t operator&(dump_flags_t lhs, dump_flags_t rhs)
Definition dumpfile.h:219
dump_flags_t operator~(dump_flags_t flags)
Definition dumpfile.h:226
dump_flags_t operator|(dump_flags_t lhs, dump_flags_t rhs)
Definition dumpfile.h:212
static bool operator!=(cfa_reg &cfa, rtx reg)
Definition dwarf2cfi.cc:1174
static bool operator==(cfa_reg &cfa, rtx reg)
Definition dwarf2cfi.cc:1164
static struct token T
Definition gengtype-parse.cc:45
#define SET_HARD_REG_SET(TO)
Definition hard-reg-set.h:174
bool hard_reg_set_subset_p(const_hard_reg_set x, const_hard_reg_set y)
Definition hard-reg-set.h:177
void hard_reg_set_iter_next(hard_reg_set_iterator *iter, unsigned *)
Definition hard-reg-set.h:398
#define HARD_REG_ELT_BITS
Definition hard-reg-set.h:343
#define this_target_hard_regs
Definition hard-reg-set.h:535
unsigned HOST_WIDEST_FAST_INT HARD_REG_ELT_TYPE
Definition hard-reg-set.h:43
bool hard_reg_set_iter_set(hard_reg_set_iterator *iter, unsigned *regno)
Definition hard-reg-set.h:368
int hard_reg_set_first_diff(const_hard_reg_set x, const_hard_reg_set y, unsigned skip)
Definition hard-reg-set.h:205
#define TEST_HARD_REG_BIT(SET, BIT)
Definition hard-reg-set.h:170
#define CLEAR_HARD_REG_BIT(SET, BIT)
Definition hard-reg-set.h:168
char global_regs[FIRST_PSEUDO_REGISTER]
Definition reginfo.cc:92
HARD_REG_ELT_TYPE HARD_REG_SET
Definition hard-reg-set.h:47
bool hard_reg_set_intersect_p(const_hard_reg_set x, const_hard_reg_set y)
Definition hard-reg-set.h:183
#define HARD_CONST(X)
Definition hard-reg-set.h:143
#define fixed_regs
Definition hard-reg-set.h:542
int hard_reg_set_popcount(const_hard_reg_set x)
Definition hard-reg-set.h:195
#define CLEAR_HARD_REG_SET(TO)
Definition hard-reg-set.h:173
void hard_reg_set_iter_init(hard_reg_set_iterator *iter, const_hard_reg_set set, unsigned min, unsigned *regno)
Definition hard-reg-set.h:348
const char * reg_class_names[]
Definition reginfo.cc:119
bool hard_reg_set_empty_p(const_hard_reg_set x)
Definition hard-reg-set.h:189
#define UHOST_BITS_PER_WIDE_INT
Definition hard-reg-set.h:162
HARD_REG_SET global_reg_set
Definition reginfo.cc:95
#define SET_HARD_REG_BIT(SET, BIT)
Definition hard-reg-set.h:166
struct target_hard_regs default_target_hard_regs
Definition reginfo.cc:63
void build_error_on_rvalue(T &&)
Definition hard-reg-set.h:406
const HARD_REG_SET const_hard_reg_set
Definition hard-reg-set.h:48
int ctz_hwi(unsigned HOST_WIDE_INT x)
Definition hwint.cc:86
int popcount_hwi(unsigned HOST_WIDE_INT x)
Definition hwint.cc:111
#define HOST_WIDEST_FAST_INT
Definition hwint.h:154
wide_int mask(unsigned int, bool, unsigned int)
Definition wide-int.h:3992
i
Definition poly-int.h:776
Definition array-traits.h:35
Definition hard-reg-set.h:136
HARD_REG_SET set
Definition hard-reg-set.h:137
Definition hard-reg-set.h:327
unsigned short length
Definition hard-reg-set.h:332
const HARD_REG_ELT_TYPE * pelt
Definition hard-reg-set.h:329
unsigned short word_no
Definition hard-reg-set.h:335
HARD_REG_ELT_TYPE bits
Definition hard-reg-set.h:340
Definition hash-traits.h:303
static const size_t constant_size
Definition array-traits.h:29
T element_type
Definition array-traits.h:27
static const bool has_constant_size
Definition array-traits.h:28
static const T * base(const T &x)
Definition array-traits.h:30
static size_t size(const T &)
Definition array-traits.h:31
Definition hard-reg-set.h:437
static hashval_t hash(const simplifiable_subreg *)
Definition reginfo.cc:1176
static bool equal(const simplifiable_subreg *, const subreg_shape *)
Definition reginfo.cc:1184
const subreg_shape * compare_type
Definition hard-reg-set.h:438
Definition hard-reg-set.h:444
int x_reg_alloc_order[FIRST_PSEUDO_REGISTER]
Definition hard-reg-set.h:497
HARD_REG_SET x_fixed_nonglobal_reg_set
Definition hard-reg-set.h:483
char x_call_used_regs[FIRST_PSEUDO_REGISTER]
Definition hard-reg-set.h:467
char x_fixed_regs[FIRST_PSEUDO_REGISTER]
Definition hard-reg-set.h:458
int x_inv_reg_alloc_order[FIRST_PSEUDO_REGISTER]
Definition hard-reg-set.h:500
enum reg_class x_reg_class_subunion[N_REG_CLASSES][N_REG_CLASSES]
Definition hard-reg-set.h:517
bool x_class_only_fixed_regs[N_REG_CLASSES]
Definition hard-reg-set.h:507
unsigned int x_reg_class_size[N_REG_CLASSES]
Definition hard-reg-set.h:510
HARD_REG_SET x_reg_class_contents[N_REG_CLASSES]
Definition hard-reg-set.h:503
const char * x_reg_names[FIRST_PSEUDO_REGISTER]
Definition hard-reg-set.h:524
HARD_REG_SET x_accessible_reg_set
Definition hard-reg-set.h:448
hash_table< simplifiable_subregs_hasher > * x_simplifiable_subregs
Definition hard-reg-set.h:528
HARD_REG_SET x_savable_regs
Definition hard-reg-set.h:477
HARD_REG_SET x_eh_return_data_regs
Definition hard-reg-set.h:494
enum reg_class x_reg_class_subclasses[N_REG_CLASSES][N_REG_CLASSES]
Definition hard-reg-set.h:513
HARD_REG_SET x_operand_reg_set
Definition hard-reg-set.h:452
enum reg_class x_reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES]
Definition hard-reg-set.h:521
void finalize()
Definition reginfo.cc:1354
HARD_REG_SET x_fixed_reg_set
Definition hard-reg-set.h:461
HARD_REG_SET x_regs_invalidated_by_call
Definition hard-reg-set.h:491
const T2 & y
Definition wide-int.h:3870