Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/MLRISC/sparc/ra/sparcRewrite.sml
ViewVC logotype

Annotation of /sml/trunk/src/MLRISC/sparc/ra/sparcRewrite.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 657 - (view) (download)

1 : monnier 245 functor SparcRewrite(Instr:SPARCINSTR) =
2 :     struct
3 :     structure I = Instr
4 : leunga 657 structure C = I.C
5 : monnier 245
6 :     fun rwset(S,rw) = SortedList.uniq(map rw S)
7 :    
8 : george 545 fun rewriteUse(mapr : I.C.cell -> I.C.cell,instr,rs,rt) =
9 : monnier 245 let fun R r = if mapr r = rs then rt else r
10 :     fun O(i as I.REG r) = if mapr r = rs then I.REG rt else i
11 :     | O i = i
12 :     in case instr of
13 :     I.LOAD{l,r,i,d,mem} => I.LOAD{l=l,r=R r,i=O i,d=d,mem=mem}
14 :     | I.STORE{s,d,r,i,mem} => I.STORE{s=s,d=R d,r=R r,i=O i,mem=mem}
15 :     | I.FLOAD{l,r,i,d,mem} => I.FLOAD{l=l,r=R r,i=O i,d=d,mem=mem}
16 :     | I.FSTORE{s,d,r,i,mem} => I.FSTORE{s=s,d=d,r=R r,i=O i,mem=mem}
17 : monnier 411 | I.ARITH{a,r,i,d} => I.ARITH{a=a,r=R r,i=O i,d=d}
18 : monnier 245 | I.SHIFT{s,r,i,d} => I.SHIFT{s=s,r=R r,i=O i,d=d}
19 : monnier 411 | I.BR{r,p,rcond,a,nop,label} =>
20 :     I.BR{r=R r,p=p,rcond=rcond,a=a,nop=nop,label=label}
21 :     | I.MOVicc{b,i,d} => I.MOVicc{b=b,i=O i,d=R d}
22 :     | I.MOVfcc{b,i,d} => I.MOVfcc{b=b,i=O i,d=R d}
23 :     | I.MOVR{rcond,r,i,d} => I.MOVR{rcond=rcond,r=R r,i=O i,d=R d}
24 : monnier 245 | I.JMP{r,i,labs,nop} => I.JMP{r=R r,i=O i,labs=labs,nop=nop}
25 : monnier 411 | I.JMPL{r,i,d,defs,uses=(A,B,C),nop,mem} =>
26 :     I.JMPL{r=R r,i=O i,d=d,defs=defs,uses=(rwset(A,R),B,C),nop=nop,mem=mem}
27 :     | I.CALL{defs,uses=(A,B,C),label,nop,mem} =>
28 :     I.CALL{defs=defs,uses=(rwset(A,R),B,C),label=label,nop=nop,mem=mem}
29 : monnier 245 | I.SAVE{r,i,d} => I.SAVE{r=R r,i=O i,d=d}
30 :     | I.RESTORE{r,i,d} => I.RESTORE{r=R r,i=O i,d=d}
31 :     | I.WRY{r,i} => I.WRY{r=R r,i=O i}
32 : monnier 411 | I.Ticc{t,cc,r,i} => I.Ticc{t=t,cc=cc,r=R r,i=O i}
33 : monnier 245 | I.COPY{src,dst,tmp,impl} =>
34 :     I.COPY{src=map R src,dst=dst,tmp=tmp,impl=impl}
35 : leunga 657 | I.ANNOTATION{i,a} =>
36 :     I.ANNOTATION{i=rewriteUse(mapr,i,rs,rt),
37 :     a=case a of
38 :     C.DEF_USE{cellkind=C.GP,defs,uses} =>
39 :     C.DEF_USE{cellkind=C.GP,uses=map R uses,
40 :     defs=defs}
41 :     | _ => a}
42 : monnier 245 | _ => instr
43 :     end
44 :    
45 : george 545 fun rewriteDef(mapr : I.C.cell -> I.C.cell,instr,rs,rt) =
46 : monnier 245 let fun R r = if mapr r = rs then rt else r
47 :     fun ea(SOME(I.Direct r)) = SOME(I.Direct(R r))
48 :     | ea x = x
49 :     in case instr of
50 :     I.LOAD{l,r,i,d,mem} => I.LOAD{l=l,r=r,i=i,d=R d,mem=mem}
51 : monnier 411 | I.ARITH{a,r,i,d} => I.ARITH{a=a,r=r,i=i,d=R d}
52 : monnier 245 | I.SHIFT{s,r,i,d} => I.SHIFT{s=s,r=r,i=i,d=R d}
53 :     | I.SETHI{i,d} => I.SETHI{i=i,d=R d}
54 : monnier 411 | I.MOVicc{b,i,d} => I.MOVicc{b=b,i=i,d=R d}
55 :     | I.MOVfcc{b,i,d} => I.MOVfcc{b=b,i=i,d=R d}
56 :     | I.MOVR{rcond,r,i,d} => I.MOVR{rcond=rcond,r=r,i=i,d=R d}
57 :     | I.JMPL{r,i,d,defs=(A,B,C),uses,nop,mem} =>
58 :     I.JMPL{r=r,i=i,d=R d,defs=(rwset(A,R),B,C),uses=uses,nop=nop,mem=mem}
59 :     | I.CALL{defs=(A,B,C),uses,label,nop,mem} =>
60 :     I.CALL{defs=(rwset(A,R),B,C),uses=uses,label=label,nop=nop,mem=mem}
61 : monnier 245 | I.SAVE{r,i,d} => I.SAVE{r=r,i=i,d=R d}
62 :     | I.RESTORE{r,i,d} => I.RESTORE{r=r,i=i,d=R d}
63 :     | I.RDY{d} => I.RDY{d=R d}
64 :     | I.COPY{src,dst,tmp,impl} =>
65 :     I.COPY{src=src,dst=map R dst,tmp=ea tmp,impl=impl}
66 : leunga 657 | I.ANNOTATION{i,a} =>
67 :     I.ANNOTATION{i=rewriteDef(mapr,i,rs,rt),
68 :     a=case a of
69 :     C.DEF_USE{cellkind=C.GP,defs,uses} =>
70 :     C.DEF_USE{cellkind=C.GP,uses=uses,
71 :     defs=map R defs}
72 :     | _ => a}
73 : monnier 245 | _ => instr
74 :     end
75 :    
76 : george 545 fun frewriteUse(mapr : I.C.cell -> I.C.cell,instr,rs,rt) =
77 : monnier 245 let fun R r = if mapr r = rs then rt else r
78 :     in case instr of
79 :     I.FPop1{a,r,d} => I.FPop1{a=a,r=R r,d=d}
80 :     | I.FPop2{a,r1,r2,d} => I.FPop2{a=a,r1=R r1,r2=R r2,d=d}
81 :     | I.FCMP{cmp,r1,r2,nop} => I.FCMP{cmp=cmp,r1=R r1,r2=R r2,nop=nop}
82 :     | I.FSTORE{s,r,i,d,mem} => I.FSTORE{s=s,r=r,i=i,d=R d,mem=mem}
83 : monnier 411 | I.FMOVicc{sz,b,r,d} => I.FMOVicc{sz=sz,b=b,r=R r,d=R d}
84 :     | I.FMOVfcc{sz,b,r,d} => I.FMOVfcc{sz=sz,b=b,r=R r,d=R d}
85 :     | I.JMPL{r,i,d,defs,uses=(A,B,C),nop,mem} =>
86 :     I.JMPL{r=r,i=i,d=d,defs=defs,uses=(A,rwset(B,R),C),nop=nop,mem=mem}
87 :     | I.CALL{defs,uses=(A,B,C),label,nop,mem} =>
88 :     I.CALL{defs=defs,uses=(A,rwset(B,R),C),label=label,nop=nop,mem=mem}
89 : monnier 245 | I.FCOPY{src,dst,tmp,impl} =>
90 :     I.FCOPY{src=map R src,dst=dst,tmp=tmp,impl=impl}
91 : leunga 657 | I.ANNOTATION{i,a} =>
92 :     I.ANNOTATION{i=frewriteUse(mapr,i,rs,rt),
93 :     a=case a of
94 :     C.DEF_USE{cellkind=C.FP,defs,uses} =>
95 :     C.DEF_USE{cellkind=C.FP,uses=map R uses,
96 :     defs=defs}
97 :     | _ => a}
98 : monnier 245 | _ => instr
99 :     end
100 :    
101 : george 545 fun frewriteDef(mapr : I.C.cell -> I.C.cell,instr,rs,rt) =
102 : monnier 245 let fun R r = if mapr r = rs then rt else r
103 :     fun ea(SOME(I.FDirect r)) = SOME(I.FDirect(R r))
104 :     | ea x = x
105 :     in case instr of
106 :     I.FPop1{a,r,d} => I.FPop1{a=a,r=r,d=R d}
107 :     | I.FPop2{a,r1,r2,d} => I.FPop2{a=a,r1=r1,r2=r2,d=R d}
108 :     | I.FLOAD{l,r,i,d,mem} => I.FLOAD{l=l,r=r,i=i,d=R d,mem=mem}
109 : monnier 411 | I.FMOVicc{sz,b,r,d} => I.FMOVicc{sz=sz,b=b,r=r,d=R d}
110 :     | I.FMOVfcc{sz,b,r,d} => I.FMOVfcc{sz=sz,b=b,r=r,d=R d}
111 :     | I.JMPL{r,i,d,defs=(A,B,C),uses,nop,mem} =>
112 :     I.JMPL{r=r,i=i,d=d,defs=(A,rwset(B,R),C),uses=uses,nop=nop,mem=mem}
113 :     | I.CALL{defs=(A,B,C),uses,label,nop,mem} =>
114 :     I.CALL{defs=(A,rwset(B,R),C),uses=uses,label=label,nop=nop,mem=mem}
115 : monnier 245 | I.FCOPY{src,dst,tmp,impl} =>
116 :     I.FCOPY{src=src,dst=map R dst,tmp=ea tmp,impl=impl}
117 : leunga 657 | I.ANNOTATION{i,a}=>
118 :     I.ANNOTATION{i=frewriteDef(mapr,i,rs,rt),
119 :     a=case a of
120 :     C.DEF_USE{cellkind=C.FP,defs,uses} =>
121 :     C.DEF_USE{cellkind=C.FP,uses=uses,
122 :     defs=map R defs}
123 :     | _ => a}
124 : monnier 245 | _ => instr
125 :     end
126 :    
127 :     end
128 :    

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0