diff options
author | Russ Cox <rsc@golang.org> | 2013-08-12 22:02:10 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2013-08-12 22:02:10 -0400 |
commit | 52f1bccf07235dd21d3ba2ed3ca7e35b2ab1d817 (patch) | |
tree | 587be2f8b35fc54221ab591c5df95d98f8ab8abe /src/cmd/5g/opt.h | |
parent | 0bb7f95e3d171655023b32bc4b045851db7fb863 (diff) | |
download | go-52f1bccf07235dd21d3ba2ed3ca7e35b2ab1d817.tar.gz |
cmd/gc: move flow graph into portable opt
Now there's only one copy of the flow graph construction
and dominator computation, and different optimizations
can attach different annotations to the instructions.
R=ken2
CC=golang-dev
https://codereview.appspot.com/12797045
Diffstat (limited to 'src/cmd/5g/opt.h')
-rw-r--r-- | src/cmd/5g/opt.h | 34 |
1 files changed, 4 insertions, 30 deletions
diff --git a/src/cmd/5g/opt.h b/src/cmd/5g/opt.h index 0c120bd69..cbd8cca3f 100644 --- a/src/cmd/5g/opt.h +++ b/src/cmd/5g/opt.h @@ -55,6 +55,7 @@ typedef struct Rgn Rgn; // r->prog->opt points back to r. struct Reg { + Flow f; Bits set; // variables written by this instruction. Bits use1; // variables read by prog->from. @@ -68,19 +69,6 @@ struct Reg Bits act; int32 regu; // register used bitmap - int32 rpo; // reverse post ordering - int32 active; - - uint16 loop; // x5 for every loop - uchar refset; // diagnostic generated - - Reg* p1; // predecessors of this instruction: p1, - Reg* p2; // and then p2 linked though p2link. - Reg* p2link; - Reg* s1; // successors of this instruction (at most two: s1 and s2). - Reg* s2; - Reg* link; // next instruction in function code - Prog* prog; // actual instruction }; #define R ((Reg*)0) @@ -96,7 +84,6 @@ struct Rgn EXTERN int32 exregoffset; // not set EXTERN int32 exfregoffset; // not set EXTERN Reg* firstr; -EXTERN Reg* lastr; EXTERN Reg zreg; EXTERN Reg* freer; EXTERN Reg** rpo2r; @@ -134,34 +121,21 @@ void regopt(Prog*); void addmove(Reg*, int, int, int); Bits mkvar(Reg *r, Adr *a); void prop(Reg*, Bits, Bits); -void loopit(Reg*, int32); void synch(Reg*, Bits); uint32 allreg(uint32, Rgn*); void paint1(Reg*, int); uint32 paint2(Reg*, int); void paint3(Reg*, int, int32, int); void addreg(Adr*, int); -void dumpit(char *str, Reg *r0); +void dumpit(char *str, Flow *r0, int); /* * peep.c */ -void peep(void); -void excise(Reg*); -Reg* uniqp(Reg*); -Reg* uniqs(Reg*); -int regtyp(Adr*); -int anyvar(Adr*); -int subprop(Reg*); -int copyprop(Reg*); -int copy1(Adr*, Adr*, Reg*, int); +void peep(Prog*); +void excise(Flow*); int copyu(Prog*, Adr*, Adr*); -int copyas(Adr*, Adr*); -int copyau(Adr*, Adr*); -int copysub(Adr*, Adr*, Adr*, int); -int copysub1(Prog*, Adr*, Adr*, int); - int32 RtoB(int); int32 FtoB(int); int BtoR(int32); |