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
 

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
 

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:289
void next()
Definition value-relation.cc:1713

◆ 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 ())

◆ TRIO_MASK

#define TRIO_MASK   0x000F

◆ TRIO_SHIFT

◆ TRIO_VARYING

#define TRIO_VARYING   relation_trio ()

Referenced by fold_relations().

Typedef Documentation

◆ relation_kind

Header file for the value range relational processing.
   Copyright (C) 2020-2024 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-2024 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_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