29#define MAX_RECOG_ALTERNATIVES 35
33#define ALL_ALTERNATIVES ((alternative_mask) -1)
36#define ALTERNATIVE_BIT(X) ((alternative_mask) 1 << (X))
53 enum reg_class
cl : 16;
102 return (alt[
i].matches >= 0
114 return (alt[
i].matches >= 0
115 ? alt[alt[
i].matches].dependent_filters
116 : alt[
i].dependent_filters);
146 rtx ) {
return true; }
268#define memory_address_p(mode,addr) \
269 memory_address_addr_space_p ((mode), (addr), ADDR_SPACE_GENERIC)
272#define strict_memory_address_p(mode,addr) \
273 strict_memory_address_addr_space_p ((mode), (addr), ADDR_SPACE_GENERIC)
289#define offsettable_address_p(strict,mode,addr) \
290 offsettable_address_addr_space_p ((strict), (mode), (addr), \
295#ifndef GENERATOR_FILE
305#ifndef GENERATOR_FILE
325#ifndef GENERATOR_FILE
350 while (*
r !=
'\0' && *
r !=
',')
451#define recog_data (*recog_data_ptr)
453#ifndef GENERATOR_FILE
506 template<
typename ...Ts>
510 return ((funcptr)
func) (args...);
543#define INSN_OUTPUT_FORMAT_NONE 0
544#define INSN_OUTPUT_FORMAT_SINGLE 1
545#define INSN_OUTPUT_FORMAT_MULTI 2
546#define INSN_OUTPUT_FORMAT_FUNCTION 3
579#ifndef GENERATOR_FILE
580#include "insn-codes.h"
602#define this_target_recog (&default_target_recog)
int m_old_num_changes
Definition recog.h:659
void keep()
Definition recog.h:656
insn_change_watermark()
Definition recog.h:654
~insn_change_watermark()
Definition recog.h:662
rtx from
Definition recog.h:169
bool apply_to_rvalue(rtx *)
Definition recog.cc:1461
virtual bool check_mem(int, rtx)
Definition recog.h:145
bool apply_to_mem_1(rtx)
Definition recog.cc:1034
rtx_insn * insn
Definition recog.h:165
bool apply_to_rvalue_1(rtx *)
Definition recog.cc:1055
rtx to
Definition recog.h:170
bool apply_to_note(rtx *)
Definition recog.cc:1474
uint16_t result_flags
Definition recog.h:177
unsigned int num_replacements
Definition recog.h:173
static const uint16_t FIRST_SPARE_RESULT
Definition recog.h:134
bool apply_to_lvalue_1(rtx)
Definition recog.cc:1350
static const uint16_t UNSIMPLIFIED
Definition recog.h:133
uint16_t should_check_mems
Definition recog.h:184
bool apply_to_pattern(rtx *)
Definition recog.cc:1448
const char * failure_reason
Definition recog.h:193
uint16_t should_unshare
Definition recog.h:181
uint16_t should_note_simplifications
Definition recog.h:187
bool apply_to_pattern_1(rtx *)
Definition recog.cc:1387
insn_propagation(rtx_insn *)
Definition recog.h:216
uint16_t spare
Definition recog.h:190
virtual void note_simplification(int, uint16_t, rtx, rtx)
Definition recog.h:153
int saved_alternative
Definition recog.h:464
recog_state_saver()
Definition recog.h:467
~recog_state_saver()
Definition recog.h:475
recog_data_d * saved_recog_data_ptr
Definition recog.h:463
recog_data_d m_tmp_recog_data
Definition recog.h:458
temporary_volatile_ok(const temporary_volatile_ok &)
int save_volatile_ok
Definition recog.h:374
temporary_volatile_ok(int value)
Definition recog.h:365
~temporary_volatile_ok()
Definition recog.h:370
undo_recog_changes(int)
Definition recog.cc:641
static int s_num_changes
Definition recog.h:247
static bool is_active()
Definition recog.h:242
int m_old_num_changes
Definition recog.h:245
struct basic_block_def * basic_block
Definition coretypes.h:351
struct rtx_def * rtx
Definition coretypes.h:57
unsigned char addr_space_t
Definition coretypes.h:191
const struct rtx_def * const_rtx
Definition coretypes.h:58
int reg_class_t
Definition coretypes.h:372
uint64_t alternative_mask
Definition genattrtab.cc:245
vec< const char * > register_filters
Definition gensupport.cc:408
HARD_REG_ELT_TYPE HARD_REG_SET
Definition hard-reg-set.h:47
poly_int< N, C > r
Definition poly-int.h:774
i
Definition poly-int.h:776
bool peep2_regno_dead_p(int ofs, int regno)
Definition recog.cc:3752
bool validate_change_xveclen(rtx object, rtx *loc, int new_len, bool in_group)
Definition recog.cc:318
rtx_insn * peep2_next_insn(int n)
Definition recog.cc:3739
const operand_alternative * recog_op_alt
Definition recog.cc:80
int which_alternative
Definition recog.cc:89
const operand_alternative * preprocess_insn_constraints(unsigned int icode)
Definition recog.cc:3062
bool canonicalize_change_group(rtx_insn *insn, rtx x)
Definition recog.cc:329
bool offsettable_nonstrict_memref_p(rtx op)
Definition recog.cc:2511
alternative_mask get_preferred_alternatives(rtx_insn *insn)
Definition recog.cc:2732
void preprocess_constraints(int n_operands, int n_alternatives, const char **constraints, operand_alternative *op_alt_base, rtx **oploc)
Definition recog.cc:2935
bool validate_replace_rtx_part_nosimplify(rtx from, rtx to, rtx *where, rtx_insn *insn)
Definition recog.cc:937
bool validate_unshare_change(rtx object, rtx *loc, rtx new_rtx, bool in_group)
Definition recog.cc:309
bool validate_simplify_insn(rtx_insn *insn)
Definition recog.cc:995
void validate_replace_rtx_group(rtx from, rtx to, rtx_insn *insn)
Definition recog.cc:949
void recog_init()
Definition recog.cc:4792
bool check_bool_attrs(rtx_insn *insn)
Definition recog.cc:2761
bool validate_change(rtx object, rtx *loc, rtx new_rtx, bool in_group)
Definition recog.cc:300
void copy_frame_info_to_split_insn(rtx_insn *old_insn, rtx_insn *new_insn)
Definition recog.cc:3938
void confirm_change_group(void)
Definition recog.cc:541
bool offsettable_address_addr_space_p(int strictp, machine_mode mode, rtx y, addr_space_t as)
Definition recog.cc:2529
void extract_constrain_insn(rtx_insn *insn)
Definition recog.cc:2792
struct recog_data_d * recog_data_ptr
Definition recog.cc:75
bool offsettable_memref_p(rtx op)
Definition recog.cc:2500
bool reg_fits_class_p(const_rtx operand, reg_class_t cl, int offset, machine_mode mode)
Definition recog.cc:3505
bool store_data_bypass_p(rtx_insn *out_insn, rtx_insn *in_insn)
Definition recog.cc:4402
void init_recog(void)
Definition recog.cc:116
int asm_operand_ok(rtx op, const char *constraint, const char **constraints)
Definition recog.cc:2284
void extract_constrain_insn_cached(rtx_insn *insn)
Definition recog.cc:2802
int num_validated_changes(void)
Definition recog.cc:592
bool constrain_operands(int strict, alternative_mask alternatives)
Definition recog.cc:3170
int num_changes_pending(void)
Definition recog.cc:430
bool if_test_bypass_p(rtx_insn *out_insn, rtx_insn *in_insn)
Definition recog.cc:4434
bool insn_invalid_p(rtx_insn *insn, bool in_group)
Definition recog.cc:365
void extract_insn(rtx_insn *insn)
Definition recog.cc:2824
int peep2_current_count
Definition recog.cc:3718
bool check_asm_operands(rtx x)
Definition recog.cc:145
bool validate_replace_rtx_subexp(rtx from, rtx to, rtx_insn *insn, rtx *loc)
Definition recog.cc:906
bool mode_dependent_address_p(rtx addr, addr_space_t addrspace)
Definition recog.cc:2622
alternative_mask get_enabled_alternatives(rtx_insn *insn)
Definition recog.cc:2722
bool validate_replace_rtx(rtx from, rtx to, rtx_insn *insn)
Definition recog.cc:916
bool memory_address_addr_space_p(machine_mode mode, rtx addr, addr_space_t as, code_helper ch)
Definition recog.cc:1890
int volatile_ok
Definition recog.cc:72
bool apply_change_group(void)
Definition recog.cc:574
bool constrain_operands_cached(rtx_insn *insn, int strict)
Definition recog.cc:2813
void init_recog_no_volatile(void)
Definition recog.cc:110
bool valid_insn_p(rtx_insn *insn)
Definition recog.cc:1486
bool raw_constraint_p
Definition recog.cc:92
void validate_replace_src_group(rtx from, rtx to, rtx_insn *insn)
Definition recog.cc:980
void cancel_changes(int num)
Definition recog.cc:600
bool validate_replace_rtx_part(rtx from, rtx to, rtx *where, rtx_insn *insn)
Definition recog.cc:929
bool verify_changes(int num)
Definition recog.cc:439
void extract_insn_cached(rtx_insn *insn)
Definition recog.cc:2780
bool peep2_reg_dead_p(int ofs, rtx reg)
Definition recog.cc:3766
struct target_recog default_target_recog
Definition recog.cc:59
rtx peep2_find_free_register(int from, int to, const char *class_str, machine_mode mode, HARD_REG_SET *reg_set)
Definition recog.cc:3796
const struct insn_data_d insn_data[]
unsigned int alternative_dependent_filters(const operand_alternative *alt, int i)
Definition recog.h:112
bool(*) insn_operand_predicate_fn(rtx, machine_mode)
Definition recog.h:499
int recog_memoized(rtx_insn *insn)
Definition recog.h:336
int which_alternative
Definition recog.cc:89
rtx_insn * peephole2_insns(rtx, rtx_insn *, int *)
#define recog_data
Definition recog.h:451
op_type
Definition recog.h:39
@ OP_IN
Definition recog.h:40
@ OP_INOUT
Definition recog.h:42
@ OP_OUT
Definition recog.h:41
void cancel_changes(int)
Definition recog.cc:600
bool strict_memory_address_addr_space_p(machine_mode, rtx, addr_space_t, code_helper=ERROR_MARK)
Definition reload.cc:2162
unsigned int alternative_register_filters(const operand_alternative *alt, int i)
Definition recog.h:100
#define this_target_recog
Definition recog.h:602
const char *(*) insn_output_fn(rtx *, rtx_insn *)
Definition recog.h:500
const operand_alternative * which_op_alt()
Definition recog.h:488
struct recog_data_d * recog_data_ptr
Definition recog.cc:75
enum reg_class alternative_class(const operand_alternative *alt, int i)
Definition recog.h:91
bool added_clobbers_hard_reg_p(int)
int recog(rtx, rtx_insn *, int *)
int num_validated_changes(void)
Definition recog.cc:592
bool_attr
Definition recog.h:584
@ BA_PREFERRED_FOR_SPEED
Definition recog.h:586
@ BA_PREFERRED_FOR_SIZE
Definition recog.h:587
@ BA_ENABLED
Definition recog.h:585
@ BA_LAST
Definition recog.h:588
void insn_extract(rtx_insn *)
int volatile_ok
Definition recog.cc:72
const char * skip_alternative(const char *p)
Definition recog.h:347
void add_clobbers(rtx, int)
#define INSN_CODE(INSN)
Definition rtl.h:1549
#define NULL_RTX
Definition rtl.h:709
rtx PATTERN(const_rtx insn)
Definition rtl.h:1517
const struct insn_operand_data *const operand
Definition recog.h:567
const char n_alternatives
Definition recog.h:572
const char n_generator_args
Definition recog.h:569
const char n_operands
Definition recog.h:570
const insn_gen_fn genfun
Definition recog.h:566
const char n_dups
Definition recog.h:571
const char *const name
Definition recog.h:550
const char output_format
Definition recog.h:573
union insn_data_d::insn_output_u output
void(*) stored_funcptr(void)
Definition recog.h:504
stored_funcptr func
Definition recog.h:521
rtx_insn * operator()(Ts... args) const
Definition recog.h:507
insn_gen_fn operator*(void) const
Definition recog.h:515
const char eliminable
Definition recog.h:536
const insn_operand_predicate_fn predicate
Definition recog.h:526
const char strict_low
Definition recog.h:532
const char *const constraint
Definition recog.h:528
const char allows_mem
Definition recog.h:538
machine_mode const mode
Definition recog.h:530
const char is_operator
Definition recog.h:534
const char * constraint
Definition recog.h:50
unsigned int register_filters
Definition recog.h:69
unsigned int memory_ok
Definition recog.h:79
enum reg_class cl
Definition recog.h:53
int matched
Definition recog.h:64
unsigned int unsigned int dependent_filters
Definition recog.h:73
int matches
Definition recog.h:60
unsigned int unsigned int unsigned int earlyclobber
Definition recog.h:76
unsigned int anything_ok
Definition recog.h:84
unsigned int reject
Definition recog.h:57
unsigned int is_address
Definition recog.h:81
char dup_num[MAX_DUP_OPERANDS]
Definition recog.h:422
rtx * operand_loc[MAX_RECOG_OPERANDS]
Definition recog.h:402
machine_mode operand_mode[MAX_RECOG_OPERANDS]
Definition recog.h:411
char is_operator[MAX_RECOG_OPERANDS]
Definition recog.h:408
rtx_insn * insn
Definition recog.h:447
char n_dups
Definition recog.h:438
char n_alternatives
Definition recog.h:441
enum op_type operand_type[MAX_RECOG_OPERANDS]
Definition recog.h:414
bool is_asm
Definition recog.h:444
const char * constraints[MAX_RECOG_OPERANDS]
Definition recog.h:405
recog_data_d(const recog_data_d &&)=delete
rtx operand[MAX_RECOG_OPERANDS]
Definition recog.h:399
rtx * dup_loc[MAX_DUP_OPERANDS]
Definition recog.h:418
char n_operands
Definition recog.h:435
recog_data_d(const recog_data_d &)=delete
operand_alternative * x_op_alt[NUM_INSN_CODES]
Definition recog.h:595
alternative_mask x_bool_attr_masks[NUM_INSN_CODES][BA_LAST+1]
Definition recog.h:594
bool x_initialized
Definition recog.h:593
#define false
Definition system.h:893
#define IN_RANGE(VALUE, LOWER, UPPER)
Definition system.h:338
#define bool
Definition system.h:891
#define gcc_checking_assert(EXPR)
Definition system.h:826
#define MAX(X, Y)
Definition system.h:411
const char * single
Definition recog.h:557
constexpr insn_output_u(const char *const *m)
Definition recog.h:563
constexpr insn_output_u()
Definition recog.h:561
const char *const * multi
Definition recog.h:558
constexpr insn_output_u(const char *s)
Definition recog.h:562
constexpr insn_output_u(insn_output_fn f)
Definition recog.h:564
insn_output_fn function
Definition recog.h:559