Commit bfe0d06b by Dale Johannesen Committed by Dale Johannesen

tree-gimple.c: Move GIMPLE definition...


2004-09-25  Dale Johannesen  <dalej@apple.com>

        * tree-gimple.c:  Move GIMPLE definition...
        * doc/tree-ssa.texi:  here.

From-SVN: r88111
parent 45343b92
2004-09-25 Dale Johannesen <dalej@apple.com>
* tree-gimple.c: Move GIMPLE definition...
* doc/tree-ssa.texi: here.
2004-09-25 Kazu Hirata <kazu@cs.umass.edu> 2004-09-25 Kazu Hirata <kazu@cs.umass.edu>
* tree-vectorizer.c: Fix a comment typo. * tree-vectorizer.c: Fix a comment typo.
......
...@@ -83,7 +83,8 @@ perfectly happy to take it as input and spit out GIMPLE. ...@@ -83,7 +83,8 @@ perfectly happy to take it as input and spit out GIMPLE.
GIMPLE is a simplified subset of GENERIC for use in optimization. The GIMPLE is a simplified subset of GENERIC for use in optimization. The
particular subset chosen (and the name) was heavily influenced by the particular subset chosen (and the name) was heavily influenced by the
SIMPLE IL used by the McCAT compiler project at McGill University, SIMPLE IL used by the McCAT compiler project at McGill University
(@uref{http://www-acaps.cs.mcgill.ca/info/McCAT/McCAT.html}),
though we have made some different choices. For one thing, SIMPLE though we have made some different choices. For one thing, SIMPLE
doesn't support @code{goto}; a production compiler can't afford that doesn't support @code{goto}; a production compiler can't afford that
kind of restriction. kind of restriction.
...@@ -529,105 +530,153 @@ void f() ...@@ -529,105 +530,153 @@ void f()
@cindex Rough GIMPLE Grammar @cindex Rough GIMPLE Grammar
@smallexample @smallexample
function: function : FUNCTION_DECL
FUNCTION_DECL DECL_SAVED_TREE -> compound-stmt
DECL_SAVED_TREE -> block
block: compound-stmt: STATEMENT_LIST
BIND_EXPR members -> stmt
BIND_EXPR_VARS -> DECL chain
BIND_EXPR_BLOCK -> BLOCK stmt : block
BIND_EXPR_BODY
-> compound-stmt
compound-stmt:
COMPOUND_EXPR
op0 -> non-compound-stmt
op1 -> stmt
stmt: compound-stmt
| non-compound-stmt
non-compound-stmt:
block
| if-stmt | if-stmt
| switch-stmt | switch-stmt
| jump-stmt | goto-stmt
| return-stmt
| resx-stmt
| label-stmt | label-stmt
| try-stmt | try-stmt
| modify-stmt | modify-stmt
| call-stmt | call-stmt
if-stmt:
COND_EXPR block : BIND_EXPR
BIND_EXPR_VARS -> chain of DECLs
BIND_EXPR_BLOCK -> BLOCK
BIND_EXPR_BODY -> compound-stmt
if-stmt : COND_EXPR
op0 -> condition op0 -> condition
op1 -> stmt op1 -> compound-stmt
op2 -> stmt op2 -> compound-stmt
switch-stmt:
SWITCH_EXPR switch-stmt : SWITCH_EXPR
op0 -> val op0 -> val
op1 -> NULL_TREE op1 -> NULL
op2 -> TREE_VEC of CASE_LABEL_EXPRs op2 -> TREE_VEC of CASE_LABEL_EXPRs
jump-stmt: The CASE_LABEL_EXPRs are sorted by CASE_LOW,
GOTO_EXPR and default is last.
op0 -> LABEL_DECL | '*' ID
| RETURN_EXPR goto-stmt : GOTO_EXPR
op0 -> modify-stmt op0 -> LABEL_DECL | val
| NULL_TREE
label-stmt: return-stmt : RETURN_EXPR
LABEL_EXPR op0 -> return-value
return-value : NULL
| RESULT_DECL
| MODIFY_EXPR
op0 -> RESULT_DECL
op1 -> lhs
resx-stmt : RESX_EXPR
label-stmt : LABEL_EXPR
op0 -> LABEL_DECL op0 -> LABEL_DECL
try-stmt:
TRY_CATCH_EXPR try-stmt : TRY_CATCH_EXPR
op0 -> stmt op0 -> compound-stmt
op1 -> handler op1 -> handler
| TRY_FINALLY_EXPR | TRY_FINALLY_EXPR
op0 -> stmt op0 -> compound-stmt
op1 -> stmt op1 -> compound-stmt
handler:
catch-seq handler : catch-seq
| EH_FILTER_EXPR | EH_FILTER_EXPR
| stmt | compound-stmt
catch-seq:
CATCH_EXPR catch-seq : STATEMENT_LIST
| COMPOUND_EXPR members -> CATCH_EXPR
op0 -> CATCH_EXPR
op1 -> catch-seq modify-stmt : MODIFY_EXPR
modify-stmt:
MODIFY_EXPR
op0 -> lhs op0 -> lhs
op1 -> rhs op1 -> rhs
call-stmt: CALL_EXPR
op0 -> _DECL | '&' _DECL call-stmt : CALL_EXPR
op1 -> arglist op0 -> val | OBJ_TYPE_REF
arglist: op1 -> call-arg-list
NULL_TREE
| TREE_LIST call-arg-list: TREE_LIST
members -> lhs | CONST
addr-expr-arg: ID
| compref
addressable : addr-expr-arg
| indirectref
with-size-arg: addressable
| call-stmt
indirectref : INDIRECT_REF
op0 -> val op0 -> val
op1 -> arglist
varname : compref | _DECL
lhs: varname | '*' _DECL
pseudo-lval: _DECL | '*' _DECL
compref :
COMPONENT_REF
op0 -> compref | pseudo-lval
| ARRAY_REF
op0 -> compref | pseudo-lval
op1 -> val
condition : val | val relop val lhs : addressable
val : _DECL | CONST | bitfieldref
| WITH_SIZE_EXPR
op0 -> with-size-arg
op1 -> val
rhs: varname | CONST min-lval : ID
| '*' _DECL | indirectref
| '&' varname
| call_expr bitfieldref : BIT_FIELD_REF
| unop val op0 -> inner-compref
| val binop val op1 -> CONST
| '(' cast ')' val op2 -> var
compref : inner-compref
| REALPART_EXPR
op0 -> inner-compref
| IMAGPART_EXPR
op0 -> inner-compref
inner-compref: min-lval
| COMPONENT_REF
op0 -> inner-compref
op1 -> FIELD_DECL
op2 -> val
| ARRAY_REF
op0 -> inner-compref
op1 -> val
op2 -> val
op3 -> val
| ARRAY_RANGE_REF
op0 -> inner-compref
op1 -> val
op2 -> val
op3 -> val
| VIEW_CONVERT_EXPR
op0 -> inner-compref
unop: '+' | '-' | '!' | '~' condition : val
| RELOP
op0 -> val
op1 -> val
binop: relop | '-' | '+' | '/' | '*' val : ID
| '%' | '&' | '|' | '<<' | '>>' | '^' | CONST
relop: All tree codes of class '<' rhs : lhs
| CONST
| call-stmt
| ADDR_EXPR
op0 -> addr-expr-arg
| UNOP
op0 -> val
| BINOP
op0 -> val
op1 -> val
| RELOP
op0 -> val
op1 -> val
@end smallexample @end smallexample
@node Annotations @node Annotations
......
...@@ -33,160 +33,7 @@ Boston, MA 02111-1307, USA. */ ...@@ -33,160 +33,7 @@ Boston, MA 02111-1307, USA. */
#include "expr.h" #include "expr.h"
#include "bitmap.h" #include "bitmap.h"
/* GCC GIMPLE structure /* For the definitive definition of GIMPLE, see doc/tree-ssa.texi. */
Inspired by the SIMPLE C grammar at
http://www-acaps.cs.mcgill.ca/info/McCAT/McCAT.html
function : FUNCTION_DECL
DECL_SAVED_TREE -> compound-stmt
compound-stmt: STATEMENT_LIST
members -> stmt
stmt : block
| if-stmt
| switch-stmt
| goto-stmt
| return-stmt
| resx-stmt
| label-stmt
| try-stmt
| modify-stmt
| call-stmt
block : BIND_EXPR
BIND_EXPR_VARS -> chain of DECLs
BIND_EXPR_BLOCK -> BLOCK
BIND_EXPR_BODY -> compound-stmt
if-stmt : COND_EXPR
op0 -> condition
op1 -> compound-stmt
op2 -> compound-stmt
switch-stmt : SWITCH_EXPR
op0 -> val
op1 -> NULL
op2 -> TREE_VEC of CASE_LABEL_EXPRs
The CASE_LABEL_EXPRs are sorted by CASE_LOW,
and default is last.
goto-stmt : GOTO_EXPR
op0 -> LABEL_DECL | val
return-stmt : RETURN_EXPR
op0 -> return-value
return-value : NULL
| RESULT_DECL
| MODIFY_EXPR
op0 -> RESULT_DECL
op1 -> lhs
resx-stmt : RESX_EXPR
label-stmt : LABEL_EXPR
op0 -> LABEL_DECL
try-stmt : TRY_CATCH_EXPR
op0 -> compound-stmt
op1 -> handler
| TRY_FINALLY_EXPR
op0 -> compound-stmt
op1 -> compound-stmt
handler : catch-seq
| EH_FILTER_EXPR
| compound-stmt
catch-seq : STATEMENT_LIST
members -> CATCH_EXPR
modify-stmt : MODIFY_EXPR
op0 -> lhs
op1 -> rhs
call-stmt : CALL_EXPR
op0 -> val | OBJ_TYPE_REF
op1 -> call-arg-list
call-arg-list: TREE_LIST
members -> lhs
addr-expr-arg: ID
| compref
addressable : addr-expr-arg
| indirectref
with-size-arg: addressable
| call-stmt
indirectref : INDIRECT_REF
op0 -> val
lhs : addressable
| bitfieldref
| WITH_SIZE_EXPR
op0 -> with-size-arg
op1 -> val
min-lval : ID
| indirectref
bitfieldref : BIT_FIELD_REF
op0 -> inner-compref
op1 -> CONST
op2 -> var
compref : inner-compref
| REALPART_EXPR
op0 -> inner-compref
| IMAGPART_EXPR
op0 -> inner-compref
inner-compref: min-lval
| COMPONENT_REF
op0 -> inner-compref
op1 -> FIELD_DECL
op2 -> val
| ARRAY_REF
op0 -> inner-compref
op1 -> val
op2 -> val
op3 -> val
| ARRAY_RANGE_REF
op0 -> inner-compref
op1 -> val
op2 -> val
op3 -> val
| VIEW_CONVERT_EXPR
op0 -> inner-compref
condition : val
| RELOP
op0 -> val
op1 -> val
val : ID
| CONST
rhs : lhs
| CONST
| call-stmt
| ADDR_EXPR
op0 -> addr-expr-arg
| UNOP
op0 -> val
| BINOP
op0 -> val
op1 -> val
| RELOP
op0 -> val
op1 -> val
*/
static inline bool is_gimple_id (tree); static inline bool is_gimple_id (tree);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment