GCC Middle and Back End API Reference
md_reader Class Referenceabstract

#include <read-md.h>

Inheritance diagram for md_reader:
Collaboration diagram for md_reader:

Data Structures

struct  file_name_list
 
struct  ptr_loc
 

Public Member Functions

 md_reader (bool compact)
 
virtual ~md_reader ()
 
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)
 
virtual void handle_unknown_directive (file_location, const char *)=0
 
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 ()
 
char * read_quoted_string ()
 
char * read_braced_string ()
 
char * read_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 char * join_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 char * apply_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 char * get_top_level_filename () const
 
const char * get_filename () const
 
int get_lineno () const
 
int get_colno () const
 
struct obstackget_string_obstack ()
 
htab_t get_md_constants ()
 
overloaded_nameget_overloads () const
 

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 char * m_toplevel_fname
 
char * m_base_dir
 
FILE * m_read_md_file
 
const char * m_read_md_filename
 
int m_read_md_lineno
 
int m_read_md_colno
 
int m_last_line_colno
 
file_name_listm_first_dir_md_include
 
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_namem_first_overload
 
overloaded_name ** m_next_overload_ptr
 
htab_t m_overloads_htab
 

Detailed Description

A class for reading .md files and RTL dump files.

Implemented in read-md.cc.

This class has responsibility for reading chars from input files, and
for certain common top-level directives including the "include"
directive.

It does not handle parsing the hierarchically-nested expressions of
rtl.def; for that see the rtx_reader subclass below (implemented in
read-rtl.cc).   

Constructor & Destructor Documentation

◆ md_reader()

◆ ~md_reader()

Member Function Documentation

◆ add_include_path()

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

References md_reader::file_name_list::fname, m_last_dir_md_include_ptr, and md_reader::file_name_list::next.

◆ 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 copy_md_ptr_loc(), end(), get_md_ptr_loc(), md_reader::ptr_loc::loc, m_string_obstack, map_attr_string(), and map_value::string.

Referenced by copy_rtx_for_iterators().

◆ copy_md_ptr_loc()

void md_reader::copy_md_ptr_loc ( const void * new_ptr,
const void * old_ptr )
Associate NEW_PTR with the same file position as OLD_PTR.   

References get_md_ptr_loc(), md_reader::ptr_loc::loc, and set_md_ptr_loc().

Referenced by apply_iterator_to_string(), attr_string(), process_rtx(), and rtx_reader::read_rtx_operand().

◆ 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 apply_iterator_to_string(), copy_rtx_for_iterators(), GET_CODE, GET_RTX_FORMAT, i, rtvec_alloc(), rtx_alloc(), RTX_CODE_SIZE, XEXP, XSTR, XTMPL, XVEC, XVECEXP, and XVECLEN.

Referenced by copy_rtx_for_iterators().

◆ 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 fprint_c_condition(), fprint_md_ptr_loc(), fputc(), and m_joined_conditions.

Referenced by fprint_c_condition(), 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, get_md_ptr_loc(), file_location::lineno, and md_reader::ptr_loc::loc.

Referenced by fprint_c_condition(), and print_md_ptr_loc().

◆ get_colno()

int md_reader::get_colno ( ) const
inline

References m_read_md_colno.

Referenced by fatal_with_file_and_line().

◆ get_current_location()

◆ get_filename()

const char * md_reader::get_filename ( ) const
inline

◆ get_lineno()

int md_reader::get_lineno ( ) const
inline

◆ get_md_constants()

htab_t md_reader::get_md_constants ( )
inline

◆ 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 m_ptr_locs.

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

◆ get_overloads()

overloaded_name * md_reader::get_overloads ( ) const
inline

References m_first_overload.

Referenced by main().

◆ get_string_obstack()

◆ get_top_level_filename()

const char * md_reader::get_top_level_filename ( ) const
inline

◆ 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(), m_md_constants, read_name(), read_skip_spaces(), require_char_ws(), and md_name::string.

Referenced by 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(), enum_value::def, error_at(), get_md_constants(), m_enum_types, md_decimal_string(), enum_value::name, enum_value::next, NULL, read_name(), read_skip_spaces(), read_string(), require_char_ws(), md_name::string, unread_char(), and upcase_string().

Referenced by handle_file().

◆ handle_file()

void md_reader::handle_file ( )
private
Process the current file, assuming that read_md_file and
read_md_filename are valid.  Use HANDLE_DIRECTIVE to handle
unknown directives.   

References fatal_expected_char(), get_current_location(), handle_constants(), handle_enum(), handle_include(), handle_unknown_directive(), m_read_md_colno, m_read_md_file, m_read_md_lineno, read_name(), read_skip_spaces(), and require_char_ws().

Referenced by handle_include(), and handle_toplevel_file().

◆ handle_include()

void md_reader::handle_include ( file_location loc)
private
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(), md_reader::file_name_list::fname, fopen, free(), handle_file(), include_callback, m_base_dir, m_first_dir_md_include, m_read_md_colno, m_read_md_file, m_read_md_filename, m_read_md_lineno, md_reader::file_name_list::next, NULL, and read_string().

Referenced by handle_file().

◆ handle_overloaded_name()

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

◆ handle_toplevel_file()

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

References handle_file(), m_base_dir, m_read_md_filename, m_toplevel_fname, and NULL.

Referenced by read_file(), and read_file_fragment().

◆ handle_unknown_directive()

virtual void md_reader::handle_unknown_directive ( file_location ,
const char *  )
pure virtual

Implemented in function_reader, gen_reader, and noop_reader.

Referenced by handle_file().

◆ 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 m_joined_conditions, 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 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 read_char(), and unread_char().

Referenced by function_reader::handle_any_trailing_information(), and 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 fprint_c_condition().

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 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(), get_lineno(), m_string_obstack, read_char(), and read_escape().

Referenced by 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 get_filename(), get_lineno(), m_string_obstack, and read_char().

Referenced by read_braced_string(), and 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 FILENAME, filtering to just the given lines.   

References fopen, handle_toplevel_file(), have_error, m_first_line, m_last_line, m_read_md_file, and m_read_md_filename.

Referenced by read_rtl_function_body_from_file_range().

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

Referenced by init_rtx_reader_args_cb(), and main().

◆ read_name()

◆ read_name_1()

bool md_reader::read_name_1 ( struct md_name * name,
file_location * out_loc )
private
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(), get_current_location(), i, m_md_constants, md_constant::name, read_char(), read_skip_spaces(), md_name::string, and unread_char().

Referenced by read_name(), and read_name_or_nil().

◆ read_name_or_nil()

◆ read_quoted_string()

char * md_reader::read_quoted_string ( )
Read a double-quoted string onto the obstack.  Caller has scanned
the leading quote.   

References m_string_obstack, read_char(), and read_escape().

Referenced by function_reader::maybe_read_location(), function_reader::parse_edge(), function_reader::parse_param(), and read_string().

◆ 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(), read_name(), read_skip_spaces(), read_string(), and unread_char().

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

◆ read_string()

char * md_reader::read_string ( int star_if_braced)
Read some kind of string constant.  This is the high-level routine
used by read_rtx.  It handles surrounding parentheses, leading star,
and dispatch to the appropriate string constant reader.   

References fatal_with_file_and_line(), get_current_location(), m_string_obstack, NULL, read_braced_string(), read_quoted_string(), read_skip_spaces(), require_char(), require_char_ws(), and set_md_ptr_loc().

Referenced by handle_enum(), handle_include(), function_reader::parse_function(), rtx_reader::read_rtx_operand(), and read_skip_construct().

◆ 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, iterator_group::iterators, 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()

void md_reader::require_char ( char expected)

◆ 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(), read_name(), and md_name::string.

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

◆ set_md_ptr_loc()

void md_reader::set_md_ptr_loc ( const void * ptr,
file_location file_loc )
Associate PTR with the file position given by FILE_LOC.   

References md_reader::ptr_loc::loc, m_ptr_loc_obstack, m_ptr_locs, and md_reader::ptr_loc::ptr.

Referenced by copy_md_ptr_loc(), and read_string().

◆ 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 m_enum_types.

Referenced by main().

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

Referenced by main().

◆ unread_char()

Field Documentation

◆ m_base_dir

char* md_reader::m_base_dir
private

◆ m_compact

bool md_reader::m_compact
private

Referenced by is_compact().

◆ m_enum_types

htab_t md_reader::m_enum_types
private

◆ m_first_dir_md_include

file_name_list* md_reader::m_first_dir_md_include
private

Referenced by handle_include().

◆ m_first_line

int md_reader::m_first_line
private

Referenced by read_char(), and read_file_fragment().

◆ m_first_overload

overloaded_name* md_reader::m_first_overload
private

Referenced by get_overloads().

◆ m_joined_conditions

htab_t md_reader::m_joined_conditions
private

◆ m_joined_conditions_obstack

struct obstack md_reader::m_joined_conditions_obstack
private

◆ m_last_dir_md_include_ptr

file_name_list** md_reader::m_last_dir_md_include_ptr
private

Referenced by add_include_path().

◆ m_last_line

int md_reader::m_last_line
private

Referenced by read_char(), and read_file_fragment().

◆ m_last_line_colno

int md_reader::m_last_line_colno
private

Referenced by read_char(), and unread_char().

◆ m_md_constants

htab_t md_reader::m_md_constants
private

◆ m_next_overload_ptr

overloaded_name** md_reader::m_next_overload_ptr
private

◆ m_overloads_htab

htab_t md_reader::m_overloads_htab
private

◆ m_ptr_loc_obstack

struct obstack md_reader::m_ptr_loc_obstack
private

◆ m_ptr_locs

htab_t md_reader::m_ptr_locs
private

◆ m_read_md_colno

int md_reader::m_read_md_colno
private

◆ m_read_md_file

FILE* md_reader::m_read_md_file
private

◆ m_read_md_filename

const char* md_reader::m_read_md_filename
private

◆ m_read_md_lineno

int md_reader::m_read_md_lineno
private

◆ m_string_obstack

◆ m_toplevel_fname

const char* md_reader::m_toplevel_fname
private

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