comparison Changes @ 453:1e5ca85d3f97

inline on going...
author kono
date Tue, 30 Nov 2004 02:20:42 +0900
parents 8e3284b0a8c9
children b8f95294eb77
comparison
equal deleted inserted replaced
452:8e3284b0a8c9 453:1e5ca85d3f97
6616 Sun Nov 14 15:59:33 JST 2004 6616 Sun Nov 14 15:59:33 JST 2004
6617 6617
6618 よし、inline やるか。 6618 よし、inline やるか。
6619 6619
6620 inline function (or parsed tree) 6620 inline function (or parsed tree)
6621 list4(INLINE,name,type) 6621 // list4(INLINE,name,type)
6622 sc = INLINE
6623 attr = parse
6622 declaration (argument, local, static) 6624 declaration (argument, local, static)
6623 list4(DECL,next,init,NMTBL *nptr) done by def (?) 6625 list4(ST_DECL,next,NMTBL *nptr,stmode) done by def (?)
6624 statement 6626 statement
6625 list3(IF,next,list3(cond,then,else)) 6627 list3(ST_IF,next,list3(cond,then,else))
6626 list3(DO,next,list2(cond,while)) 6628 list4(ST_DO,next,cond,while)
6627 list3(FOR,next,list4(A,B,C,body)) 6629 list4(ST_WHILE,next,cond,while)
6628 list4(SWITCH,next,expr,body) 6630 list3(ST_FOR,next,list4(A,B,C,body))
6629 list3(COMP,next,body) 6631 list4(ST_SWITCH,next,expr,body)
6630 list2(BREAK,next) 6632 list3(ST_COMP,next,body)
6631 list2(CONTINUE,next) 6633 list2(ST_BREAK,next)
6632 list3(CASE,next,label) 6634 list2(ST_CONTINUE,next)
6635 list3(ST_CASE,next,label)
6636 list3(ST_DEFAULT,next)
6633 list3(ST_RETURN,next,expr) 6637 list3(ST_RETURN,next,expr)
6634 list3(GOTO,next,expr,env) 6638 list3(ST_GOTO,next,expr,env)
6635 list3(ST_ASM,next,list4(A,B,C,D)) 6639 list3(ST_ASM,next,list4(A,B,C,D),e1)
6636 list3(ST_LABEL,next,label) 6640 list3(ST_LABEL,next,label)
6637 list3(COMMENT,next,comment) (?) 6641 list3(ST_COMMENT,next,comment) (?)
6638 6642
6639 いくつかはexprと重なるけど... (まずい?) RETURN, ASM 6643 いくつかはexprと重なるけど... (まずい?) RETURN, ASM
6640 6644
6641 (1) make inline tree 6645 (1) make inline tree
6642 (2) evaluate inline function (copy and partial evaluation) 6646 (2) evaluate inline function (copy and partial evaluation)
6931 int next; 6935 int next;
6932 union:tag { 6936 union:tag {
6933 int arg0,...argn; 6937 int arg0,...argn;
6934 } 6938 }
6935 } 6939 }
6940
6941 Mon Nov 29 11:55:14 JST 2004
6942
6943 attr は、連想リストにするべきか。
6944
6945 partial evaluation を、どの段階で行うかっていう問題があるのか。
6946
6947 expr15 (function call)
6948
6949 inline 木作成の最中に展開すると繰り返し展開することになる。
6950 しなくても良いが... しかも、ST_* が expr の中に残ってしまう
6951 ので、g_expr で、ST_* を扱うことが必須。ってことは変更が結構
6952 大きい。ここで展開すると binop の最適化にひっかかるので簡単。
6953 docomp と同じ扱いが必要?
6954
6955 function (codegen)
6956
6957 ここで展開すると、代入とかが変数扱いしかしなくなる。手遅れ。
6958
6959 ってことは、expr15 で、partial evalucation はやる。inline
6960 中は展開しないとして、残った ST_* は、g_expr で処理する
6961 ってことですね。
6962
6963 static でもポインタを取られたりすると関数を生成する必要がある。
6964 extern なら、なおさら。それは、自分でやらないとダメ。まぁ、
6965 inline の関数リストを作るのが良いんだろうけど。