summaryrefslogtreecommitdiff
path: root/src/cmd/5g/opt.h
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2013-08-12 22:02:10 -0400
committerRuss Cox <rsc@golang.org>2013-08-12 22:02:10 -0400
commit52f1bccf07235dd21d3ba2ed3ca7e35b2ab1d817 (patch)
tree587be2f8b35fc54221ab591c5df95d98f8ab8abe /src/cmd/5g/opt.h
parent0bb7f95e3d171655023b32bc4b045851db7fb863 (diff)
downloadgo-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.h34
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);