21#ifndef GCC_VALUE_RELATION_H
22#define GCC_VALUE_RELATION_H
117 virtual void dump (FILE *)
const { }
151 void dump (FILE *f)
const;
183 void dump (FILE *f)
const override;
282 void dump (FILE *f)
const final override;
285 tree)
const override;
374 void dump (FILE *)
const final override;
390 bool full =
true,
bool partial =
false);
402#define FOR_EACH_EQUIVALENCE(oracle, bb, name, equiv_name) \
403 for (equiv_relation_iterator iter (oracle, bb, name, true, false); \
404 ((equiv_name) = iter.get_name ()); \
407#define FOR_EACH_PARTIAL_EQUIV(oracle, bb, name, equiv_name, equiv_rel) \
408 for (equiv_relation_iterator iter (oracle, bb, name, false, true); \
409 ((equiv_name) = iter.get_name (&equiv_rel)); \
412#define FOR_EACH_PARTIAL_AND_FULL_EQUIV(oracle, bb, name, equiv_name, \
414 for (equiv_relation_iterator iter (oracle, bb, name, true, true); \
415 ((equiv_name) = iter.get_name (&equiv_rel)); \
446#define TRIO_VARYING relation_trio ()
449#define TRIO_MASK 0x000F
535 void dump (FILE *f)
const;
584#define FOR_EACH_RELATION_BB(oracle, bb, vr) \
585 for (block_relation_iterator iter (oracle, bb, vr); \
587 iter.get_next_relation (vr))
589#define FOR_EACH_RELATION_NAME(oracle, bb, name, vr) \
590 for (block_relation_iterator iter (oracle, bb, vr, name); \
592 iter.get_next_relation (vr))
const relation_oracle * m_oracle
Definition value-relation.h:577
basic_block m_bb
Definition value-relation.h:578
void get_next_relation(value_relation &vr)
Definition value-relation.cc:1158
block_relation_iterator(const relation_oracle *oracle, basic_block bb, value_relation &, tree name=NULL)
Definition value-relation.cc:1137
bool m_done
Definition value-relation.h:580
tree m_name
Definition value-relation.h:581
relation_chain * m_ptr
Definition value-relation.h:579
vec< struct related > m_near
Definition value-relation.h:313
frontier_data m_rhs_search
Definition value-relation.h:316
relation_chain * create_relation_in_bb(basic_block bb, relation_kind k, tree op1, tree op2)
Definition value-relation.cc:1459
void cache_relation(basic_block, relation_kind, tree, tree)
Definition value-relation.cc:1883
bool record(basic_block bb, relation_kind k, tree op1, tree op2) final override
Definition value-relation.cc:1421
bitmap m_tmp2
Definition value-relation.h:286
basic_block nearest_relations(tree name, basic_block bb)
Definition value-relation.cc:1829
virtual relation_chain * next_relation(basic_block, relation_chain *, tree) const override
Definition value-relation.cc:1110
relation_chain * search_and_merge_relation(basic_block bb, relation_kind k, tree op1, tree op2)
Definition value-relation.cc:1508
unsigned m_wl_ix
Definition value-relation.h:332
void dump(FILE *f, basic_block bb) const final override
Definition value-relation.cc:2145
void start_search(frontier_data &side, tree root, const_bitmap equiv, basic_block bb)
Definition value-relation.cc:1900
vec< struct frontier_element > m_worklist
Definition value-relation.h:331
vec< bitmap > m_block_list
Definition value-relation.h:289
frontier_data m_lhs_search
Definition value-relation.h:315
void record_relation_block(unsigned v, unsigned bbi)
Definition value-relation.cc:1443
void clear(tree name) override
Definition value-relation.cc:1319
relation_kind find_relation_dom(basic_block bb, tree ssa1, tree ssa2) const
Definition value-relation.cc:1803
relation_kind relation_search(basic_block, tree, const_bitmap, tree, const_bitmap)
Definition value-relation.cc:2034
bitmap m_relation_set
Definition value-relation.h:287
relation_kind query(basic_block bb, tree ssa1, tree ssa2) final override
Definition value-relation.cc:2111
relation_kind find_relation_block(unsigned bb, const_bitmap b1, const_bitmap b2) const
Definition value-relation.cc:1558
bitmap m_tmp
Definition value-relation.h:286
dom_oracle()
Definition value-relation.cc:1260
relation_kind recomputed_relation(basic_block, tree, tree) const
Definition value-relation.cc:1641
bool expand_frontier(frontier_element w, basic_block bb, relation_kind &result)
Definition value-relation.cc:1958
vec< relation_chain_head > m_relations
Definition value-relation.h:288
void add_to_frontier(frontier_data &side, tree name, relation_kind rel, basic_block bb)
Definition value-relation.cc:1929
Definition value-relation.h:146
void dump(FILE *f) const
Definition value-relation.cc:364
equiv_chain * find(unsigned ssa)
Definition value-relation.cc:347
equiv_chain * m_next
Definition value-relation.h:150
bitmap m_names
Definition value-relation.h:148
basic_block m_bb
Definition value-relation.h:149
Definition value-relation.h:195
bitmap m_block_list
Definition value-relation.h:198
bitmap m_self_equiv
Definition value-relation.h:197
relation_kind partial_equiv(tree ssa1, tree ssa2, tree *base=NULL) const
Definition value-relation.cc:510
bool has_equiv_p(unsigned v)
Definition value-relation.h:188
equiv_chain * find_equiv_dom(tree name, basic_block bb) const
Definition value-relation.cc:616
const_bitmap equiv_set(tree ssa, basic_block bb) final override
Definition value-relation.cc:555
void register_equiv_block(unsigned v, unsigned bbi)
Definition value-relation.cc:530
bool record(basic_block bb, relation_kind k, tree ssa1, tree ssa2) override
Definition value-relation.cc:776
vec< pe_slice > m_partial
Definition value-relation.h:201
bitmap m_equiv_set
Definition value-relation.h:192
bitmap_obstack m_bitmaps
Definition value-relation.h:189
void limit_check(basic_block bb=NULL)
Definition value-relation.cc:868
struct obstack m_chain_obstack
Definition value-relation.h:190
vec< name_info > m_name_info
Definition value-relation.h:200
equiv_oracle()
Definition value-relation.cc:387
bool add_partial_equiv(relation_kind, tree, tree)
Definition value-relation.cc:420
void dump(FILE *f, basic_block bb) const override
Definition value-relation.cc:878
relation_kind query(basic_block, tree, tree) override
Definition value-relation.cc:578
equiv_chain * find_equiv_block(unsigned ssa, int bb) const
Definition value-relation.cc:604
vec< equiv_chain * > m_equiv
Definition value-relation.h:193
const pe_slice * partial_equiv_set(tree name) final override
Definition value-relation.cc:497
void add_equiv_to_block(basic_block bb, bitmap equiv)
Definition value-relation.cc:835
void register_initial_def(tree ssa)
Definition value-relation.cc:714
bitmap register_equiv(basic_block bb, unsigned v, equiv_chain *equiv_1)
Definition value-relation.cc:638
void clear(tree name) override
Definition value-relation.cc:735
const pe_slice * m_pe
Definition value-relation.h:396
tree get_name(relation_kind *rel=NULL)
Definition value-relation.cc:2493
tree m_name
Definition value-relation.h:399
relation_oracle * m_oracle
Definition value-relation.h:394
unsigned m_y
Definition value-relation.h:398
bitmap_iterator m_bi
Definition value-relation.h:397
const_bitmap m_bm
Definition value-relation.h:395
void next()
Definition value-relation.cc:2484
equiv_relation_iterator(relation_oracle *oracle, basic_block bb, tree name, bool full=true, bool partial=false)
Definition value-relation.cc:2465
Definition value-relation.h:240
tree m_root
Definition value-relation.h:252
bitmap m_visited
Definition value-relation.h:250
void clear_search()
Definition value-relation.cc:1244
relation_kind known_relation(unsigned v) const
Definition value-relation.cc:1233
bool m_rhs
Definition value-relation.h:253
bool visited_p(unsigned v) const
Definition value-relation.h:246
void set_known(unsigned v, relation_kind rel)
Definition value-relation.cc:1223
frontier_data(bitmap_obstack *obstack, bool rhs)
Definition value-relation.cc:1212
~frontier_data()
Definition value-relation.h:243
vec< relation_kind > m_known
Definition value-relation.h:251
equiv_chain m_equiv
Definition value-relation.h:377
relation_kind query(basic_block, tree, tree) final override
Definition value-relation.cc:2395
relation_oracle * m_root
Definition value-relation.h:379
void reset_path(relation_oracle *oracle=NULL)
Definition value-relation.cc:2420
void dump(FILE *, basic_block) const final override
Definition value-relation.cc:2433
void killing_def(tree)
Definition value-relation.cc:2272
struct obstack m_chain_obstack
Definition value-relation.h:383
bitmap_obstack m_bitmaps
Definition value-relation.h:382
path_oracle(relation_oracle *oracle=NULL)
Definition value-relation.cc:2183
bitmap m_killed_defs
Definition value-relation.h:380
void set_root_oracle(relation_oracle *oracle)
Definition value-relation.h:369
bool record(basic_block, relation_kind, tree, tree) final override
Definition value-relation.cc:2319
const_bitmap equiv_set(tree, basic_block) final override
Definition value-relation.cc:2224
void clear(tree name) override
Definition value-relation.cc:2207
bool register_equiv(basic_block bb, tree ssa1, tree ssa2)
Definition value-relation.cc:2245
relation_chain_head m_relations
Definition value-relation.h:378
Definition value-relation.h:156
tree ssa_base
Definition value-relation.h:158
relation_kind code
Definition value-relation.h:159
bitmap members
Definition value-relation.h:160
Definition value-relation.h:221
relation_kind find_relation(const_bitmap b1, const_bitmap b2) const
Definition value-relation.cc:1183
bitmap m_names
Definition value-relation.h:223
int m_num_relations
Definition value-relation.h:225
void clear(tree name)
Definition value-relation.cc:1288
class relation_chain * m_head
Definition value-relation.h:224
Definition value-relation.cc:1099
Definition value-relation.h:98
relation_kind query(gimple *s, tree ssa1, tree ssa2)
Definition value-relation.cc:305
virtual void clear(tree)
Definition value-relation.h:114
virtual void dump(FILE *, basic_block) const
Definition value-relation.h:116
bitmap m_lhs_equiv_set_p
Definition value-relation.h:136
virtual ~relation_oracle()
Definition value-relation.h:101
virtual relation_kind query(basic_block, tree, tree)
Definition value-relation.h:111
friend class path_oracle
Definition value-relation.h:134
virtual void dump(FILE *) const
Definition value-relation.h:117
virtual const class pe_slice * partial_equiv_set(tree)
Definition value-relation.h:129
void valid_equivs(bitmap b, const_bitmap equivs, basic_block bb)
Definition value-relation.cc:284
virtual relation_kind query(basic_block, const_bitmap, const_bitmap)
Definition value-relation.h:132
bool record(gimple *, relation_kind, tree, tree)
Definition value-relation.cc:1344
friend class block_relation_iterator
Definition value-relation.h:121
virtual const_bitmap equiv_set(tree, basic_block)
Definition value-relation.h:127
virtual bool record(basic_block, relation_kind, tree, tree)
Definition value-relation.h:106
relation_oracle()
Definition value-relation.h:100
virtual class relation_chain * next_relation(basic_block, relation_chain *, tree) const
Definition value-relation.h:122
friend class equiv_relation_iterator
Definition value-relation.h:120
Definition value-relation.h:427
relation_kind op1_op2()
Definition value-relation.h:501
relation_kind lhs_op2()
Definition value-relation.h:495
unsigned m_val
Definition value-relation.h:442
relation_trio swap_op1_op2()
Definition value-relation.h:507
relation_trio()
Definition value-relation.h:455
relation_kind lhs_op1()
Definition value-relation.h:489
Definition value-relation.h:519
tree name1
Definition value-relation.h:538
relation_trio create_trio(tree lhs, tree op1, tree op2)
Definition value-relation.cc:1048
tree name2
Definition value-relation.h:538
bool union_(value_relation &p)
Definition value-relation.cc:962
void set_relation(relation_kind kind, tree n1, tree n2)
Definition value-relation.h:544
void dump(FILE *f) const
Definition value-relation.cc:1082
value_relation()
Definition value-relation.h:556
relation_kind kind() const
Definition value-relation.h:525
relation_kind related
Definition value-relation.h:537
bool apply_transitive(const value_relation &rel)
Definition value-relation.cc:981
tree op1() const
Definition value-relation.h:526
void swap()
Definition value-relation.cc:932
tree op2() const
Definition value-relation.h:527
bool intersect(value_relation &p)
Definition value-relation.cc:944
Definition value-range.h:88
bool debug
Definition collect-utils.cc:34
struct basic_block_def * basic_block
Definition coretypes.h:351
class edge_def * edge
Definition coretypes.h:348
const class bitmap_head * const_bitmap
Definition coretypes.h:52
class bitmap_head * bitmap
Definition coretypes.h:51
union tree_node * tree
Definition coretypes.h:97
int i2
Definition fp-test.cc:66
int i1
Definition fp-test.cc:66
#define bitmap_bit_p(bitstring, bitno)
Definition genautomata.cc:3429
poly_int< N, C > r
Definition poly-int.h:774
Ca const poly_int< N, Cb > & b
Definition poly-int.h:771
Definition value-relation.h:321
basic_block bb
Definition value-relation.h:324
bool rhs
Definition value-relation.h:325
relation_kind rel
Definition value-relation.h:322
tree name
Definition value-relation.h:323
#define NULL
Definition system.h:58
#define MIN(X, Y)
Definition system.h:410
#define STATIC_ASSERT(X)
Definition system.h:869
#define gcc_checking_assert(EXPR)
Definition system.h:826
#define TREE_CODE(NODE)
Definition tree.h:325
#define NULL_TREE
Definition tree.h:318
relation_oracle default_relation_oracle
Definition value-query.cc:233
void adjust_equivalence_range(vrange &range)
Definition value-relation.cc:266
relation_kind relation_intersect(relation_kind r1, relation_kind r2)
Definition value-relation.cc:133
relation_kind relation_union(relation_kind r1, relation_kind r2)
Definition value-relation.cc:192
void print_relation(FILE *f, relation_kind rel)
Definition value-relation.cc:42
relation_kind relation_swap(relation_kind r)
Definition value-relation.cc:70
relation_kind relation_negate(relation_kind r)
Definition value-relation.cc:56
#define TRIO_MASK
Definition value-relation.h:449
enum relation_kind_t relation_kind
#define TRIO_SHIFT
Definition value-relation.h:448
int pe_to_bits(relation_kind t)
Definition value-relation.h:599
relation_kind_t
Definition value-relation.h:64
@ VREL_PE8
Definition value-relation.h:73
@ VREL_PE16
Definition value-relation.h:74
@ VREL_GT
Definition value-relation.h:69
@ VREL_LT
Definition value-relation.h:67
@ VREL_LE
Definition value-relation.h:68
@ VREL_LAST
Definition value-relation.h:77
@ VREL_NE
Definition value-relation.h:72
@ VREL_EQ
Definition value-relation.h:71
@ VREL_PE32
Definition value-relation.h:75
@ VREL_VARYING
Definition value-relation.h:65
@ VREL_UNDEFINED
Definition value-relation.h:66
@ VREL_GE
Definition value-relation.h:70
@ VREL_PE64
Definition value-relation.h:76
relation_kind pe_min(relation_kind t1, relation_kind t2)
Definition value-relation.h:640
bool relation_partial_equiv_p(relation_kind r)
Definition value-relation.h:87
relation_kind bits_to_pe(int bits)
Definition value-relation.h:620
bool relation_equiv_p(relation_kind r)
Definition value-relation.h:89
relation_kind relation_swap(relation_kind r)
Definition value-relation.cc:70
bool relation_lt_le_gt_ge_p(relation_kind r)
Definition value-relation.h:85