Mercurial > hg > CbC > old > device
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 の関数リストを作るのが良いんだろうけど。 |