29#define MAX_RECOG_ALTERNATIVES 35
33#define ALL_ALTERNATIVES ((alternative_mask) -1)
36#define ALTERNATIVE_BIT(X) ((alternative_mask) 1 << (X))
53 ENUM_BITFIELD (reg_class)
cl : 16;
98 return (alt[
i].matches >= 0
130 rtx ) {
return true; }
188 num_replacements (0),
190 should_unshare (shared_p),
191 should_check_mems (
false),
192 should_note_simplifications (
false),
194 failure_reason (nullptr)
252#define memory_address_p(mode,addr) \
253 memory_address_addr_space_p ((mode), (addr), ADDR_SPACE_GENERIC)
256#define strict_memory_address_p(mode,addr) \
257 strict_memory_address_addr_space_p ((mode), (addr), ADDR_SPACE_GENERIC)
273#define offsettable_address_p(strict,mode,addr) \
274 offsettable_address_addr_space_p ((strict), (mode), (addr), \
279#ifndef GENERATOR_FILE
289#ifndef GENERATOR_FILE
309#ifndef GENERATOR_FILE
334 while (*
r !=
'\0' && *
r !=
',')
439#ifndef GENERATOR_FILE
465 template<
typename ...Ts>
469 return ((funcptr)
func) (args...);
489 ENUM_BITFIELD(machine_mode)
const mode : 16;
502#define INSN_OUTPUT_FORMAT_NONE 0
503#define INSN_OUTPUT_FORMAT_SINGLE 1
504#define INSN_OUTPUT_FORMAT_MULTI 2
505#define INSN_OUTPUT_FORMAT_FUNCTION 3
510#if HAVE_DESIGNATED_UNION_INITIALIZERS
513 const char *
const *
multi;
536#ifndef GENERATOR_FILE
537#include "insn-codes.h"
559#define this_target_recog (&default_target_recog)
int m_old_num_changes
Definition recog.h:616
void keep()
Definition recog.h:613
insn_change_watermark()
Definition recog.h:611
~insn_change_watermark()
Definition recog.h:619
rtx from
Definition recog.h:153
bool apply_to_rvalue(rtx *)
Definition recog.cc:1450
virtual bool check_mem(int, rtx)
Definition recog.h:129
bool apply_to_mem_1(rtx)
Definition recog.cc:1023
rtx_insn * insn
Definition recog.h:149
bool apply_to_rvalue_1(rtx *)
Definition recog.cc:1044
rtx to
Definition recog.h:154
bool apply_to_note(rtx *)
Definition recog.cc:1463
uint16_t result_flags
Definition recog.h:161
unsigned int num_replacements
Definition recog.h:157
static const uint16_t FIRST_SPARE_RESULT
Definition recog.h:118
bool apply_to_lvalue_1(rtx)
Definition recog.cc:1339
static const uint16_t UNSIMPLIFIED
Definition recog.h:117
uint16_t should_check_mems
Definition recog.h:168
bool apply_to_pattern(rtx *)
Definition recog.cc:1437
const char * failure_reason
Definition recog.h:177
uint16_t should_unshare
Definition recog.h:165
uint16_t should_note_simplifications
Definition recog.h:171
bool apply_to_pattern_1(rtx *)
Definition recog.cc:1376
insn_propagation(rtx_insn *)
Definition recog.h:200
uint16_t spare
Definition recog.h:174
virtual void note_simplification(int, uint16_t, rtx, rtx)
Definition recog.h:137
Definition genmatch.cc:1468
recog_data_saver()
Definition recog.h:435
~recog_data_saver()
Definition recog.h:436
recog_data_d m_saved_data
Definition recog.h:433
temporary_volatile_ok(const temporary_volatile_ok &)
int save_volatile_ok
Definition recog.h:358
temporary_volatile_ok(int value)
Definition recog.h:349
~temporary_volatile_ok()
Definition recog.h:354
undo_recog_changes(int)
Definition recog.cc:630
~undo_recog_changes()
Definition recog.cc:639
static int s_num_changes
Definition recog.h:231
static bool is_active()
Definition recog.h:226
int m_old_num_changes
Definition recog.h:229
struct rtx_def * rtx
Definition coretypes.h:57
unsigned char addr_space_t
Definition coretypes.h:184
int reg_class_t
Definition coretypes.h:376
uint64_t alternative_mask
Definition genattrtab.cc:236
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
rtx peep2_find_free_register(int from, int to, const char *class_str, machine_mode mode, HARD_REG_SET *reg_set)
Definition recog.cc:3720
const struct insn_data_d insn_data[]
int recog_memoized(rtx_insn *insn)
Definition recog.h:320
const operand_alternative * recog_op_alt
Definition recog.cc:78
bool valid_insn_p(rtx_insn *)
Definition recog.cc:1475
bool offsettable_memref_p(rtx)
Definition recog.cc:2474
void extract_constrain_insn_cached(rtx_insn *)
Definition recog.cc:2776
int which_alternative
Definition recog.cc:87
rtx_insn * peephole2_insns(rtx, rtx_insn *, int *)
bool validate_replace_rtx_subexp(rtx, rtx, rtx_insn *, rtx *)
Definition recog.cc:895
bool canonicalize_change_group(rtx_insn *insn, rtx x)
Definition recog.cc:322
op_type
Definition recog.h:39
@ OP_IN
Definition recog.h:40
@ OP_INOUT
Definition recog.h:42
@ OP_OUT
Definition recog.h:41
const operand_alternative * preprocess_insn_constraints(unsigned int)
Definition recog.cc:3032
bool constrain_operands(int, alternative_mask)
Definition recog.cc:3117
bool validate_change_xveclen(rtx, rtx *, int, bool)
Definition recog.cc:311
void cancel_changes(int)
Definition recog.cc:593
alternative_mask get_enabled_alternatives(rtx_insn *)
Definition recog.cc:2696
bool mode_dependent_address_p(rtx, addr_space_t)
Definition recog.cc:2596
bool strict_memory_address_addr_space_p(machine_mode, rtx, addr_space_t, code_helper=ERROR_MARK)
Definition reload.cc:2164
bool if_test_bypass_p(rtx_insn *, rtx_insn *)
Definition recog.cc:4357
bool validate_simplify_insn(rtx_insn *insn)
Definition recog.cc:984
void validate_replace_rtx_group(rtx, rtx, rtx_insn *)
Definition recog.cc:938
void recog_init()
Definition recog.cc:4715
unsigned int alternative_register_filters(const operand_alternative *alt, int i)
Definition recog.h:96
#define this_target_recog
Definition recog.h:559
int asm_operand_ok(rtx, const char *, const char **)
Definition recog.cc:2269
rtx_insn * peep2_next_insn(int)
Definition recog.cc:3663
bool validate_replace_rtx_part(rtx, rtx, rtx *, rtx_insn *)
Definition recog.cc:918
void confirm_change_group(void)
Definition recog.cc:534
const operand_alternative * which_op_alt()
Definition recog.h:447
void extract_constrain_insn(rtx_insn *insn)
Definition recog.cc:2766
enum reg_class alternative_class(const operand_alternative *alt, int i)
Definition recog.h:87
void copy_frame_info_to_split_insn(rtx_insn *, rtx_insn *)
Definition recog.cc:3862
void init_recog(void)
Definition recog.cc:109
bool added_clobbers_hard_reg_p(int)
bool validate_replace_rtx(rtx, rtx, rtx_insn *)
Definition recog.cc:905
bool verify_changes(int)
Definition recog.cc:432
bool validate_replace_rtx_part_nosimplify(rtx, rtx, rtx *, rtx_insn *)
Definition recog.cc:926
bool peep2_reg_dead_p(int, rtx)
Definition recog.cc:3690
int recog(rtx, rtx_insn *, int *)
void validate_replace_src_group(rtx, rtx, rtx_insn *)
Definition recog.cc:969
int num_validated_changes(void)
Definition recog.cc:585
int num_changes_pending(void)
Definition recog.cc:423
bool memory_address_addr_space_p(machine_mode, rtx, addr_space_t, code_helper=ERROR_MARK)
Definition recog.cc:1875
alternative_mask get_preferred_alternatives(rtx_insn *)
Definition recog.cc:2706
bool constrain_operands_cached(rtx_insn *, int)
Definition recog.cc:2787
bool_attr
Definition recog.h:541
@ BA_PREFERRED_FOR_SPEED
Definition recog.h:543
@ BA_PREFERRED_FOR_SIZE
Definition recog.h:544
@ BA_ENABLED
Definition recog.h:542
@ BA_LAST
Definition recog.h:545
bool validate_unshare_change(rtx, rtx *, rtx, bool)
Definition recog.cc:302
bool check_asm_operands(rtx)
Definition recog.cc:138
bool store_data_bypass_p(rtx_insn *, rtx_insn *)
Definition recog.cc:4325
int peep2_current_count
Definition recog.cc:3642
bool insn_invalid_p(rtx_insn *, bool)
Definition recog.cc:358
bool validate_change(rtx, rtx *, rtx, bool)
Definition recog.cc:293
bool offsettable_address_addr_space_p(int, machine_mode, rtx, addr_space_t)
Definition recog.cc:2503
void extract_insn_cached(rtx_insn *)
Definition recog.cc:2754
void extract_insn(rtx_insn *)
Definition recog.cc:2798
struct recog_data_d recog_data
Definition recog.cc:73
void insn_extract(rtx_insn *)
int volatile_ok
Definition recog.cc:71
const char *(* insn_output_fn)(rtx *, rtx_insn *)
Definition recog.h:459
bool offsettable_nonstrict_memref_p(rtx)
Definition recog.cc:2485
bool apply_change_group(void)
Definition recog.cc:567
bool check_bool_attrs(rtx_insn *)
Definition recog.cc:2735
void init_recog_no_volatile(void)
Definition recog.cc:103
bool reg_fits_class_p(const_rtx, reg_class_t, int, machine_mode)
Definition recog.cc:3438
bool peep2_regno_dead_p(int, int)
Definition recog.cc:3676
void preprocess_constraints(int, int, const char **, operand_alternative *, rtx **)
Definition recog.cc:2909
const char * skip_alternative(const char *p)
Definition recog.h:331
void add_clobbers(rtx, int)
bool(* insn_operand_predicate_fn)(rtx, machine_mode)
Definition recog.h:458
struct target_recog default_target_recog
Definition recog.cc:58
#define INSN_CODE(INSN)
Definition rtl.h:1538
#define NULL_RTX
Definition rtl.h:706
rtx PATTERN(const_rtx insn)
Definition rtl.h:1506
Definition basic-block.h:117
const struct insn_operand_data *const operand
Definition recog.h:524
const char *const * multi
Definition recog.h:519
const char n_alternatives
Definition recog.h:529
const char n_generator_args
Definition recog.h:526
insn_output_fn function
Definition recog.h:520
const char n_operands
Definition recog.h:527
const insn_gen_fn genfun
Definition recog.h:523
const char n_dups
Definition recog.h:528
struct insn_data_d::@56 output
const char *const name
Definition recog.h:509
const char * single
Definition recog.h:518
const char output_format
Definition recog.h:530
void(*) stored_funcptr(void)
Definition recog.h:463
stored_funcptr func
Definition recog.h:480
rtx_insn * operator()(Ts... args) const
Definition recog.h:466
insn_gen_fn operator*(void) const
Definition recog.h:474
const char eliminable
Definition recog.h:495
enum machine_mode const mode
Definition recog.h:489
const insn_operand_predicate_fn predicate
Definition recog.h:485
const char strict_low
Definition recog.h:491
const char *const constraint
Definition recog.h:487
const char allows_mem
Definition recog.h:497
const char is_operator
Definition recog.h:493
const char * constraint
Definition recog.h:50
unsigned int register_filters
Definition recog.h:69
unsigned int memory_ok
Definition recog.h:75
enum reg_class cl
Definition recog.h:53
int matched
Definition recog.h:64
int matches
Definition recog.h:60
unsigned int unsigned int earlyclobber
Definition recog.h:72
unsigned int anything_ok
Definition recog.h:80
unsigned int reject
Definition recog.h:57
unsigned int is_address
Definition recog.h:77
char dup_num[MAX_DUP_OPERANDS]
Definition recog.h:399
rtx * operand_loc[MAX_RECOG_OPERANDS]
Definition recog.h:379
machine_mode operand_mode[MAX_RECOG_OPERANDS]
Definition recog.h:388
char is_operator[MAX_RECOG_OPERANDS]
Definition recog.h:385
rtx_insn * insn
Definition recog.h:424
char n_dups
Definition recog.h:415
char n_alternatives
Definition recog.h:418
enum op_type operand_type[MAX_RECOG_OPERANDS]
Definition recog.h:391
bool is_asm
Definition recog.h:421
const char * constraints[MAX_RECOG_OPERANDS]
Definition recog.h:382
rtx * dup_loc[MAX_DUP_OPERANDS]
Definition recog.h:395
char n_operands
Definition recog.h:412
operand_alternative * x_op_alt[NUM_INSN_CODES]
Definition recog.h:552
alternative_mask x_bool_attr_masks[NUM_INSN_CODES][BA_LAST+1]
Definition recog.h:551
bool x_initialized
Definition recog.h:550
#define false
Definition system.h:888
#define IN_RANGE(VALUE, LOWER, UPPER)
Definition system.h:324
#define bool
Definition system.h:886
#define gcc_checking_assert(EXPR)
Definition system.h:821
#define MAX(X, Y)
Definition system.h:397