47typedef generic_wide_int <fixed_wide_int_storage <WIDE_INT_MAX_INL_PRECISION> >
281#define LOOP_C_INFINITE (1 << 0)
283#define LOOP_C_FINITE (1 << 1)
319#define LOOPS_NORMAL (LOOPS_HAVE_PREHEADERS | LOOPS_HAVE_SIMPLE_LATCHES \
320 | LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
321#define AVOID_CFG_MODIFICATIONS (LOOPS_MAY_HAVE_MULTIPLE_LATCHES)
347 void (*)(const class
loop *, FILE *,
int),
int);
349 void (*)(const class
loop *, FILE *,
int),
int);
385 int (*) (const
void *, const
void *));
387 int (*) (const
void *, const
void *,
void *));
409 bool *read_profile_p =
NULL);
412 bool *reliable =
NULL);
567inline vec<loop_p, va_gc> *
690 template <
typename T>
class Iter
718 return this->
curr_idx != rhs.curr_idx;
765 void walk_loop_tree (
class loop *root,
unsigned flags);
784 while (this->
list.to_visit.iterate (this->curr_idx, &anum))
810 gcc_assert ((flags & checked_flags) != checked_flags);
868#define this_target_cfgloop (&default_target_cfgloop)
871#define target_avail_regs \
872 (this_target_cfgloop->x_target_avail_regs)
873#define target_clobbered_regs \
874 (this_target_cfgloop->x_target_clobbered_regs)
875#define target_res_regs \
876 (this_target_cfgloop->x_target_res_regs)
877#define target_reg_cost \
878 (this_target_cfgloop->x_target_reg_cost)
879#define target_spill_cost \
880 (this_target_cfgloop->x_target_spill_cost)
937 a[0] = (
unsigned HOST_WIDE_INT) val;
942 a[1] = (
unsigned HOST_WIDE_INT) val;
944 return widest_int::from_array (
a, 2);
HOST_WIDE_INT get_estimated_loop_iterations_int(class loop *loop)
Definition cfgloop.cc:1951
HOST_WIDE_INT get_max_loop_iterations_int(const class loop *loop)
Definition cfgloop.cc:2049
bool get_max_loop_iterations(const class loop *loop, widest_int *nit)
Definition cfgloop.cc:2035
bool get_estimated_loop_iterations(class loop *loop, widest_int *nit)
Definition cfgloop.cc:2009
HOST_WIDE_INT get_likely_max_loop_iterations_int(class loop *loop)
Definition cfgloop.cc:2083
bool get_likely_max_loop_iterations(class loop *loop, widest_int *nit)
Definition cfgloop.cc:2069
DEBUG_FUNCTION void verify_loop_structure(void)
Definition cfgloop.cc:1392
int bb_loop_depth(const_basic_block bb)
Definition cfgloop.cc:2101
void record_niter_bound(class loop *loop, const widest_int &i_bound, bool realistic, bool upper)
Definition cfgloop.cc:1895
void flow_loops_free(struct loops *)
Definition cfgloop.cc:201
edge single_likely_exit(class loop *loop, const vec< edge > &)
Definition cfgloopanal.cc:564
iv_extend_code
Definition cfgloop.h:41
@ IV_SIGN_EXTEND
Definition cfgloop.h:42
@ IV_UNKNOWN_EXTEND
Definition cfgloop.h:44
@ IV_ZERO_EXTEND
Definition cfgloop.h:43
bool biv_p(rtx_insn *, scalar_int_mode, rtx)
Definition loop-iv.cc:1240
void iv_analysis_done(void)
Definition loop-iv.cc:1299
void add_bb_to_loop(basic_block, class loop *)
Definition cfgloop.cc:1256
struct target_cfgloop default_target_cfgloop
Definition cfgloopanal.cc:37
void record_niter_bound(class loop *, const widest_int &, bool, bool)
Definition cfgloop.cc:1895
void cancel_loop_tree(class loop *)
Definition cfgloop.cc:1367
void mark_loop_exit_edges(void)
Definition cfgloopanal.cc:536
edge loop_preheader_edge(const class loop *)
Definition cfgloop.cc:1760
void doloop_optimize_loops(void)
Definition loop-doloop.cc:833
bool loop_constraint_set_p(class loop *loop, unsigned c)
Definition cfgloop.h:301
void checking_verify_loop_structure(void)
Definition cfgloop.h:639
void release_recorded_exits(function *)
Definition cfgloop.cc:1185
void loop_optimizer_init(unsigned)
Definition loop-init.cc:86
void flow_loop_dump(const class loop *, FILE *, void(*)(const class loop *, FILE *, int), int)
Definition cfgloop.cc:111
gcov_type expected_loop_iterations_unbounded(const class loop *, bool *read_profile_p=NULL)
Definition cfgloopanal.cc:382
void verify_loop_structure(void)
Definition cfgloop.cc:1392
class loop * find_common_loop(class loop *, class loop *)
Definition cfgloop.cc:1307
void loop_constraint_set(class loop *loop, unsigned c)
Definition cfgloop.h:287
HOST_WIDE_INT get_estimated_loop_iterations_int(class loop *)
Definition cfgloop.cc:1951
edge single_exit(const class loop *)
Definition cfgloop.cc:1795
class loop * loop_outer(const class loop *loop)
Definition cfgloop.h:547
basic_block * get_loop_body(const class loop *)
Definition cfgloop.cc:881
bool iv_analyze_result(rtx_insn *, rtx, class rtx_iv *)
Definition loop-iv.cc:1222
loop_estimation
Definition cfgloop.h:103
@ EST_LAST
Definition cfgloop.h:108
@ EST_AVAILABLE
Definition cfgloop.h:107
@ EST_NOT_COMPUTED
Definition cfgloop.h:105
generic_wide_int< fixed_wide_int_storage< WIDE_INT_MAX_INL_PRECISION > > bound_wide_int
Definition cfgloop.h:48
auto_vec< edge > get_loop_exit_edges(const class loop *, basic_block *=NULL)
Definition cfgloop.cc:1196
profile_count loop_count_in(const class loop *loop)
Definition cfgloopanal.cc:239
class loop * get_loop(struct function *fn, unsigned num)
Definition cfgloop.h:530
basic_block * get_loop_body_in_custom_order(const class loop *, int(*)(const void *, const void *))
Definition cfgloop.cc:963
bool flow_bb_inside_loop_p(const class loop *, const_basic_block)
Definition cfgloop.cc:840
bool iv_analyze_expr(rtx_insn *, scalar_int_mode, rtx, class rtx_iv *)
Definition loop-iv.cc:960
void print_loop_info(FILE *file, const class loop *loop, const char *)
Definition tree-cfg.cc:8621
unsigned get_loop_body_with_size(const class loop *, basic_block *, unsigned)
Definition cfgloop.cc:869
void record_loop_exits(void)
Definition cfgloop.cc:1126
edge single_dom_exit(class loop *)
Definition tree-ssa-loop-ivopts.cc:747
unsigned estimate_reg_pressure_cost(unsigned, unsigned, bool, bool)
Definition cfgloopanal.cc:495
bool get_max_loop_iterations(const class loop *loop, widest_int *nit)
Definition cfgloop.cc:2035
edge loop_latch_edge(const class loop *)
Definition cfgloop.cc:1753
void flow_loops_dump(FILE *, void(*)(const class loop *, FILE *, int), int)
Definition cfgloop.cc:158
unsigned loop_depth(const class loop *loop)
Definition cfgloop.h:538
void loop_constraint_clear(class loop *loop, unsigned c)
Definition cfgloop.h:294
void init_loops_structure(struct function *, struct loops *, unsigned)
Definition cfgloop.cc:358
bool loop_exits_to_bb_p(class loop *, basic_block)
Definition cfgloop.cc:1811
void rescan_loop_exit(edge, bool, bool)
Definition cfgloop.cc:1072
bool get_estimated_loop_iterations(class loop *loop, widest_int *nit)
Definition cfgloop.cc:2009
bool expected_loop_iterations_by_profile(const class loop *loop, sreal *ret, bool *reliable=NULL)
Definition cfgloopanal.cc:277
void move_loop_invariants(void)
Definition loop-invariant.cc:2283
void disambiguate_loops_with_multiple_latches(void)
Definition cfgloop.cc:829
rtx get_iv_value(class rtx_iv *, rtx)
Definition loop-iv.cc:1264
bool just_once_each_iteration_p(const class loop *, const_basic_block)
Definition cfgloopanal.cc:45
void iv_analysis_loop_init(class loop *)
Definition loop-iv.cc:270
basic_block * get_loop_body_in_bfs_order(const class loop *)
Definition cfgloop.cc:989
rtx doloop_condition_get(rtx_insn *)
Definition loop-doloop.cc:74
bool loop_exits_from_bb_p(class loop *, basic_block)
Definition cfgloop.cc:1826
unsigned get_loop_level(const class loop *)
Definition cfgloopanal.cc:417
unsigned expected_loop_iterations(class loop *)
Definition cfgloopanal.cc:408
void loop_optimizer_finalize()
Definition cfgloop.h:891
int flow_loop_nodes_find(basic_block, class loop *)
Definition cfgloop.cc:225
bool mark_irreducible_loops(void)
Definition cfgloopanal.cc:75
void remove_bb_from_loops(basic_block)
Definition cfgloop.cc:1281
constexpr const T & as_const(T &t)
Definition cfgloop.h:674
vec< loop_p, va_gc > * get_loops(struct function *fn)
Definition cfgloop.h:568
class loop * loop_p
Definition cfgloop.h:98
struct loops * flow_loops_find(struct loops *)
Definition cfgloop.cc:416
void init_set_costs(void)
Definition cfgloopanal.cc:434
HOST_WIDE_INT get_likely_max_loop_iterations_int(class loop *)
Definition cfgloop.cc:2083
bool maybe_flat_loop_profile(const class loop *)
Definition cfgloopanal.cc:330
bool loop_has_exit_edges(const class loop *loop)
Definition cfgloop.h:560
int bb_loop_depth(const_basic_block)
Definition cfgloop.cc:2101
bool get_likely_max_loop_iterations(class loop *loop, widest_int *nit)
Definition cfgloop.cc:2069
void free_simple_loop_desc(class loop *loop)
Definition loop-iv.cc:3026
void loops_state_clear(function *fn, unsigned flags)
Definition cfgloop.h:622
int num_loop_insns(const class loop *)
Definition cfgloopanal.cc:177
bool loops_state_satisfies_p(function *fn, unsigned flags)
Definition cfgloop.h:594
lpt_dec
Definition cfgloop.h:27
@ LPT_NONE
Definition cfgloop.h:28
@ LPT_UNROLL_STUPID
Definition cfgloop.h:31
@ LPT_UNROLL_CONSTANT
Definition cfgloop.h:29
@ LPT_UNROLL_RUNTIME
Definition cfgloop.h:30
void delete_loop(class loop *)
Definition cfgloop.cc:1333
HOST_WIDE_INT get_max_loop_iterations_int(const class loop *)
Definition cfgloop.cc:2049
basic_block * get_loop_body_in_dom_order(const class loop *)
Definition cfgloop.cc:941
class niter_desc * simple_loop_desc(class loop *loop)
Definition cfgloop.h:520
void flow_loop_tree_node_remove(class loop *)
Definition cfgloop.cc:318
auto_vec< basic_block > get_loop_hot_path(const class loop *loop)
Definition cfgloopanal.cc:595
li_flags
Definition cfgloop.h:662
@ LI_FROM_INNERMOST
Definition cfgloop.h:664
@ LI_ONLY_INNERMOST
Definition cfgloop.h:666
@ LI_INCLUDE_ROOT
Definition cfgloop.h:663
unsigned num_loop_branches(const class loop *)
Definition cfgloop.cc:1237
#define this_target_cfgloop
Definition cfgloop.h:868
widest_int gcov_type_to_wide_int(gcov_type val)
Definition cfgloop.h:933
void flow_loop_tree_node_add(class loop *, class loop *, class loop *=NULL)
Definition cfgloop.cc:298
class loop * superloop_at_depth(class loop *, unsigned)
Definition cfgloop.cc:77
void sort_sibling_loops(function *)
Definition cfgloop.cc:544
class loop * loop_outermost(class loop *loop)
Definition cfgloop.h:909
unsigned fix_loop_structure(bitmap changed_bbs)
Definition loop-init.cc:200
void loops_state_set(function *fn, unsigned flags)
Definition cfgloop.h:608
dump_user_location_t get_loop_location(class loop *loop)
Definition cfgloop.cc:1841
bool bb_loop_header_p(basic_block)
Definition cfgloop.cc:381
void mark_loop_for_removal(loop_p)
Definition cfgloop.cc:2109
bool loop_exit_edge_p(const class loop *, const_edge)
Definition cfgloop.cc:1784
@ LOOPS_HAVE_PREHEADERS
Definition cfgloop.h:309
@ LOOPS_HAVE_RECORDED_EXITS
Definition cfgloop.h:312
@ LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS
Definition cfgloop.h:311
@ LOOPS_HAVE_FALLTHRU_PREHEADERS
Definition cfgloop.h:316
@ LOOPS_HAVE_SIMPLE_LATCHES
Definition cfgloop.h:310
@ LOOPS_NEED_FIXUP
Definition cfgloop.h:315
@ LOOP_CLOSED_SSA
Definition cfgloop.h:314
@ LOOPS_MAY_HAVE_MULTIPLE_LATCHES
Definition cfgloop.h:313
class niter_desc * get_simple_loop_desc(class loop *loop)
Definition loop-iv.cc:3007
class loop * alloc_loop(void)
Definition cfgloop.cc:340
int average_num_loop_insns(const class loop *)
Definition cfgloopanal.cc:201
bool iv_analyze(rtx_insn *, scalar_int_mode, rtx, class rtx_iv *)
Definition loop-iv.cc:1197
@ UAP_UNROLL_ALL
Definition cfgloop.h:900
@ UAP_UNROLL
Definition cfgloop.h:899
void flow_loop_free(class loop *)
Definition cfgloop.cc:177
bool flow_loop_nested_p(const class loop *, const class loop *)
Definition cfgloop.cc:65
unsigned number_of_loops(struct function *fn)
Definition cfgloop.h:581
Definition dumpfile.h:340
Definition hash-table.h:375
int simdlen
Definition cfgloop.h:183
bound_wide_int nb_iterations_estimate
Definition cfgloop.h:174
struct lpt_decision lpt_decision
Definition cfgloop.h:136
class loop * next
Definition cfgloop.h:151
class loop * inner
Definition cfgloop.h:148
unsigned any_likely_upper_bound
Definition cfgloop.h:214
enum loop_estimation estimate_state
Definition cfgloop.h:210
unsigned any_upper_bound
Definition cfgloop.h:212
vec< loop_p, va_gc > * superloops
Definition cfgloop.h:145
int num
Definition cfgloop.h:124
struct control_iv * control_ivs
Definition cfgloop.h:265
unsigned constraints
Definition cfgloop.h:206
class niter_desc * simple_loop_desc
Definition cfgloop.h:271
unsigned av_ninsns
Definition cfgloop.h:139
unsigned any_estimate
Definition cfgloop.h:213
unsigned warned_aggressive_loop_optimizations
Definition cfgloop.h:221
unsigned dont_vectorize
Definition cfgloop.h:224
unsigned can_be_parallel
Definition cfgloop.h:217
unsigned force_vectorize
Definition cfgloop.h:227
basic_block latch
Definition cfgloop.h:133
int safelen
Definition cfgloop.h:180
basic_block former_header
Definition cfgloop.h:277
bound_wide_int nb_iterations_likely_upper_bound
Definition cfgloop.h:169
void * aux
Definition cfgloop.h:154
int orig_loop_num
Definition cfgloop.h:259
tree simduid
Definition cfgloop.h:249
unsigned ninsns
Definition cfgloop.h:127
unsigned short unroll
Definition cfgloop.h:240
unsigned num_nodes
Definition cfgloop.h:142
unsigned short owned_clique
Definition cfgloop.h:244
struct loop_exit * exits
Definition cfgloop.h:268
tree nb_iterations
Definition cfgloop.h:163
unsigned finite_p
Definition cfgloop.h:234
class nb_iter_bound * bounds
Definition cfgloop.h:262
bound_wide_int nb_iterations_upper_bound
Definition cfgloop.h:167
basic_block header
Definition cfgloop.h:130
unsigned in_oacc_kernels_region
Definition cfgloop.h:230
Iter & operator++()
Definition cfgloop.h:701
unsigned curr_idx
Definition cfgloop.h:729
class loop * curr_loop
Definition cfgloop.h:732
bool operator!=(const Iter &rhs) const
Definition cfgloop.h:716
void fill_curr_loop()
Definition cfgloop.h:780
Iter(const loops_list &l, unsigned idx)
Definition cfgloop.h:693
const loops_list & list
Definition cfgloop.h:726
T operator*() const
Definition cfgloop.h:698
Iter< const class loop * > const_iterator
Definition cfgloop.h:736
function * fn
Definition cfgloop.h:768
const_iterator begin() const
Definition cfgloop.h:751
auto_vec< int, 16 > to_visit
Definition cfgloop.h:771
const_iterator end() const
Definition cfgloop.h:757
void walk_loop_tree(class loop *root, unsigned flags)
Definition cfgloop.cc:2127
Iter< class loop * > iterator
Definition cfgloop.h:735
iterator end()
Definition cfgloop.h:745
iterator begin()
Definition cfgloop.h:739
loops_list(function *fn, unsigned flags, class loop *root=nullptr)
Definition cfgloop.h:803
class nb_iter_bound * next
Definition cfgloop.h:72
bound_wide_int bound
Definition cfgloop.h:64
gimple * stmt
Definition cfgloop.h:55
bool is_exit
Definition cfgloop.h:69
bool const_iter
Definition cfgloop.h:482
rtx assumptions
Definition cfgloop.h:488
edge in_edge
Definition cfgloop.h:475
rtx niter_expr
Definition cfgloop.h:504
rtx noloop_assumptions
Definition cfgloop.h:492
rtx infinite
Definition cfgloop.h:495
bool simple_p
Definition cfgloop.h:479
bool signed_p
Definition cfgloop.h:498
scalar_int_mode mode
Definition cfgloop.h:501
uint64_t niter
Definition cfgloop.h:485
edge out_edge
Definition cfgloop.h:472
rtx mult
Definition cfgloop.h:453
enum iv_extend_code extend
Definition cfgloop.h:450
rtx base
Definition cfgloop.h:446
rtx step
Definition cfgloop.h:446
scalar_int_mode mode
Definition cfgloop.h:459
scalar_int_mode extend_mode
Definition cfgloop.h:456
unsigned first_special
Definition cfgloop.h:462
rtx delta
Definition cfgloop.h:453
Definition machmode.h:437
struct basic_block_def * basic_block
Definition coretypes.h:355
struct rtx_def * rtx
Definition coretypes.h:57
class edge_def * edge
Definition coretypes.h:352
const class edge_def * const_edge
Definition coretypes.h:353
const struct basic_block_def * const_basic_block
Definition coretypes.h:356
#define GTY(x)
Definition coretypes.h:41
class bitmap_head * bitmap
Definition coretypes.h:51
int64_t gcov_type
Definition coretypes.h:46
union tree_node * tree
Definition coretypes.h:97
bool operator!=(const nowarn_spec_t &lhs, const nowarn_spec_t &rhs)
Definition diagnostic-spec.h:139
struct loops * loops_for_fn(struct function *fn)
Definition function.h:514
#define current_loops
Definition function.h:542
#define cfun
Definition function.h:478
static struct token T
Definition gengtype-parse.cc:45
#define HOST_BITS_PER_WIDE_INT
Definition hwint.h:53
i
Definition poly-int.h:776
Ca & a
Definition poly-int.h:770
tree base
Definition cfgloop.h:114
tree step
Definition cfgloop.h:115
struct control_iv * next
Definition cfgloop.h:116
Definition tree-inline.h:186
Definition function.h:249
Definition hash-traits.h:321
static hashval_t hash(loop_exit *)
Definition cfgloop.cc:1027
static bool equal(loop_exit *, edge)
Definition cfgloop.cc:1035
edge compare_type
Definition cfgloop.h:91
static void remove(loop_exit *)
Definition cfgloop.cc:1043
struct loop_exit * prev
Definition cfgloop.h:82
struct loop_exit * next_e
Definition cfgloop.h:86
struct loop_exit * next
Definition cfgloop.h:83
edge e
Definition cfgloop.h:79
hash_table< loop_exit_hasher > * exits
Definition cfgloop.h:334
class loop * tree_root
Definition cfgloop.h:337
int state
Definition cfgloop.h:326
vec< loop_p, va_gc > * larray
Definition cfgloop.h:329
unsigned times
Definition cfgloop.h:36
enum lpt_dec decision
Definition cfgloop.h:35
Definition profile-count.h:750
Definition genautomata.cc:669
unsigned x_target_avail_regs
Definition cfgloop.h:848
unsigned x_target_reg_cost[2]
Definition cfgloop.h:858
unsigned x_target_res_regs
Definition cfgloop.h:854
unsigned x_target_clobbered_regs
Definition cfgloop.h:851
unsigned x_target_spill_cost[2]
Definition cfgloop.h:861
#define NULL
Definition system.h:50
#define gcc_assert(EXPR)
Definition system.h:814
bool vec_safe_iterate(const vec< T, A, vl_embed > *v, unsigned ix, T **ptr)
Definition vec.h:803
unsigned vec_safe_length(const vec< T, A, vl_embed > *v)
Definition vec.h:685
generic_wide_int< widest_int_storage< WIDEST_INT_MAX_PRECISION > > widest_int
Definition wide-int.h:345