GCC Middle and Back End API Reference
gen_reader Class Reference
Inheritance diagram for gen_reader:
Collaboration diagram for gen_reader:

Public Member Functions

 gen_reader ()
void handle_unknown_directive (file_location, const char *) final override
bool read_rtx (const char *rtx_name, vec< rtx > *rtxen)
rtx rtx_alloc_for_name (const char *)
rtx read_rtx_code (const char *code_name)
virtual rtx read_rtx_operand (rtx return_rtx, int idx)
rtx read_nested_rtx ()
rtx read_rtx_variadic (rtx form)
charread_until (const char *terminator_chars, bool consume_terminator)
virtual void handle_any_trailing_information (rtx)
virtual rtx postprocess (rtx x)
virtual const charfinalize_string (char *stringbuf)
bool read_md_files (int, const char **, bool(*)(const char *))
bool read_file (const char *filename)
bool read_file_fragment (const char *filename, int first_line, int last_line)
file_location get_current_location () const
bool is_compact () const
int read_char (void)
void unread_char (int ch)
file_location read_name (struct md_name *name)
file_location read_name_or_nil (struct md_name *)
void read_escape ()
charread_quoted_string ()
charread_braced_string ()
charread_string (int star_if_braced)
void read_skip_construct (int depth, file_location loc)
void require_char (char expected)
void require_char_ws (char expected)
void require_word_ws (const char *expected)
int peek_char (void)
void set_md_ptr_loc (const void *ptr, file_location)
const struct ptr_locget_md_ptr_loc (const void *ptr)
void copy_md_ptr_loc (const void *new_ptr, const void *old_ptr)
void fprint_md_ptr_loc (FILE *outf, const void *ptr)
void print_md_ptr_loc (const void *ptr, FILE *=stdout)
struct enum_typelookup_enum_type (const char *name)
void traverse_enum_types (htab_trav callback, void *info)
void handle_constants ()
void traverse_md_constants (htab_trav callback, void *info)
void handle_enum (file_location loc, bool md_p)
const charjoin_c_conditions (const char *cond1, const char *cond2)
void fprint_c_condition (FILE *outf, const char *cond)
void print_c_condition (const char *cond)
const charapply_iterator_to_string (const char *string)
rtx copy_rtx_for_iterators (rtx original)
void read_conditions ()
void record_potential_iterator_use (struct iterator_group *group, file_location loc, rtx x, unsigned int index, const char *name)
struct mappingread_mapping (struct iterator_group *group, htab_t table)
overloaded_namehandle_overloaded_name (rtx, vec< mapping * > *)
const charget_top_level_filename () const
const charget_filename () const
int get_lineno () const
int get_colno () const
struct obstackget_string_obstack ()
htab_t get_md_constants ()
overloaded_nameget_overloads () const

Protected Attributes

bool m_in_call_function_usage
auto_vec< rtxm_reuse_rtx_by_id

Private Member Functions

void handle_file ()
void handle_toplevel_file ()
void handle_include (file_location loc)
void add_include_path (const char *arg)
bool read_name_1 (struct md_name *name, file_location *out_loc)

Private Attributes

bool m_compact
const charm_toplevel_fname
const charm_read_md_filename
int m_read_md_lineno
int m_read_md_colno
int m_last_line_colno
file_name_list ** m_last_dir_md_include_ptr
struct obstack m_string_obstack
htab_t m_ptr_locs
struct obstack m_ptr_loc_obstack
htab_t m_joined_conditions
struct obstack m_joined_conditions_obstack
htab_t m_md_constants
htab_t m_enum_types
int m_first_line
int m_last_line
overloaded_name ** m_next_overload_ptr
htab_t m_overloads_htab

Detailed Description

A subclass of rtx_reader which reads .md files and calls process_rtx on
the top-level elements.   

Constructor & Destructor Documentation

◆ gen_reader()

gen_reader::gen_reader ( )

Member Function Documentation

◆ add_include_path()

void md_reader::add_include_path ( const char * arg)
Parse a -I option with argument ARG.   

References ggc_alloc(), and md_reader::m_last_dir_md_include_ptr.

◆ apply_iterator_to_string()

const char * md_reader::apply_iterator_to_string ( const char * string)
Apply the current iterator values to STRING.  Return the new string
if any changes were needed, otherwise return STRING itself.   

References md_reader::copy_md_ptr_loc(), end(), md_reader::get_md_ptr_loc(), ggc_alloc(), md_reader::ptr_loc::loc, md_reader::m_string_obstack, map_attr_string(), and map_value::string.

Referenced by md_reader::copy_rtx_for_iterators().

◆ copy_md_ptr_loc()

void md_reader::copy_md_ptr_loc ( const void * new_ptr,
const void * old_ptr )

◆ copy_rtx_for_iterators()

rtx md_reader::copy_rtx_for_iterators ( rtx original)
Return a deep copy of X, substituting the current iterator
values into any strings.   

References md_reader::apply_iterator_to_string(), md_reader::copy_rtx_for_iterators(), GET_CODE, GET_RTX_FORMAT, ggc_alloc(), i, rtvec_alloc(), rtx_alloc(), RTX_CODE_SIZE, XEXP, XSTR, XTMPL, XVEC, XVECEXP, and XVECLEN.

Referenced by md_reader::copy_rtx_for_iterators().

◆ finalize_string()

virtual const char * rtx_reader::finalize_string ( char * stringbuf)

Reimplemented in function_reader.

References ggc_alloc().

Referenced by rtx_reader::read_rtx_operand().

◆ fprint_c_condition()

void md_reader::fprint_c_condition ( FILE * outf,
const char * cond )
Print condition COND to OUTF, wrapped in brackets.  If COND was created
by join_c_conditions, recursively invoke this function for the original
conditions and join the result with "&&".  Otherwise print a #line
directive for COND if its original file position is known.   

References md_reader::fprint_c_condition(), md_reader::fprint_md_ptr_loc(), fputc(), ggc_alloc(), and md_reader::m_joined_conditions.

Referenced by md_reader::fprint_c_condition(), md_reader::print_c_condition(), write_attr_value(), and write_test_expr().

◆ fprint_md_ptr_loc()

void md_reader::fprint_md_ptr_loc ( FILE * outf,
const void * ptr )
If PTR is associated with a known file position, print a #line
directive for it to OUTF.   

References file_location::filename, md_reader::get_md_ptr_loc(), ggc_alloc(), file_location::lineno, and md_reader::ptr_loc::loc.

Referenced by md_reader::fprint_c_condition(), and md_reader::print_md_ptr_loc().

◆ get_colno()

int md_reader::get_colno ( ) const

◆ get_current_location()

◆ get_filename()

const char * md_reader::get_filename ( ) const

◆ get_lineno()

int md_reader::get_lineno ( ) const

◆ get_md_constants()

htab_t md_reader::get_md_constants ( )

◆ get_md_ptr_loc()

const md_reader::ptr_loc * md_reader::get_md_ptr_loc ( const void * ptr)
Return the position associated with pointer PTR.  Return null if no
position was set.   

References ggc_alloc(), and md_reader::m_ptr_locs.

Referenced by md_reader::apply_iterator_to_string(), md_reader::copy_md_ptr_loc(), and md_reader::fprint_md_ptr_loc().

◆ get_overloads()

overloaded_name * md_reader::get_overloads ( ) const

References md_reader::m_first_overload.

Referenced by main().

◆ get_string_obstack()

◆ get_top_level_filename()

const char * md_reader::get_top_level_filename ( ) const

◆ handle_any_trailing_information()

virtual void rtx_reader::handle_any_trailing_information ( rtx )

Reimplemented in function_reader.

Referenced by rtx_reader::read_rtx_code().

◆ handle_constants()

void md_reader::handle_constants ( )
Process a define_constants directive, starting with the optional space
after the "define_constants".   

References add_constant(), defs, fatal_expected_char(), ggc_alloc(), md_reader::m_md_constants, md_reader::read_name(), read_skip_spaces(), md_reader::require_char_ws(), and md_name::string.

Referenced by md_reader::handle_file().

◆ handle_enum()

void md_reader::handle_enum ( file_location loc,
bool md_p )
Process a define_enum or define_c_enum directive, starting with
the optional space after the "define_enum".  LINENO is the line
number on which the directive started and MD_P is true if the
directive is a define_enum rather than a define_c_enum.   

References add_constant(), error_at(), md_reader::get_md_constants(), ggc_alloc(), md_reader::m_enum_types, md_decimal_string(), NULL, md_reader::read_name(), read_skip_spaces(), md_reader::read_string(), md_reader::require_char_ws(), md_name::string, md_reader::unread_char(), and upcase_string().

Referenced by md_reader::handle_file().

◆ handle_file()

◆ handle_include()

void md_reader::handle_include ( file_location loc)
Process an "include" directive, starting with the optional space
after the "include".  Read in the file and use HANDLE_DIRECTIVE
to process each unknown directive.  LINENO is the line number on
which the "include" occurred.   

References DIR_SEPARATOR, error_at(), fopen, free(), ggc_alloc(), md_reader::handle_file(), include_callback, md_reader::m_base_dir, md_reader::m_first_dir_md_include, md_reader::m_read_md_colno, md_reader::m_read_md_file, md_reader::m_read_md_filename, md_reader::m_read_md_lineno, NULL, and md_reader::read_string().

Referenced by md_reader::handle_file().

◆ handle_overloaded_name()

overloaded_name * md_reader::handle_overloaded_name ( rtx ,
vec< mapping * > *  )

◆ handle_toplevel_file()

void md_reader::handle_toplevel_file ( )
Like handle_file, but for top-level files.  Set up m_toplevel_fname
and m_base_dir accordingly.   

References ggc_alloc(), md_reader::handle_file(), md_reader::m_base_dir, md_reader::m_read_md_filename, md_reader::m_toplevel_fname, and NULL.

Referenced by md_reader::read_file(), and md_reader::read_file_fragment().

◆ handle_unknown_directive()

void gen_reader::handle_unknown_directive ( file_location loc,
const char * rtx_name )

◆ is_compact()

◆ join_c_conditions()

const char * md_reader::join_c_conditions ( const char * cond1,
const char * cond2 )
Return a condition that satisfies both COND1 and COND2.  Either string
may be null or empty.   

References ggc_alloc(), md_reader::m_joined_conditions, md_reader::m_joined_conditions_obstack, and NULL.

Referenced by alter_test_for_insn(), process_rtx(), and process_substs_on_one_elem().

◆ lookup_enum_type()

struct enum_type * md_reader::lookup_enum_type ( const char * name)
Try to find the definition of the given enum.  Return null on failure.   

References ggc_alloc(), and md_reader::m_enum_types.

Referenced by gen_attr().

◆ peek_char()

int md_reader::peek_char ( void )
Peek at the next character from the file without consuming it.   

References md_reader::read_char(), and md_reader::unread_char().

Referenced by function_reader::handle_any_trailing_information(), and rtx_reader::read_nested_rtx().

◆ postprocess()

virtual rtx rtx_reader::postprocess ( rtx x)

Reimplemented in function_reader.

Referenced by rtx_reader::read_nested_rtx().

◆ print_c_condition()

void md_reader::print_c_condition ( const char * cond)
Special fprint_c_condition for writing to STDOUT.   

References md_reader::fprint_c_condition(), and ggc_alloc().

Referenced by def_target_insn(), print_test(), write_init_reg_class_start_regs(), write_one_condition(), and write_predicate_expr().

◆ print_md_ptr_loc()

void md_reader::print_md_ptr_loc ( const void * ptr,
FILE * file = stdout )
Special fprint_md_ptr_loc for writing to STDOUT.   

References md_reader::fprint_md_ptr_loc().

Referenced by emit_c_code(), process_template(), write_one_condition(), and write_predicate_subfunction().

◆ read_braced_string()

char * md_reader::read_braced_string ( )
Read a braced string (a la Tcl) onto the string obstack.  Caller
has scanned the leading brace.  Note that unlike quoted strings,
the outermost braces _are_ included in the string constant.   

References fatal_with_file_and_line(), md_reader::get_lineno(), ggc_alloc(), md_reader::m_string_obstack, md_reader::read_char(), and md_reader::read_escape().

Referenced by md_reader::read_string().

◆ read_char()

◆ read_conditions()

void md_reader::read_conditions ( )

◆ read_escape()

void md_reader::read_escape ( )
Subroutine of the string readers.  Handles backslash escapes.
Caller has read the backslash, but not placed it into the obstack.   

References md_reader::get_filename(), md_reader::get_lineno(), ggc_alloc(), md_reader::m_string_obstack, and md_reader::read_char().

Referenced by md_reader::read_braced_string(), and md_reader::read_quoted_string().

◆ read_file()

bool md_reader::read_file ( const char * filename)

◆ read_file_fragment()

bool md_reader::read_file_fragment ( const char * filename,
int first_line,
int last_line )

◆ read_mapping()

struct mapping * md_reader::read_mapping ( struct iterator_group * group,
htab_t table )

◆ read_md_files()

bool md_reader::read_md_files ( int ,
const char ** ,
bool(*)(const char *)  )

◆ read_name()

◆ read_name_1()

bool md_reader::read_name_1 ( struct md_name * name,
file_location * out_loc )
Read an rtx code name into NAME.  It is terminated by any of the
punctuation chars of rtx printed syntax.   

References md_name::buffer, fatal_with_file_and_line(), md_reader::get_current_location(), ggc_alloc(), i, md_reader::m_md_constants, md_reader::read_char(), read_skip_spaces(), md_name::string, and md_reader::unread_char().

Referenced by md_reader::read_name(), and md_reader::read_name_or_nil().

◆ read_name_or_nil()

◆ read_nested_rtx()

rtx rtx_reader::read_nested_rtx ( )

◆ read_quoted_string()

char * md_reader::read_quoted_string ( )

◆ read_rtx()

bool rtx_reader::read_rtx ( const char * rtx_name,
vec< rtx > * rtxen )

◆ read_rtx_code()

◆ read_rtx_operand()

rtx rtx_reader::read_rtx_operand ( rtx return_rtx,
int idx )

◆ read_rtx_variadic()

rtx rtx_reader::read_rtx_variadic ( rtx form)
Mutually recursive subroutine of read_rtx which reads
(thing x1 x2 x3 ...) and produces RTL as if
(thing x1 (thing x2 (thing x3 ...)))  had been written.
When called, FORM is (thing x1 x2), and the file position
is just past the leading parenthesis of x3.  Only works
for THINGs which are dyadic expressions, e.g. AND, IOR.   

References GET_CODE, GET_MODE, PUT_MODE(), rtx_reader::read_nested_rtx(), read_skip_spaces(), rtx_alloc(), md_reader::unread_char(), and XEXP.

Referenced by rtx_reader::read_rtx_code().

◆ read_skip_construct()

void md_reader::read_skip_construct ( int depth,
file_location loc )
Skip the rest of a construct that started at line LINENO and that
is currently nested by DEPTH levels of parentheses.   

References error_at(), ggc_alloc(), md_reader::read_name(), read_skip_spaces(), md_reader::read_string(), and md_reader::unread_char().

Referenced by noop_reader::handle_unknown_directive(), and md_reader::read_name_or_nil().

◆ read_string()

char * md_reader::read_string ( int star_if_braced)

◆ read_until()

char * rtx_reader::read_until ( const char * terminator_chars,
bool consume_terminator )
Consume characters until encountering a character in TERMINATOR_CHARS,
consuming the terminator character if CONSUME_TERMINATOR is true.
Return all characters before the terminator as an allocated buffer.   

References ggc_alloc(), md_reader::read_char(), read_skip_spaces(), and md_reader::unread_char().

Referenced by function_reader::handle_any_trailing_information(), and function_reader::read_rtx_operand_r().

◆ record_potential_iterator_use()

void md_reader::record_potential_iterator_use ( struct iterator_group * group,
file_location loc,
rtx x,
unsigned int index,
const char * name )
Interpret NAME as either a built-in value, iterator or attribute
for group GROUP.  X and INDEX are the values to pass to GROUP's
apply_iterator callback.  LOC is the location of the use.   

References iterator_group::apply_iterator, iterator_group::find_builtin, ggc_alloc(), iterator_group::iterators, md_reader::m_string_obstack, record_attribute_use(), and record_iterator_use().

Referenced by rtx_reader::read_rtx_code(), and rtx_reader::read_rtx_operand().

◆ require_char()

◆ require_char_ws()

◆ require_word_ws()

void md_reader::require_word_ws ( const char * expected)
Consume any whitespace, then consume the next word (as per read_name),
issuing a fatal error if it is not EXPECTED.   

References fatal_with_file_and_line(), ggc_alloc(), md_reader::read_name(), and md_name::string.

Referenced by function_reader::parse_crtl(), function_reader::parse_edge(), and function_reader::parse_param().

◆ rtx_alloc_for_name()

rtx rtx_reader::rtx_alloc_for_name ( const char * name)
Allocate an rtx for code NAME.  If NAME is a code iterator or code
attribute, record its use for later and use one of its possible
values as an interim rtx code.   

References fatal_with_file_and_line(), md_reader::get_current_location(), md_reader::get_string_obstack(), ggc_alloc(), map_value::number, obstack, record_attribute_use(), record_iterator_use(), rtx_alloc(), and mapping::values.

Referenced by rtx_reader::read_rtx_code().

◆ set_md_ptr_loc()

void md_reader::set_md_ptr_loc ( const void * ptr,
file_location file_loc )

◆ traverse_enum_types()

void md_reader::traverse_enum_types ( htab_trav callback,
void * info )
For every enum definition, call CALLBACK with two arguments:
a pointer to the constant definition and INFO.  Stop when CALLBACK
returns zero.   

References ggc_alloc(), and md_reader::m_enum_types.

◆ traverse_md_constants()

void md_reader::traverse_md_constants ( htab_trav callback,
void * info )
For every constant definition, call CALLBACK with two arguments:
a pointer a pointer to the constant definition and INFO.
Stop when CALLBACK returns zero.   

References md_reader::get_md_constants(), and ggc_alloc().

◆ unread_char()

Field Documentation

◆ m_base_dir

char* md_reader::m_base_dir

◆ m_compact

bool md_reader::m_compact

Referenced by md_reader::is_compact().

◆ m_enum_types

◆ m_first_dir_md_include

file_name_list* md_reader::m_first_dir_md_include

◆ m_first_line

int md_reader::m_first_line

◆ m_first_overload

overloaded_name* md_reader::m_first_overload

◆ m_in_call_function_usage

bool rtx_reader::m_in_call_function_usage

◆ m_joined_conditions

htab_t md_reader::m_joined_conditions

◆ m_joined_conditions_obstack

struct obstack md_reader::m_joined_conditions_obstack

◆ m_last_dir_md_include_ptr

file_name_list** md_reader::m_last_dir_md_include_ptr

◆ m_last_line

int md_reader::m_last_line

◆ m_last_line_colno

int md_reader::m_last_line_colno

◆ m_md_constants

◆ m_next_overload_ptr

overloaded_name** md_reader::m_next_overload_ptr

◆ m_overloads_htab

htab_t md_reader::m_overloads_htab

◆ m_ptr_loc_obstack

struct obstack md_reader::m_ptr_loc_obstack

◆ m_ptr_locs

◆ m_read_md_colno

◆ m_read_md_file

◆ m_read_md_filename

◆ m_read_md_lineno

◆ m_reuse_rtx_by_id

auto_vec<rtx> rtx_reader::m_reuse_rtx_by_id

◆ m_string_obstack

◆ m_toplevel_fname

const char* md_reader::m_toplevel_fname

The documentation for this class was generated from the following file: