From bfe0d06bba399fa140d681ffb1b2f3e58d6a838c Mon Sep 17 00:00:00 2001 From: Dale Johannesen Date: Sat, 25 Sep 2004 22:11:02 +0000 Subject: [PATCH] tree-gimple.c: Move GIMPLE definition... 2004-09-25 Dale Johannesen * tree-gimple.c: Move GIMPLE definition... * doc/tree-ssa.texi: here. From-SVN: r88111 --- gcc/ChangeLog | 5 + gcc/doc/tree-ssa.texi | 249 +++++++++++++++++++++++++----------------- gcc/tree-gimple.c | 155 +------------------------- 3 files changed, 155 insertions(+), 254 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4d5706875f4..0ba761ff869 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-09-25 Dale Johannesen + + * tree-gimple.c: Move GIMPLE definition... + * doc/tree-ssa.texi: here. + 2004-09-25 Kazu Hirata * tree-vectorizer.c: Fix a comment typo. diff --git a/gcc/doc/tree-ssa.texi b/gcc/doc/tree-ssa.texi index 311006d4c0f..b5b9ad926a4 100644 --- a/gcc/doc/tree-ssa.texi +++ b/gcc/doc/tree-ssa.texi @@ -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 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 doesn't support @code{goto}; a production compiler can't afford that kind of restriction. @@ -529,105 +530,153 @@ void f() @cindex Rough GIMPLE Grammar @smallexample -function: - FUNCTION_DECL - DECL_SAVED_TREE -> block -block: - BIND_EXPR - BIND_EXPR_VARS -> DECL chain - BIND_EXPR_BLOCK -> 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 - | switch-stmt - | jump-stmt - | label-stmt - | try-stmt - | modify-stmt - | call-stmt -if-stmt: - COND_EXPR - op0 -> condition - op1 -> stmt - op2 -> stmt -switch-stmt: - SWITCH_EXPR - op0 -> val - op1 -> NULL_TREE - op2 -> TREE_VEC of CASE_LABEL_EXPRs -jump-stmt: - GOTO_EXPR - op0 -> LABEL_DECL | '*' ID - | RETURN_EXPR - op0 -> modify-stmt - | NULL_TREE -label-stmt: - LABEL_EXPR - op0 -> LABEL_DECL -try-stmt: - TRY_CATCH_EXPR - op0 -> stmt - op1 -> handler - | TRY_FINALLY_EXPR - op0 -> stmt - op1 -> stmt -handler: - catch-seq - | EH_FILTER_EXPR - | stmt -catch-seq: - CATCH_EXPR - | COMPOUND_EXPR - op0 -> CATCH_EXPR - op1 -> catch-seq -modify-stmt: - MODIFY_EXPR - op0 -> lhs - op1 -> rhs -call-stmt: CALL_EXPR - op0 -> _DECL | '&' _DECL - op1 -> arglist -arglist: - NULL_TREE - | TREE_LIST - 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 -val : _DECL | CONST - -rhs: varname | CONST - | '*' _DECL - | '&' varname - | call_expr - | unop val - | val binop val - | '(' cast ')' val - -unop: '+' | '-' | '!' | '~' - -binop: relop | '-' | '+' | '/' | '*' - | '%' | '&' | '|' | '<<' | '>>' | '^' - -relop: All tree codes of class '<' + 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 | CONST + + 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 @end smallexample @node Annotations diff --git a/gcc/tree-gimple.c b/gcc/tree-gimple.c index fe707d5fc54..818ec1378aa 100644 --- a/gcc/tree-gimple.c +++ b/gcc/tree-gimple.c @@ -33,160 +33,7 @@ Boston, MA 02111-1307, USA. */ #include "expr.h" #include "bitmap.h" -/* GCC GIMPLE structure - - 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 -*/ +/* For the definitive definition of GIMPLE, see doc/tree-ssa.texi. */ static inline bool is_gimple_id (tree); -- 2.30.2