GCC Middle and Back End API Reference
value-relation.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

class  relation_oracle
class  equiv_chain
class  pe_slice
class  equiv_oracle
class  relation_chain_head
class  dom_oracle
class  path_oracle
class  equiv_relation_iterator
class  relation_trio
class  value_relation
class  block_relation_iterator

Macros

#define FOR_EACH_EQUIVALENCE(oracle, bb, name, equiv_name)
#define FOR_EACH_PARTIAL_EQUIV(oracle, bb, name, equiv_name, equiv_rel)
#define FOR_EACH_PARTIAL_AND_FULL_EQUIV(oracle, bb, name, equiv_name, equiv_rel)
#define TRIO_VARYING   relation_trio ()
#define TRIO_SHIFT   4
#define TRIO_MASK   0x000F
#define FOR_EACH_RELATION_BB(oracle, bb, vr)
#define FOR_EACH_RELATION_NAME(oracle, bb, name, vr)

Typedefs

typedef enum relation_kind_t relation_kind

Enumerations

enum  relation_kind_t {
  VREL_VARYING = 0 , VREL_UNDEFINED , VREL_LT , VREL_LE ,
  VREL_GT , VREL_GE , VREL_EQ , VREL_NE ,
  VREL_PE8 , VREL_PE16 , VREL_PE32 , VREL_PE64 ,
  VREL_LAST
}

Functions

relation_kind relation_union (relation_kind r1, relation_kind r2)
relation_kind relation_intersect (relation_kind r1, relation_kind r2)
relation_kind relation_negate (relation_kind r)
relation_kind relation_swap (relation_kind r)
bool relation_lt_le_gt_ge_p (relation_kind r)
bool relation_partial_equiv_p (relation_kind r)
bool relation_equiv_p (relation_kind r)
void print_relation (FILE *f, relation_kind rel)
void adjust_equivalence_range (vrange &range)
int pe_to_bits (relation_kind t)
relation_kind bits_to_pe (int bits)
relation_kind pe_min (relation_kind t1, relation_kind t2)

Variables

relation_oracle default_relation_oracle

Macro Definition Documentation

◆ FOR_EACH_EQUIVALENCE

#define FOR_EACH_EQUIVALENCE ( oracle,
bb,
name,
equiv_name )
Value:
for (equiv_relation_iterator iter (oracle, bb, name, true, false); \
((equiv_name) = iter.get_name ()); \
iter.next ())
Definition value-relation.h:296
void next()
Definition value-relation.cc:1815

◆ FOR_EACH_PARTIAL_AND_FULL_EQUIV

#define FOR_EACH_PARTIAL_AND_FULL_EQUIV ( oracle,
bb,
name,
equiv_name,
equiv_rel )
Value:
for (equiv_relation_iterator iter (oracle, bb, name, true, true); \
((equiv_name) = iter.get_name (&equiv_rel)); \
iter.next ())

Referenced by ranger_cache::fill_block_cache().

◆ FOR_EACH_PARTIAL_EQUIV

#define FOR_EACH_PARTIAL_EQUIV ( oracle,
bb,
name,
equiv_name,
equiv_rel )
Value:
for (equiv_relation_iterator iter (oracle, bb, name, false, true); \
((equiv_name) = iter.get_name (&equiv_rel)); \
iter.next ())

◆ FOR_EACH_RELATION_BB

#define FOR_EACH_RELATION_BB ( oracle,
bb,
vr )
Value:
for (block_relation_iterator iter (oracle, bb, vr); \
!iter.m_done; \
iter.get_next_relation (vr))
Definition value-relation.h:481
bool m_done
Definition value-relation.h:489

Referenced by dom_oracle::dump().

◆ FOR_EACH_RELATION_NAME

#define FOR_EACH_RELATION_NAME ( oracle,
bb,
name,
vr )
Value:
for (block_relation_iterator iter (oracle, bb, vr, name); \
!iter.m_done; \
iter.get_next_relation (vr))

◆ TRIO_MASK

#define TRIO_MASK   0x000F

◆ TRIO_SHIFT

◆ TRIO_VARYING

Typedef Documentation

◆ relation_kind

Header file for the value range relational processing. Copyright (C) 2020-2025 Free Software Foundation, Inc. Contributed by Andrew MacLeod <amacleod@redhat.com> This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.

Enumeration Type Documentation

◆ relation_kind_t

Header file for the value range relational processing. Copyright (C) 2020-2025 Free Software Foundation, Inc. Contributed by Andrew MacLeod <amacleod@redhat.com> This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
Enumerator
VREL_VARYING 
VREL_UNDEFINED 
VREL_LT 
VREL_LE 
VREL_GT 
VREL_GE 
VREL_EQ 
VREL_NE 
VREL_PE8 
VREL_PE16 
VREL_PE32 
VREL_PE64 
VREL_LAST 

Function Documentation

◆ adjust_equivalence_range()

◆ bits_to_pe()

◆ pe_min()

◆ pe_to_bits()

◆ print_relation()

void print_relation ( FILE * f,
relation_kind rel )

◆ relation_equiv_p()

◆ relation_intersect()

◆ relation_lt_le_gt_ge_p()

bool relation_lt_le_gt_ge_p ( relation_kind r)
inline

References r, VREL_GE, and VREL_LT.

Referenced by adjust_op1_for_overflow().

◆ relation_negate()

relation_kind relation_negate ( relation_kind r)

◆ relation_partial_equiv_p()

bool relation_partial_equiv_p ( relation_kind r)
inline

References r, VREL_PE64, and VREL_PE8.

Referenced by pe_min(), equiv_oracle::record(), and relation_equiv_p().

◆ relation_swap()

◆ relation_union()

Variable Documentation

◆ default_relation_oracle