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

SCM Repository

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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 657, Fri Jun 9 05:20:54 2000 UTC revision 889, Thu Jul 19 20:35:20 2001 UTC
# Line 2  Line 2 
2  struct  struct
3     structure I = Instr     structure I = Instr
4     structure C = I.C     structure C = I.C
5       structure CB = CellsBasis
6    
7     fun rwset(S,rw) = SortedList.uniq(map rw S)     fun rewriteUse(instr,rs,rt) =
8       let fun match r = CB.sameColor(r,rs)
9     fun rewriteUse(mapr : I.C.cell -> I.C.cell,instr,rs,rt) =         fun R r = if match r then rt else r
10     let fun R r = if mapr r = rs then rt else r         fun O(i as I.REG r) = if match r then I.REG rt else i
        fun O(i as I.REG r) = if mapr r = rs then I.REG rt else i  
11           | O i = i           | O i = i
12     in  case instr of     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}           I.LOAD{l,r,i,d,mem} => I.LOAD{l=l,r=R r,i=O i,d=d,mem=mem}
# Line 22  Line 22 
22         | I.MOVfcc{b,i,d} => I.MOVfcc{b=b,i=O i,d=R d}         | 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}         | I.MOVR{rcond,r,i,d} => I.MOVR{rcond=rcond,r=R r,i=O i,d=R d}
24         | I.JMP{r,i,labs,nop} => I.JMP{r=R r,i=O i,labs=labs,nop=nop}         | I.JMP{r,i,labs,nop} => I.JMP{r=R r,i=O i,labs=labs,nop=nop}
25         | I.JMPL{r,i,d,defs,uses=(A,B,C),nop,mem} =>         | I.JMPL{r,i,d,defs,uses,cutsTo,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}              I.JMPL{r=R r,i=O i,d=d,defs=defs,
27         | I.CALL{defs,uses=(A,B,C),label,nop,mem} =>                     uses=C.CellSet.map {from=rs,to=rt} uses,
28              I.CALL{defs=defs,uses=(rwset(A,R),B,C),label=label,nop=nop,mem=mem}                     cutsTo=cutsTo,nop=nop,mem=mem}
29           | I.CALL{defs,uses,label,cutsTo,nop,mem} =>
30                I.CALL{defs=defs,uses=C.CellSet.map {from=rs,to=rt} uses,
31                       label=label,cutsTo=cutsTo,nop=nop,mem=mem}
32         | I.SAVE{r,i,d} => I.SAVE{r=R r,i=O i,d=d}         | I.SAVE{r,i,d} => I.SAVE{r=R r,i=O i,d=d}
33         | I.RESTORE{r,i,d} => I.RESTORE{r=R r,i=O i,d=d}         | I.RESTORE{r,i,d} => I.RESTORE{r=R r,i=O i,d=d}
34         | I.WRY{r,i} => I.WRY{r=R r,i=O i}         | I.WRY{r,i} => I.WRY{r=R r,i=O i}
# Line 33  Line 36 
36         | I.COPY{src,dst,tmp,impl} =>         | I.COPY{src,dst,tmp,impl} =>
37             I.COPY{src=map R src,dst=dst,tmp=tmp,impl=impl}             I.COPY{src=map R src,dst=dst,tmp=tmp,impl=impl}
38         | I.ANNOTATION{i,a} =>         | I.ANNOTATION{i,a} =>
39             I.ANNOTATION{i=rewriteUse(mapr,i,rs,rt),             I.ANNOTATION{i=rewriteUse(i,rs,rt),
40                          a=case a of                          a=case a of
41                             C.DEF_USE{cellkind=C.GP,defs,uses} =>                             CB.DEF_USE{cellkind=CB.GP,defs,uses} =>
42                               C.DEF_USE{cellkind=C.GP,uses=map R uses,                               CB.DEF_USE{cellkind=CB.GP,uses=map R uses,
43                                         defs=defs}                                         defs=defs}
44                            | _ => a}                            | _ => a}
45         | _ => instr         | _ => instr
46     end     end
47    
48     fun rewriteDef(mapr : I.C.cell -> I.C.cell,instr,rs,rt) =     fun rewriteDef(instr,rs,rt) =
49     let fun R r = if mapr r = rs then rt else r     let fun match r = CB.sameColor(r,rs)
50           fun R r = if match r then rt else r
51         fun ea(SOME(I.Direct r)) = SOME(I.Direct(R r))         fun ea(SOME(I.Direct r)) = SOME(I.Direct(R r))
52           | ea x = x           | ea x = x
53     in  case instr of     in  case instr of
# Line 54  Line 58 
58         | I.MOVicc{b,i,d} => I.MOVicc{b=b,i=i,d=R d}         | I.MOVicc{b,i,d} => I.MOVicc{b=b,i=i,d=R d}
59         | I.MOVfcc{b,i,d} => I.MOVfcc{b=b,i=i,d=R d}         | I.MOVfcc{b,i,d} => I.MOVfcc{b=b,i=i,d=R d}
60         | I.MOVR{rcond,r,i,d} => I.MOVR{rcond=rcond,r=r,i=i,d=R d}         | I.MOVR{rcond,r,i,d} => I.MOVR{rcond=rcond,r=r,i=i,d=R d}
61         | I.JMPL{r,i,d,defs=(A,B,C),uses,nop,mem} =>         | I.JMPL{r,i,d,defs,uses,cutsTo,nop,mem} =>
62              I.JMPL{r=r,i=i,d=R d,defs=(rwset(A,R),B,C),uses=uses,nop=nop,mem=mem}              I.JMPL{r=r,i=i,d=R d,defs=C.CellSet.map {from=rs,to=rt} defs,
63         | I.CALL{defs=(A,B,C),uses,label,nop,mem} =>                     uses=uses,cutsTo=cutsTo,nop=nop,mem=mem}
64              I.CALL{defs=(rwset(A,R),B,C),uses=uses,label=label,nop=nop,mem=mem}         | I.CALL{defs,uses,label,cutsTo,nop,mem} =>
65                I.CALL{defs=C.CellSet.map {from=rs,to=rt} defs,
66                       uses=uses,label=label,cutsTo=cutsTo,nop=nop,mem=mem}
67         | I.SAVE{r,i,d} => I.SAVE{r=r,i=i,d=R d}         | I.SAVE{r,i,d} => I.SAVE{r=r,i=i,d=R d}
68         | I.RESTORE{r,i,d} => I.RESTORE{r=r,i=i,d=R d}         | I.RESTORE{r,i,d} => I.RESTORE{r=r,i=i,d=R d}
69         | I.RDY{d} => I.RDY{d=R d}         | I.RDY{d} => I.RDY{d=R d}
70         | I.COPY{src,dst,tmp,impl} =>         | I.COPY{src,dst,tmp,impl} =>
71             I.COPY{src=src,dst=map R dst,tmp=ea tmp,impl=impl}             I.COPY{src=src,dst=map R dst,tmp=ea tmp,impl=impl}
72         | I.ANNOTATION{i,a} =>         | I.ANNOTATION{i,a} =>
73             I.ANNOTATION{i=rewriteDef(mapr,i,rs,rt),             I.ANNOTATION{i=rewriteDef(i,rs,rt),
74                          a=case a of                          a=case a of
75                             C.DEF_USE{cellkind=C.GP,defs,uses} =>                             CB.DEF_USE{cellkind=CB.GP,defs,uses} =>
76                               C.DEF_USE{cellkind=C.GP,uses=uses,                               CB.DEF_USE{cellkind=CB.GP,uses=uses,
77                                         defs=map R defs}                                         defs=map R defs}
78                            | _ => a}                            | _ => a}
79         | _ => instr         | _ => instr
80     end     end
81    
82     fun frewriteUse(mapr : I.C.cell -> I.C.cell,instr,rs,rt) =     fun frewriteUse(instr,rs,rt) =
83     let fun R r = if mapr r = rs then rt else r     let fun match r = CB.sameColor(r,rs)
84           fun R r = if match r then rt else r
85     in  case instr of     in  case instr of
86           I.FPop1{a,r,d} => I.FPop1{a=a,r=R r,d=d}           I.FPop1{a,r,d} => I.FPop1{a=a,r=R r,d=d}
87         | I.FPop2{a,r1,r2,d} => I.FPop2{a=a,r1=R r1,r2=R r2,d=d}         | I.FPop2{a,r1,r2,d} => I.FPop2{a=a,r1=R r1,r2=R r2,d=d}
# Line 82  Line 89 
89         | I.FSTORE{s,r,i,d,mem} => I.FSTORE{s=s,r=r,i=i,d=R d,mem=mem}         | I.FSTORE{s,r,i,d,mem} => I.FSTORE{s=s,r=r,i=i,d=R d,mem=mem}
90         | I.FMOVicc{sz,b,r,d} => I.FMOVicc{sz=sz,b=b,r=R r,d=R d}         | I.FMOVicc{sz,b,r,d} => I.FMOVicc{sz=sz,b=b,r=R r,d=R d}
91         | I.FMOVfcc{sz,b,r,d} => I.FMOVfcc{sz=sz,b=b,r=R r,d=R d}         | I.FMOVfcc{sz,b,r,d} => I.FMOVfcc{sz=sz,b=b,r=R r,d=R d}
92         | I.JMPL{r,i,d,defs,uses=(A,B,C),nop,mem} =>         | I.JMPL{r,i,d,defs,uses,cutsTo,nop,mem} =>
93             I.JMPL{r=r,i=i,d=d,defs=defs,uses=(A,rwset(B,R),C),nop=nop,mem=mem}             I.JMPL{r=r,i=i,d=d,defs=defs,
94         | I.CALL{defs,uses=(A,B,C),label,nop,mem} =>                    uses=C.CellSet.map {from=rs,to=rt} uses,
95             I.CALL{defs=defs,uses=(A,rwset(B,R),C),label=label,nop=nop,mem=mem}                    cutsTo=cutsTo,nop=nop,mem=mem}
96           | I.CALL{defs,uses,label,cutsTo,nop,mem} =>
97               I.CALL{defs=defs,uses=C.CellSet.map {from=rs,to=rt} uses,
98                      label=label,cutsTo=cutsTo,nop=nop,mem=mem}
99         | I.FCOPY{src,dst,tmp,impl} =>         | I.FCOPY{src,dst,tmp,impl} =>
100             I.FCOPY{src=map R src,dst=dst,tmp=tmp,impl=impl}             I.FCOPY{src=map R src,dst=dst,tmp=tmp,impl=impl}
101         | I.ANNOTATION{i,a} =>         | I.ANNOTATION{i,a} =>
102             I.ANNOTATION{i=frewriteUse(mapr,i,rs,rt),             I.ANNOTATION{i=frewriteUse(i,rs,rt),
103                          a=case a of                          a=case a of
104                             C.DEF_USE{cellkind=C.FP,defs,uses} =>                             CB.DEF_USE{cellkind=CB.FP,defs,uses} =>
105                               C.DEF_USE{cellkind=C.FP,uses=map R uses,                               CB.DEF_USE{cellkind=CB.FP,uses=map R uses,
106                                         defs=defs}                                         defs=defs}
107                            | _ => a}                            | _ => a}
108         | _ => instr         | _ => instr
109     end     end
110    
111     fun frewriteDef(mapr : I.C.cell -> I.C.cell,instr,rs,rt) =     fun frewriteDef(instr,rs,rt) =
112     let fun R r = if mapr r = rs then rt else r     let fun match r = CB.sameColor(r,rs)
113           fun R r = if match r then rt else r
114         fun ea(SOME(I.FDirect r)) = SOME(I.FDirect(R r))         fun ea(SOME(I.FDirect r)) = SOME(I.FDirect(R r))
115           | ea x = x           | ea x = x
116     in  case instr of     in  case instr of
# Line 108  Line 119 
119         | I.FLOAD{l,r,i,d,mem} => I.FLOAD{l=l,r=r,i=i,d=R d,mem=mem}         | I.FLOAD{l,r,i,d,mem} => I.FLOAD{l=l,r=r,i=i,d=R d,mem=mem}
120         | I.FMOVicc{sz,b,r,d} => I.FMOVicc{sz=sz,b=b,r=r,d=R d}         | I.FMOVicc{sz,b,r,d} => I.FMOVicc{sz=sz,b=b,r=r,d=R d}
121         | I.FMOVfcc{sz,b,r,d} => I.FMOVfcc{sz=sz,b=b,r=r,d=R d}         | I.FMOVfcc{sz,b,r,d} => I.FMOVfcc{sz=sz,b=b,r=r,d=R d}
122         | I.JMPL{r,i,d,defs=(A,B,C),uses,nop,mem} =>         | I.JMPL{r,i,d,defs,uses,cutsTo,nop,mem} =>
123             I.JMPL{r=r,i=i,d=d,defs=(A,rwset(B,R),C),uses=uses,nop=nop,mem=mem}             I.JMPL{r=r,i=i,d=d,defs=C.CellSet.map {from=rs,to=rt} defs,
124         | I.CALL{defs=(A,B,C),uses,label,nop,mem} =>                    uses=uses,cutsTo=cutsTo,nop=nop,mem=mem}
125             I.CALL{defs=(A,rwset(B,R),C),uses=uses,label=label,nop=nop,mem=mem}         | I.CALL{defs,uses,label,cutsTo,nop,mem} =>
126               I.CALL{defs=C.CellSet.map {from=rs,to=rt} defs,
127                      uses=uses,label=label,cutsTo=cutsTo,nop=nop,mem=mem}
128         | I.FCOPY{src,dst,tmp,impl} =>         | I.FCOPY{src,dst,tmp,impl} =>
129             I.FCOPY{src=src,dst=map R dst,tmp=ea tmp,impl=impl}             I.FCOPY{src=src,dst=map R dst,tmp=ea tmp,impl=impl}
130         | I.ANNOTATION{i,a}=>         | I.ANNOTATION{i,a}=>
131             I.ANNOTATION{i=frewriteDef(mapr,i,rs,rt),             I.ANNOTATION{i=frewriteDef(i,rs,rt),
132                          a=case a of                          a=case a of
133                             C.DEF_USE{cellkind=C.FP,defs,uses} =>                             CB.DEF_USE{cellkind=CB.FP,defs,uses} =>
134                               C.DEF_USE{cellkind=C.FP,uses=uses,                               CB.DEF_USE{cellkind=CB.FP,uses=uses,
135                                         defs=map R defs}                                         defs=map R defs}
136                            | _ => a}                            | _ => a}
137         | _ => instr         | _ => instr

Legend:
Removed from v.657  
changed lines
  Added in v.889

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