Add a class hierarchy diagram to gimple.texi

2014-04-28  David Malcolm  <dmalcolm@redhat.com>

	* doc/gimple.texi: Replace the description of the now-defunct
	union gimple_statement_d with a diagram showing the
	gimple_statement_base class hierarchy and its relationships to
	the GSS_ and GIMPLE_ enums.

From-SVN: r209879
This commit is contained in:
David Malcolm 2014-04-28 21:02:28 +00:00 committed by David Malcolm
parent 97e1ad78bc
commit 1bc6d43cb8
2 changed files with 135 additions and 27 deletions

View File

@ -1,3 +1,10 @@
2014-04-28 David Malcolm <dmalcolm@redhat.com>
* doc/gimple.texi: Replace the description of the now-defunct
union gimple_statement_d with a diagram showing the
gimple_statement_base class hierarchy and its relationships to
the GSS_ and GIMPLE_ enums.
2014-04-28 James Greenhalgh <james.greenhalgh@arm.com>
* config/aarch64/aarch64-protos.h (aarch64_modes_tieable_p): New.

View File

@ -70,6 +70,7 @@ with the flag @option{-fdump-tree-gimple}.
@menu
* Tuple representation::
* Class hierarchy of GIMPLE statements::
* GIMPLE instruction set::
* GIMPLE Exception Handling::
* Temporaries::
@ -287,35 +288,135 @@ reduce memory utilization further by removing these sets).
@end itemize
All the other tuples are defined in terms of these three basic
ones. Each tuple will add some fields. The main gimple type
is defined to be the union of all these structures (@code{GTY} markers
elided for clarity):
ones. Each tuple will add some fields.
@node Class hierarchy of GIMPLE statements
@section Class hierarchy of GIMPLE statements
@cindex GIMPLE class hierarchy
The following diagram shows the C++ inheritance hierarchy of statement
kinds, along with their relationships to @code{GSS_} values (layouts) and
@code{GIMPLE_} values (codes):
@smallexample
union gimple_statement_d
@{
struct gimple_statement_base gsbase;
struct gimple_statement_with_ops gsops;
struct gimple_statement_with_memory_ops gsmem;
struct gimple_statement_omp omp;
struct gimple_statement_bind gimple_bind;
struct gimple_statement_catch gimple_catch;
struct gimple_statement_eh_filter gimple_eh_filter;
struct gimple_statement_phi gimple_phi;
struct gimple_statement_resx gimple_resx;
struct gimple_statement_try gimple_try;
struct gimple_statement_wce gimple_wce;
struct gimple_statement_asm gimple_asm;
struct gimple_statement_omp_critical gimple_omp_critical;
struct gimple_statement_omp_for gimple_omp_for;
struct gimple_statement_omp_parallel gimple_omp_parallel;
struct gimple_statement_omp_task gimple_omp_task;
struct gimple_statement_omp_sections gimple_omp_sections;
struct gimple_statement_omp_single gimple_omp_single;
struct gimple_statement_omp_continue gimple_omp_continue;
struct gimple_statement_omp_atomic_load gimple_omp_atomic_load;
struct gimple_statement_omp_atomic_store gimple_omp_atomic_store;
@};
gimple_statement_base
| layout: GSS_BASE
| used for 4 codes: GIMPLE_ERROR_MARK
| GIMPLE_NOP
| GIMPLE_OMP_SECTIONS_SWITCH
| GIMPLE_PREDICT
|
+ gimple_statement_with_ops_base
| | (no GSS layout)
| |
| + gimple_statement_with_ops
| | layout: GSS_WITH_OPS
| | Used for 5 codes: GIMPLE_COND
| | GIMPLE_DEBUG
| | GIMPLE_GOTO
| | GIMPLE_LABEL
| | GIMPLE_SWITCH
| |
| + gimple_statement_with_memory_ops_base
| | layout: GSS_WITH_MEM_OPS_BASE
| |
| + gimple_statement_with_memory_ops
| | layout: GSS_WITH_MEM_OPS.
| | used for codes GIMPLE_ASSIGN and GIMPLE_RETURN.
| |
| + gimple_statement_call
| | layout: GSS_CALL, code: GIMPLE_CALL
| |
| + gimple_statement_asm
| | layout: GSS_ASM, code: GIMPLE_ASM
| |
| + gimple_statement_transaction
| layout: GSS_TRANSACTION, code: GIMPLE_TRANSACTION
|
+ gimple_statement_omp
| | layout: GSS_OMP. Used for code GIMPLE_OMP_SECTION
| |
| + gimple_statement_omp_critical
| | layout: GSS_OMP_CRITICAL, code: GIMPLE_OMP_CRITICAL
| |
| + gimple_statement_omp_for
| | layout: GSS_OMP_FOR, code: GIMPLE_OMP_FOR
| |
| + gimple_statement_omp_parallel_layout
| | | layout: GSS_OMP_PARALLEL_LAYOUT
| | |
| | + gimple_statement_omp_taskreg
| | | |
| | | + gimple_statement_omp_parallel
| | | | code: GIMPLE_OMP_PARALLEL
| | | |
| | | + gimple_statement_omp_task
| | | code: GIMPLE_OMP_TASK
| | |
| | + gimple_statement_omp_target
| | code: GIMPLE_OMP_TARGET
| |
| + gimple_statement_omp_sections
| | layout: GSS_OMP_SECTIONS, code: GIMPLE_OMP_SECTIONS
| |
| + gimple_statement_omp_single_layout
| | layout: GSS_OMP_SINGLE_LAYOUT
| |
| + gimple_statement_omp_single
| | code: GIMPLE_OMP_SINGLE
| |
| + gimple_statement_omp_teams
| code: GIMPLE_OMP_TEAMS
|
+ gimple_statement_bind
| layout: GSS_BIND, code: GIMPLE_BIND
|
+ gimple_statement_catch
| layout: GSS_CATCH, code: GIMPLE_CATCH
|
+ gimple_statement_eh_filter
| layout: GSS_EH_FILTER, code: GIMPLE_EH_FILTER
|
+ gimple_statement_eh_else
| layout: GSS_EH_ELSE, code: GIMPLE_EH_ELSE
|
+ gimple_statement_eh_mnt
| layout: GSS_EH_MNT, code: GIMPLE_EH_MUST_NOT_THROW
|
+ gimple_statement_phi
| layout: GSS_PHI, code: GIMPLE_PHI
|
+ gimple_statement_eh_ctrl
| | layout: GSS_EH_CTRL
| |
| + gimple_statement_resx
| | code: GIMPLE_RESX
| |
| + gimple_statement_eh_dispatch
| code: GIMPLE_EH_DISPATCH
|
+ gimple_statement_try
| layout: GSS_TRY, code: GIMPLE_TRY
|
+ gimple_statement_wce
| layout: GSS_WCE, code: GIMPLE_WITH_CLEANUP_EXPR
|
+ gimple_statement_omp_continue
| layout: GSS_OMP_CONTINUE, code: GIMPLE_OMP_CONTINUE
|
+ gimple_statement_omp_atomic_load
| layout: GSS_OMP_ATOMIC_LOAD, code: GIMPLE_OMP_ATOMIC_LOAD
|
+ gimple_statement_omp_atomic_store_layout
| layout: GSS_OMP_ATOMIC_STORE_LAYOUT,
| code: GIMPLE_OMP_ATOMIC_STORE
|
+ gimple_statement_omp_atomic_store
| code: GIMPLE_OMP_ATOMIC_STORE
|
+ gimple_statement_omp_return
code: GIMPLE_OMP_RETURN
@end smallexample