GCC Middle and Back End API Reference
genmatch.cc File Reference
#include "bconfig.h"
#include "system.h"
#include "coretypes.h"
#include <cpplib.h>
#include "rich-location.h"
#include "errors.h"
#include "hash-table.h"
#include "hash-set.h"
#include "is-a.h"
#include "ordered-hash-map.h"
#include "tree.def"
#include "builtins.def"
#include "internal-fn.def"
#include "case-cfn-macros.h"
Include dependency graph for genmatch.cc:

Data Structures

class  id_base
 
class  operator_id
 
class  fn_id
 
class  predicate_id
 
class  user_id
 
class  operand
 
class  predicate
 
struct  expr
 
class  c_expr
 
class  c_expr::id_tab
 
class  capture
 
class  if_expr
 
class  with_expr
 
class  simplify
 
struct  sinfo
 
struct  sinfo_hashmap_traits
 
class  dt_node
 
class  dt_operand
 
class  dt_simplify
 
class  decision_tree
 
class  capture_info
 
struct  capture_info::cinfo
 
class  parser
 

Macros

#define SIZED_BASED_CHUNKS   1
 
#define DEFTREECODE(SYM, STRING, TYPE, NARGS)   SYM,
 
#define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND)   ENUM,
 
#define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC)   IFN_##CODE,
 
#define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND)    CFN_##ENUM = int (ENUM),
 
#define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC)    CFN_##CODE = int (END_BUILTINS) + int (IFN_##CODE),
 
#define DEFTREECODE(SYM, STRING, TYPE, NARGS)    add_operator (SYM, # SYM, # TYPE, NARGS);
 
#define END_OF_BASE_TREE_CODES
 
#define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND)    add_function (ENUM, "CFN_" # ENUM);
 
#define DEF_INTERNAL_FN(CODE, NAME, FNSPEC)    add_function (IFN_##CODE, "CFN_" #CODE);
 

Typedefs

typedef hash_map< nofree_string_hash, unsignedcid_map_t
 
typedef ordered_hash_map< void *, sinfo *, sinfo_hashmap_traitssinfo_map_t
 

Enumerations

enum  tree_code { MAX_TREE_CODES }
 
enum  built_in_function { END_BUILTINS }
 
enum  internal_fn { IFN_LAST }
 
enum  combined_fn { CFN_LAST }
 

Functions

voidggc_internal_cleared_alloc (size_t, void(*)(void *), size_t, size_t MEM_STAT_DECL)
 
void ggc_free (void *)
 
expanded_location linemap_client_expand_location_to_spelling_point (const line_maps *set, location_t loc, enum location_aspect)
 
static bool diagnostic_cb (cpp_reader *, enum cpp_diagnostic_level errtype, enum cpp_warning_reason, rich_location *richloc, const char *msg, va_list *ap)
 
static void fatal_at (const cpp_token *tk, const char *msg,...)
 
static void fatal_at (location_t loc, const char *msg,...)
 
static void warning_at (const cpp_token *tk, const char *msg,...)
 
static void warning_at (location_t loc, const char *msg,...)
 
static void fprintf_indent (FILE *f, unsigned int indent, const char *format,...)
 
static void fp_decl (FILE *f, const char *format,...)
 
static void fp_decl_done (FILE *f, const char *trailer)
 
static void write_header_declarations (bool gimple, FILE *f)
 
static void define_dump_logs (bool gimple, FILE *f)
 
static void output_line_directive (FILE *f, location_t location, bool dumpfile=false, bool fnargs=false, bool indirect_line_numbers=false)
 
static FILEchoose_output (const vec< FILE * > &parts)
 
bool commutative_tree_code (enum tree_code code)
 
bool commutative_ternary_tree_code (enum tree_code code)
 
bool comparison_code_p (enum tree_code code)
 
static int commutative_op (id_base *id)
 
static predicate_idadd_predicate (const char *id)
 
static void add_operator (enum tree_code code, const char *id, const char *tcc, unsigned nargs)
 
template<typename T >
static void add_function (T code, const char *id)
 
static bool operator== (id_base &id, enum tree_code code)
 
id_baseget_operator (const char *id, bool allow_null=false)
 
id_baseswap_tree_comparison (operator_id *p)
 
DEBUG_FUNCTION void print_operand (operand *o, FILE *f=stderr, bool flattened=false)
 
DEBUG_FUNCTION void print_matches (class simplify *s, FILE *f=stderr)
 
static void cartesian_product (const vec< vec< operand * > > &ops_vector, vec< vec< operand * > > &result, vec< operand * > &v, unsigned n)
 
static vec< operand * > commutate (operand *op, vec< vec< user_id * > > &for_vec)
 
static void lower_commutative (simplify *s, vec< simplify * > &simplifiers)
 
operandlower_opt (operand *o, unsigned char grp, bool strip)
 
static bool has_opt (operand *o, unsigned char grp)
 
static vec< operand * > lower_opt (operand *o)
 
static void lower_opt (simplify *s, vec< simplify * > &simplifiers)
 
static vec< operand * > lower_cond (operand *o)
 
static void lower_cond (simplify *s, vec< simplify * > &simplifiers)
 
bool contains_id (operand *o, user_id *id)
 
operandreplace_id (operand *o, user_id *id, id_base *with)
 
static bool binary_ok (operator_id *op)
 
static void lower_for (simplify *sin, vec< simplify * > &simplifiers)
 
static void lower (vec< simplify * > &simplifiers, bool gimple)
 
bool cmp_operand (operand *o1, operand *o2)
 
bool is_conversion (id_base *op)
 
static const charget_operand_type (id_base *op, unsigned pos, const char *in_type, const char *expr_type, const char *other_oprnd_type)
 
static int fns_cmp (const void *p1, const void *p2)
 
static void emit_logging_call (FILE *f, int indent, class simplify *s, operand *result, bool gimple)
 
static bool compare_op (operand *o1, simplify *s1, operand *o2, simplify *s2)
 
void write_predicate (FILE *f, predicate_id *p, decision_tree &dt, bool gimple)
 
static void write_header (FILE *f, const char *head)
 
static void walk_captures (operand *op, vec< vec< capture * > > &cpts)
 
static size_t round_alloc_size (size_t s)
 
static void usage ()
 
static void write_header_includes (bool gimple, FILE *header_file)
 
int main (int argc, char **argv)
 

Variables

unsigned verbose
 
static class line_mapsline_table
 
static FILEheader_file
 
static vec< int > dbg_line_numbers
 
static id_basenull_id
 
static hash_table< id_base > * operators
 
static unsigned current_id
 
static charfail_label
 

Macro Definition Documentation

◆ DEF_BUILTIN [1/3]

#define DEF_BUILTIN ( ENUM,
N,
C,
T,
LT,
B,
F,
NA,
AT,
IM,
COND )   ENUM,

◆ DEF_BUILTIN [2/3]

#define DEF_BUILTIN ( ENUM,
N,
C,
T,
LT,
B,
F,
NA,
AT,
IM,
COND )    CFN_##ENUM = int (ENUM),

◆ DEF_BUILTIN [3/3]

#define DEF_BUILTIN ( ENUM,
N,
C,
T,
LT,
B,
F,
NA,
AT,
IM,
COND )    add_function (ENUM, "CFN_" # ENUM);

◆ DEF_INTERNAL_FN [1/3]

#define DEF_INTERNAL_FN ( CODE,
FLAGS,
FNSPEC )   IFN_##CODE,

◆ DEF_INTERNAL_FN [2/3]

#define DEF_INTERNAL_FN ( CODE,
FLAGS,
FNSPEC )    CFN_##CODE = int (END_BUILTINS) + int (IFN_##CODE),

◆ DEF_INTERNAL_FN [3/3]

#define DEF_INTERNAL_FN ( CODE,
NAME,
FNSPEC )    add_function (IFN_##CODE, "CFN_" #CODE);

◆ DEFTREECODE [1/2]

#define DEFTREECODE ( SYM,
STRING,
TYPE,
NARGS )   SYM,
Pull in tree codes and builtin function codes from their
definition files.   

◆ DEFTREECODE [2/2]

#define DEFTREECODE ( SYM,
STRING,
TYPE,
NARGS )    add_operator (SYM, # SYM, # TYPE, NARGS);
Pull in tree codes and builtin function codes from their
definition files.   

◆ END_OF_BASE_TREE_CODES

#define END_OF_BASE_TREE_CODES

◆ SIZED_BASED_CHUNKS

#define SIZED_BASED_CHUNKS   1
Find the file to write into next.  We try to evenly distribute the contents
over the different files.   

Typedef Documentation

◆ cid_map_t

◆ sinfo_map_t

Enumeration Type Documentation

◆ built_in_function

Enumerator
END_BUILTINS 

◆ combined_fn

Enumerator
CFN_LAST 

◆ internal_fn

Enumerator
IFN_LAST 

◆ tree_code

Enumerator
MAX_TREE_CODES 

Function Documentation

◆ add_function()

template<typename T >
static void add_function ( T code,
const char * id )
static
Add a built-in or internal function identifier to the hash.  ID is
the name of its CFN_* enumeration value.   

References fatal(), ggc_alloc(), id_base::hashval, and operators.

◆ add_operator()

static void add_operator ( enum tree_code code,
const char * id,
const char * tcc,
unsigned nargs )
static
Add a tree code identifier to the hash.   

References fatal(), ggc_alloc(), id_base::hashval, and operators.

◆ add_predicate()

static predicate_id * add_predicate ( const char * id)
static
Add a predicate identifier to the hash.   

References fatal(), ggc_alloc(), id_base::hashval, and operators.

Referenced by parser::parse_pattern(), and parser::parse_predicates().

◆ binary_ok()

static bool binary_ok ( operator_id * op)
static
Return true if the binary operator OP is ok for delayed substitution
during for lowering.   

References operator_id::code, and ggc_alloc().

Referenced by lower_for().

◆ cartesian_product()

static void cartesian_product ( const vec< vec< operand * > > & ops_vector,
vec< vec< operand * > > & result,
vec< operand * > & v,
unsigned n )
static
AST lowering.   
Lowering of commutative operators.   

References cartesian_product(), ggc_alloc(), and i.

Referenced by cartesian_product(), commutate(), and lower_cond().

◆ choose_output()

static FILE * choose_output ( const vec< FILE * > & parts)
static

References ggc_alloc(), and NULL.

Referenced by decision_tree::gen(), and main().

◆ cmp_operand()

bool cmp_operand ( operand * o1,
operand * o2 )
Compare two AST operands O1 and O2 and return true if they are equal.   

References id_base::FN, ggc_alloc(), expr::is_generic, id_base::kind, operand::OP_EXPR, operand::OP_PREDICATE, expr::operation, and expr::ops.

Referenced by decision_tree::cmp_node().

◆ commutate()

static vec< operand * > commutate ( operand * op,
vec< vec< user_id * > > & for_vec )
static

◆ commutative_op()

static int commutative_op ( id_base * id)
static
If ID has a pair of consecutive, commutative operands, return the
index of the first, otherwise return -1.   

References commutative_op(), commutative_ternary_tree_code(), commutative_tree_code(), ggc_alloc(), and i.

Referenced by commutate(), commutative_op(), dt_operand::gen_gimple_expr(), parser::parse_expr(), and vect_get_and_check_slp_defs().

◆ commutative_ternary_tree_code()

bool commutative_ternary_tree_code ( enum tree_code code)
Return true if CODE represents a ternary tree code for which the
first two operands are commutative.  Otherwise return false.   

References ggc_alloc().

Referenced by inchash::add_hashable_expr(), commutative_op(), commutative_ternary_op_p(), first_commutative_argument(), fold_stmt_1(), fold_ternary_loc(), gimple_simplify(), hashable_expr_equal_p(), and vn_nary_op_compute_hash().

◆ commutative_tree_code()

◆ compare_op()

static bool compare_op ( operand * o1,
simplify * s1,
operand * o2,
simplify * s2 )
static
Compare function for finding equivalent transforms.   

References compare_op(), ggc_alloc(), i, operand::OP_IF, and operand::OP_WITH.

Referenced by compare_op(), and sinfo_hashmap_traits::equal_keys().

◆ comparison_code_p()

bool comparison_code_p ( enum tree_code code)
Return true if CODE is a comparison.   

References ggc_alloc().

Referenced by commutate(), and parser::parse_expr().

◆ contains_id()

bool contains_id ( operand * o,
user_id * id )
Return true if O refers to ID.   

References contains_id(), ggc_alloc(), and i.

Referenced by contains_id(), and lower_for().

◆ define_dump_logs()

static void define_dump_logs ( bool gimple,
FILE * f )
static

References dbg_line_numbers, fprintf_indent(), ggc_alloc(), and i.

Referenced by main().

◆ diagnostic_cb()

static bool diagnostic_cb ( cpp_reader * ,
enum cpp_diagnostic_level errtype,
enum cpp_warning_reason,
rich_location * richloc,
const char * msg,
va_list * ap )
static

◆ emit_logging_call()

static void emit_logging_call ( FILE * f,
int indent,
class simplify * s,
operand * result,
bool gimple )
static
Emit a logging call to the debug file to the file F, with the INDENT from
either the RESULT location or the S's match location if RESULT is null.  

References fprintf_indent(), ggc_alloc(), simplify::kind, operand::location, simplify::match, output_line_directive(), and simplify::SIMPLIFY.

Referenced by dt_simplify::gen_1().

◆ fatal_at() [1/2]

◆ fatal_at() [2/2]

static void fatal_at ( location_t loc,
const char * msg,
... )
static

◆ fns_cmp()

static int fns_cmp ( const void * p1,
const void * p2 )
static
Compare 2 fns or generic_fns vector entries for vector sorting.
Same operation entries with different number of arguments should
be adjacent.   

References ggc_alloc(), dt_operand::op, and expr::operation.

Referenced by dt_node::gen_kids().

◆ fp_decl()

static void fp_decl ( FILE * f,
const char * format,
... )
static
Start or continue emitting a declaration in fprintf-like manner,
printing both to F and global header_file, if non-null.   

References ap, ggc_alloc(), header_file, and vfprintf().

Referenced by decision_tree::gen(), and write_predicate().

◆ fp_decl_done()

static void fp_decl_done ( FILE * f,
const char * trailer )
static
Finish a declaration being emitted by fp_decl.   

References ggc_alloc(), and header_file.

Referenced by decision_tree::gen(), and write_predicate().

◆ fprintf_indent()

◆ get_operand_type()

static const char * get_operand_type ( id_base * op,
unsigned pos,
const char * in_type,
const char * expr_type,
const char * other_oprnd_type )
static
Get the type to be used for generating operand POS of OP from the
various sources.   

References ggc_alloc(), id_base::id, is_conversion(), NULL, and startswith().

Referenced by dt_simplify::gen_1(), and expr::gen_transform().

◆ get_operator()

◆ ggc_free()

void ggc_free ( void * )
Free a block.  To be used when known for certain it's not reachable.   

Referenced by add_var_loc_to_decl(), adjust_agg_replacement_values(), modref_base_node< T >::collapse(), modref_tree< T >::collapse(), ctfc_delete_container(), ctfc_delete_strtab(), hash_table< Descriptor, Lazy, Allocator >::empty_slow(), hash_table< Descriptor, Lazy, Allocator >::expand(), fini_ssa_operands(), flow_loop_free(), vrange_ggc_alloc::free(), free_block(), free_cfg(), symbol_table::free_edge(), free_edge(), free_loc_descr(), free_node(), free_numbers_of_iterations_estimates(), free_param_decl_accesses(), free_simple_loop_desc(), general_init(), ggc_realloc(), gimple_seq_discard(), gimplify_assign(), gimplify_decl_expr(), gimplify_init_ctor_eval(), gimplify_target_expr(), init_expmed(), init_tree_optimization_optabs(), internal_get_tmp_var(), ipcp_free_transformation_sum(), loc_list_from_tree_1(), loop_optimizer_finalize(), lto_delete_in_decl_state(), lto_free_function_in_decl_state(), cgraph_edge::make_direct(), move_sese_region_to_fn(), native_encode_initializer(), phi_dynamic_object_size(), range_info_free(), release_function_body(), release_phi_node(), release_section_hash_entry(), symbol_table::release_symbol(), loop_exit_hasher::remove(), odr_name_hasher::remove(), varpool_node::remove(), ipcp_transformation::remove_argaggs_if(), ipa_vr::set_unknown(), jump_threader::simplify_control_stmt_condition(), ipa_vr::streamer_read(), tree_add_const_value_attribute(), type_hash_canon(), wide_int_to_tree_1(), hash_table< Descriptor, Lazy, Allocator >::~hash_table(), and jump_threader::~jump_threader().

◆ ggc_internal_cleared_alloc()

void * ggc_internal_cleared_alloc ( size_t ,
void(*)(void *) ,
size_t ,
size_t MEM_STAT_DECL )
Generate pattern matching and transform code shared between
   GENERIC and GIMPLE folding code from match-and-simplify description.

   Copyright (C) 2014-2024 Free Software Foundation, Inc.
   Contributed by Richard Biener <rguenther@suse.de>
   and Prathamesh Kulkarni  <bilbotheelffriend@gmail.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/>.   
Stubs for GGC referenced through instantiations triggered by hash-map.   

References NULL.

Referenced by symtab_node::get_dump_name(), and simd_clone_struct_alloc().

◆ has_opt()

static bool has_opt ( operand * o,
unsigned char grp )
static
Determine whether O or its children uses the conditional operation 
group GRP.   

References ggc_alloc(), has_opt(), i, expr::ops, and expr::opt_grp.

Referenced by has_opt(), and lower_opt().

◆ is_conversion()

bool is_conversion ( id_base * op)
Code generation off the decision tree and the refered AST nodes.   

References ggc_alloc().

Referenced by expr::gen_transform(), and get_operand_type().

◆ linemap_client_expand_location_to_spelling_point()

expanded_location linemap_client_expand_location_to_spelling_point ( const line_maps * set,
location_t loc,
enum location_aspect  )
The rich_location class within libcpp requires a way to expand
location_t instances, and relies on the client code
providing a symbol named
  linemap_client_expand_location_to_spelling_point
to do this.

This is the implementation for genmatch.   

References ggc_alloc(), and map.

◆ lower()

static void lower ( vec< simplify * > & simplifiers,
bool gimple )
static

◆ lower_commutative()

static void lower_commutative ( simplify * s,
vec< simplify * > & simplifiers )
static
Lower operations marked as commutative in the AST of S and push
the resulting patterns to SIMPLIFIERS.   

References simplify::capture_ids, commutate(), simplify::for_vec, i, simplify::id, simplify::kind, simplify::match, and simplify::result.

Referenced by lower().

◆ lower_cond() [1/2]

static vec< operand * > lower_cond ( operand * o)
static
Lower the compare operand of COND_EXPRs to a
GENERIC and a GIMPLE variant.   

References cartesian_product(), expr, ggc_alloc(), i, lower_cond(), expr::operation, expr::ops, and vNULL.

Referenced by lower(), lower_cond(), and lower_cond().

◆ lower_cond() [2/2]

static void lower_cond ( simplify * s,
vec< simplify * > & simplifiers )
static
Lower the compare operand of COND_EXPRs to a
GENERIC and a GIMPLE variant.   

References simplify::capture_ids, simplify::for_subst_vec, simplify::for_vec, i, simplify::id, simplify::kind, lower_cond(), simplify::match, and simplify::result.

◆ lower_for()

◆ lower_opt() [1/3]

static vec< operand * > lower_opt ( operand * o)
static
Lower conditional convert operators in O, expanding it to a vector
if required.   

References ggc_alloc(), has_opt(), i, lower_opt(), and vNULL.

◆ lower_opt() [2/3]

operand * lower_opt ( operand * o,
unsigned char grp,
bool strip )
Strip conditional operations using group GRP from O and its
children if STRIP, else replace them with an unconditional operation.   

References expr, ggc_alloc(), i, lower_opt(), expr::ops, and expr::opt_grp.

Referenced by lower(), lower_opt(), lower_opt(), and lower_opt().

◆ lower_opt() [3/3]

static void lower_opt ( simplify * s,
vec< simplify * > & simplifiers )
static
Lower conditional convert operators in the AST of S and push
the resulting multiple patterns to SIMPLIFIERS.   

References simplify::capture_ids, simplify::for_vec, i, simplify::id, simplify::kind, lower_opt(), simplify::match, and simplify::result.

◆ main()

◆ operator==()

static bool operator== ( id_base & id,
enum tree_code code )
static
Helper for easy comparing ID with tree code CODE.   

References ggc_alloc().

◆ output_line_directive()

static void output_line_directive ( FILE * f,
location_t location,
bool dumpfile = false,
bool fnargs = false,
bool indirect_line_numbers = false )
static

◆ print_matches()

DEBUG_FUNCTION void print_matches ( class simplify * s,
FILE * f = stderr )

References ggc_alloc(), simplify::match, and print_operand().

Referenced by main().

◆ print_operand()

DEBUG_FUNCTION void print_operand ( operand * o,
FILE * f = stderr,
bool flattened = false )
Debugging routines for dumping the AST.   

References gcc_unreachable, ggc_alloc(), i, and print_operand().

Referenced by dt_node::append_simplify(), print_matches(), decision_tree::print_node(), and print_operand().

◆ replace_id()

operand * replace_id ( operand * o,
user_id * id,
id_base * with )
In AST operand O replace operator ID with operator WITH.   

References c_expr::c_expr(), expr, ggc_alloc(), i, id_base::id, c_expr::ids, and replace_id().

Referenced by lower_for(), and replace_id().

◆ round_alloc_size()

static size_t round_alloc_size ( size_t s)
static
Helper for the linemap code.   

Referenced by main().

◆ swap_tree_comparison()

id_base * swap_tree_comparison ( operator_id * p)
Return the comparison operators that results if the operands are
swapped.  This is safe for floating-point.   

References operator_id::code, gcc_unreachable, get_operator(), and ggc_alloc().

Referenced by commutate().

◆ usage()

static void usage ( void )
static
Construct and display the help menu.   

References ggc_alloc(), progname, and usage().

Referenced by main(), and usage().

◆ walk_captures()

static void walk_captures ( operand * op,
vec< vec< capture * > > & cpts )
static
Helper for finish_match_operand, collecting captures of OP in CPTS
recursively.   

References ggc_alloc(), i, and walk_captures().

Referenced by parser::finish_match_operand(), and walk_captures().

◆ warning_at() [1/2]

◆ warning_at() [2/2]

static void warning_at ( location_t loc,
const char * msg,
... )
static

◆ write_header()

static void write_header ( FILE * f,
const char * head )
static
Write the common header for the GIMPLE/GENERIC IL matching routines.   

References ggc_alloc().

◆ write_header_declarations()

static void write_header_declarations ( bool gimple,
FILE * f )
static

References ggc_alloc().

Referenced by main().

◆ write_header_includes()

static void write_header_includes ( bool gimple,
FILE * header_file )
static
Write out the correct include to the match-head fle containing the helper
files.   

References ggc_alloc(), and header_file.

Referenced by main().

◆ write_predicate()

void write_predicate ( FILE * f,
predicate_id * p,
decision_tree & dt,
bool gimple )
Output code to implement the predicate P from the decision tree DT.   

References fp_decl(), fp_decl_done(), fprintf_indent(), dt_node::gen_kids(), ggc_alloc(), id_base::id, id_base::nargs, and decision_tree::root.

Referenced by main().

Variable Documentation

◆ current_id

unsigned current_id
static
Current simplifier ID we are processing during insertion into the
decision tree.   

Referenced by decision_tree::find_node(), and decision_tree::insert().

◆ dbg_line_numbers

vec<int> dbg_line_numbers
static
Line numbers for use by indirect line directives.   

Referenced by define_dump_logs(), and output_line_directive().

◆ fail_label

char* fail_label
static
The current label failing the current matched pattern during
code generation.   

Referenced by compare_by_pieces(), compare_by_pieces_d::compare_by_pieces_d(), dt_simplify::gen_1(), expr::gen_transform(), and match_rtx().

◆ header_file

FILE* header_file
static
Secondary stream for fp_decl.   

Referenced by fp_decl(), fp_decl_done(), main(), and write_header_includes().

◆ line_table

◆ null_id

id_base* null_id
static
The special id "null", which matches nothing.   

Referenced by get_operator(), lower_for(), and main().

◆ operators

hash_table<id_base>* operators
static
Hashtable of known pattern operators.  This is pre-seeded from
all known tree codes and all known builtin function ids.   

Referenced by add_function(), add_operator(), add_predicate(), get_operator(), main(), parser::parse_for(), and parser::parse_operator_list().

◆ verbose

unsigned verbose
Global state.   
Verboseness.  0 is quiet, 1 adds some warnings, 2 is for debugging.   

Referenced by dt_node::append_simplify(), decision_tree::find_node(), decision_tree::gen(), dt_simplify::gen_1(), main(), output_line_directive(), capture_info::walk_c_expr(), and capture_info::walk_match().