23#include "insn-codes.h"
66#define MULT_COST_LESS(X,Y) ((X)->cost < (Y) \
67 || ((X)->cost == (Y) && (X)->latency < (Y)))
73#define CHEAPER_MULT_COST(X,Y) ((X)->cost < (Y)->cost \
74 || ((X)->cost == (Y)->cost \
75 && (X)->latency < (Y)->latency))
114 unsigned HOST_WIDE_INT
t;
132#if HOST_BITS_PER_WIDE_INT == 64
133#define NUM_ALG_HASH_ENTRIES 1031
135#define NUM_ALG_HASH_ENTRIES 307
138#define NUM_MODE_IP_INT (NUM_MODE_INT + NUM_MODE_PARTIAL_INT)
139#define NUM_MODE_IPV_INT (NUM_MODE_IP_INT + NUM_MODE_VECTOR_INT)
190#define this_target_expmed (&default_target_expmed)
225 return mode - MIN_MODE_INT;
226 case MODE_PARTIAL_INT:
229 if (MIN_MODE_PARTIAL_INT != VOIDmode)
230 return mode - MIN_MODE_PARTIAL_INT + NUM_MODE_INT;
232 case MODE_VECTOR_INT:
235 if (MIN_MODE_VECTOR_INT != VOIDmode)
613 int m =
mode - MIN_MODE_INT;
674 machine_mode
mode, machine_mode compare_mode,
675 int unsignedp,
rtx x,
rtx y,
int normalizep,
676 machine_mode target_mode);
695 machine_mode,
int,
int);
704 int,
unsigned HOST_WIDE_INT *,
722 machine_mode,
rtx,
bool,
bool);
724 machine_mode, machine_mode,
bool,
rtx *);
Definition machmode.h:437
struct rtx_def * rtx
Definition coretypes.h:57
union tree_node * tree
Definition coretypes.h:97
#define MAX_BITS_PER_WORD
Definition defaults.h:1011
void store_bit_field(rtx str_rtx, poly_uint64 bitsize, poly_uint64 bitnum, poly_uint64 bitregion_start, poly_uint64 bitregion_end, machine_mode fieldmode, rtx value, bool reverse, bool undefined_p)
Definition expmed.cc:1181
rtx expmed_mult_highpart_optab(scalar_int_mode mode, rtx op0, rtx op1, rtx target, int unsignedp, int max_cost)
Definition expmed.cc:3961
rtx negate_rtx(machine_mode mode, rtx x)
Definition expmed.cc:346
rtx expand_divmod(int rem_flag, enum tree_code code, machine_mode mode, rtx op0, rtx op1, rtx target, int unsignedp, enum optab_methods methods)
Definition expmed.cc:4410
rtx extract_low_bits(machine_mode mode, machine_mode src_mode, rtx src)
Definition expmed.cc:2490
void canonicalize_comparison(machine_mode mode, enum rtx_code *code, rtx *imm)
Definition expmed.cc:6537
HOST_WIDE_INT last_div_const
Definition expmed.cc:63
rtx maybe_expand_shift(enum tree_code code, machine_mode mode, rtx shifted, int amount, rtx target, int unsignedp)
Definition expmed.cc:2797
unsigned HOST_WIDE_INT choose_multiplier(unsigned HOST_WIDE_INT d, int n, int precision, unsigned HOST_WIDE_INT *multiplier_ptr, int *post_shift_ptr)
Definition expmed.cc:3813
rtx emit_store_flag(rtx target, enum rtx_code code, rtx op0, rtx op1, machine_mode mode, int unsignedp, int normalizep)
Definition expmed.cc:6212
rtx emit_cstore(rtx target, enum insn_code icode, enum rtx_code code, machine_mode mode, machine_mode compare_mode, int unsignedp, rtx x, rtx y, int normalizep, machine_mode target_mode)
Definition expmed.cc:5687
rtx extract_bit_field(rtx str_rtx, poly_uint64 bitsize, poly_uint64 bitnum, int unsignedp, rtx target, machine_mode mode, machine_mode tmode, bool reverse, rtx *alt_rtl)
Definition expmed.cc:2191
int mult_by_coeff_cost(HOST_WIDE_INT coeff, machine_mode mode, bool speed)
Definition expmed.cc:3726
rtx expand_mult(machine_mode mode, rtx op0, rtx op1, rtx target, int unsignedp, bool no_libcall)
Definition expmed.cc:3572
struct target_expmed default_target_expmed
Definition expmed.cc:48
rtx expand_variable_shift(enum tree_code code, machine_mode mode, rtx shifted, tree amount, rtx target, int unsignedp)
Definition expmed.cc:2812
rtx emit_store_flag_force(rtx target, enum rtx_code code, rtx op0, rtx op1, machine_mode mode, int unsignedp, int normalizep)
Definition expmed.cc:6360
rtx expand_mult_highpart_adjust(scalar_int_mode mode, rtx adj_operand, rtx op0, rtx op1, rtx target, int unsignedp)
Definition expmed.cc:3921
rtx flip_storage_order(machine_mode mode, rtx x)
Definition expmed.cc:395
rtx expand_and(machine_mode mode, rtx op0, rtx op1, rtx target)
Definition expmed.cc:5669
bool choose_mult_variant(machine_mode mode, HOST_WIDE_INT val, struct algorithm *alg, enum mult_variant *variant, int mult_cost)
Definition expmed.cc:3332
rtx expand_shift(enum tree_code code, machine_mode mode, rtx shifted, poly_int64 amount, rtx target, int unsignedp)
Definition expmed.cc:2786
rtx expand_rotate_as_vec_perm(machine_mode mode, rtx dst, rtx x, rtx amt)
Definition expmed.cc:6450
int convert_cost(machine_mode to_mode, machine_mode from_mode, bool speed)
Definition expmed.h:666
void set_alg_hash_used_p(bool usedp)
Definition expmed.h:212
bool * sdiv_pow2_cheap_ptr(bool speed, machine_mode mode)
Definition expmed.h:270
int shiftsub0_cost(bool speed, machine_mode mode, int bits)
Definition expmed.h:469
#define this_target_expmed
Definition expmed.h:190
int * shiftsub1_cost_ptr(bool speed, machine_mode mode, int bits)
Definition expmed.h:477
int neg_cost(bool speed, machine_mode mode)
Definition expmed.h:389
int shift_cost(bool speed, machine_mode mode, int bits)
Definition expmed.h:415
int mul_highpart_cost(bool speed, machine_mode mode)
Definition expmed.h:632
void set_mul_widen_cost(bool speed, machine_mode mode, int cost)
Definition expmed.h:593
int * mul_highpart_cost_ptr(bool speed, machine_mode mode)
Definition expmed.h:610
void set_udiv_cost(bool speed, machine_mode mode, int cost)
Definition expmed.h:565
int mul_widen_cost(bool speed, machine_mode mode)
Definition expmed.h:602
void set_smod_pow2_cheap(bool speed, machine_mode mode, bool cheap)
Definition expmed.h:307
int udiv_cost(bool speed, machine_mode mode)
Definition expmed.h:574
int * sdiv_cost_ptr(bool speed, machine_mode mode)
Definition expmed.h:530
int * shiftsub0_cost_ptr(bool speed, machine_mode mode, int bits)
Definition expmed.h:450
int zero_cost(bool speed)
Definition expmed.h:340
void set_mul_highpart_cost(bool speed, machine_mode mode, int cost)
Definition expmed.h:623
void set_zero_cost(bool speed, int cost)
Definition expmed.h:332
int * neg_cost_ptr(bool speed, machine_mode mode)
Definition expmed.h:372
void set_convert_cost(machine_mode to_mode, machine_mode from_mode, bool speed, int cost)
Definition expmed.h:656
int sdiv_cost(bool speed, machine_mode mode)
Definition expmed.h:548
void set_sdiv_cost(bool speed, machine_mode mode, int cost)
Definition expmed.h:539
int * shiftadd_cost_ptr(bool speed, machine_mode mode, int bits)
Definition expmed.h:423
void set_sdiv_pow2_cheap(bool speed, machine_mode mode, bool cheap_p)
Definition expmed.h:280
bool sdiv_pow2_cheap(bool speed, machine_mode mode)
Definition expmed.h:289
void set_mul_cost(bool speed, machine_mode mode, int cost)
Definition expmed.h:513
void set_shiftadd_cost(bool speed, machine_mode mode, int bits, int cost)
Definition expmed.h:433
int * add_cost_ptr(bool speed, machine_mode mode)
Definition expmed.h:348
int * mul_widen_cost_ptr(bool speed, machine_mode mode)
Definition expmed.h:582
mult_variant
Definition expmed.h:42
@ add_variant
Definition expmed.h:42
@ negate_variant
Definition expmed.h:42
@ basic_variant
Definition expmed.h:42
#define NUM_ALG_HASH_ENTRIES
Definition expmed.h:135
#define NUM_MODE_IP_INT
Definition expmed.h:138
int * zero_cost_ptr(bool speed)
Definition expmed.h:324
int * mul_cost_ptr(bool speed, machine_mode mode)
Definition expmed.h:504
bool * smod_pow2_cheap_ptr(bool speed, machine_mode mode)
Definition expmed.h:297
int expmed_mode_index(machine_mode mode)
Definition expmed.h:220
int add_cost(bool speed, machine_mode mode)
Definition expmed.h:364
void set_shift_cost(bool speed, machine_mode mode, int bits, int cost)
Definition expmed.h:406
alg_code
Definition expmed.h:25
@ alg_add_t_m2
Definition expmed.h:29
@ alg_sub_factor
Definition expmed.h:32
@ alg_zero
Definition expmed.h:27
@ alg_unknown
Definition expmed.h:26
@ alg_impossible
Definition expmed.h:35
@ alg_sub_t_m2
Definition expmed.h:30
@ alg_shift
Definition expmed.h:28
@ alg_add_factor
Definition expmed.h:31
@ alg_m
Definition expmed.h:28
@ alg_sub_t2_m
Definition expmed.h:34
@ alg_add_t2_m
Definition expmed.h:33
int * convert_cost_ptr(machine_mode to_mode, machine_mode from_mode, bool speed)
Definition expmed.h:640
int shiftsub1_cost(bool speed, machine_mode mode, int bits)
Definition expmed.h:496
void set_neg_cost(bool speed, machine_mode mode, int cost)
Definition expmed.h:380
void set_add_cost(bool speed, machine_mode mode, int cost)
Definition expmed.h:356
int mul_cost(bool speed, machine_mode mode)
Definition expmed.h:522
void set_shiftsub1_cost(bool speed, machine_mode mode, int bits, int cost)
Definition expmed.h:487
void set_shiftsub0_cost(bool speed, machine_mode mode, int bits, int cost)
Definition expmed.h:460
int * shift_cost_ptr(bool speed, machine_mode mode, int bits)
Definition expmed.h:397
int shiftadd_cost(bool speed, machine_mode mode, int bits)
Definition expmed.h:442
#define NUM_MODE_IPV_INT
Definition expmed.h:139
bool smod_pow2_cheap(bool speed, machine_mode mode)
Definition expmed.h:316
int * udiv_cost_ptr(bool speed, machine_mode mode)
Definition expmed.h:556
struct alg_hash_entry * alg_hash_entry_ptr(int idx)
Definition expmed.h:196
int * expmed_op_cost_ptr(struct expmed_op_costs *costs, bool speed, machine_mode mode)
Definition expmed.h:260
bool * expmed_op_cheap_ptr(struct expmed_op_cheap *eoc, bool speed, machine_mode mode)
Definition expmed.h:249
bool alg_hash_used_p(void)
Definition expmed.h:204
tree_code
Definition genmatch.cc:1011
#define GET_MODE_CLASS(MODE)
Definition machmode.h:105
optab_methods
Definition optabs.h:177
@ OPTAB_LIB_WIDEN
Definition optabs.h:181
poly_int< NUM_POLY_INT_COEFFS, unsigned HOST_WIDE_INT > poly_uint64
Definition poly-int-types.h:25
poly_int< NUM_POLY_INT_COEFFS, HOST_WIDE_INT > poly_int64
Definition poly-int-types.h:24
rtx_code
Definition rtl.h:48
unsigned HOST_WIDE_INT t
Definition expmed.h:114
machine_mode mode
Definition expmed.h:117
struct mult_cost cost
Definition expmed.h:125
enum alg_code alg
Definition expmed.h:120
bool speed
Definition expmed.h:128
short ops
Definition expmed.h:99
char log[MAX_BITS_PER_WORD+1]
Definition expmed.h:108
struct mult_cost cost
Definition expmed.h:98
enum alg_code op[MAX_BITS_PER_WORD+1]
Definition expmed.h:107
Definition ira-costs.cc:54
int cost[1]
Definition ira-costs.cc:58
bool cheap[2][NUM_MODE_IPV_INT]
Definition expmed.h:142
int cost[2][NUM_MODE_IPV_INT]
Definition expmed.h:146
short cost
Definition expmed.h:59
short latency
Definition expmed.h:60
int x_shift_cost[2][NUM_MODE_IPV_INT][MAX_BITS_PER_WORD]
Definition expmed.h:170
struct alg_hash_entry x_alg_hash[NUM_ALG_HASH_ENTRIES]
Definition expmed.h:154
int x_convert_cost[2][NUM_MODE_IP_INT][NUM_MODE_IP_INT]
Definition expmed.h:183
struct expmed_op_costs x_sdiv_cost
Definition expmed.h:175
struct expmed_op_cheap x_sdiv_pow2_cheap
Definition expmed.h:163
int x_shiftadd_cost[2][NUM_MODE_IPV_INT][MAX_BITS_PER_WORD]
Definition expmed.h:171
int x_mul_highpart_cost[2][NUM_MODE_INT]
Definition expmed.h:178
int x_zero_cost[2]
Definition expmed.h:167
struct expmed_op_costs x_add_cost
Definition expmed.h:168
bool x_alg_hash_used_p
Definition expmed.h:157
int x_shiftsub1_cost[2][NUM_MODE_IPV_INT][MAX_BITS_PER_WORD]
Definition expmed.h:173
struct expmed_op_costs x_mul_cost
Definition expmed.h:174
struct expmed_op_cheap x_smod_pow2_cheap
Definition expmed.h:164
struct expmed_op_costs x_neg_cost
Definition expmed.h:169
int x_mul_widen_cost[2][NUM_MODE_INT]
Definition expmed.h:177
int x_shiftsub0_cost[2][NUM_MODE_IPV_INT][MAX_BITS_PER_WORD]
Definition expmed.h:172
struct expmed_op_costs x_udiv_cost
Definition expmed.h:176
#define gcc_assert(EXPR)
Definition system.h:819
#define gcc_unreachable()
Definition system.h:846
#define IN_RANGE(VALUE, LOWER, UPPER)
Definition system.h:338
const T2 & y
Definition wide-int.h:3870