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 744, Fri Dec 8 04:11:42 2000 UTC
# Line 3  Line 3 
3     structure I = Instr     structure I = Instr
4     structure C = I.C     structure C = I.C
5    
6     fun rwset(S,rw) = SortedList.uniq(map rw S)     fun rewriteUse(instr,rs,rt) =
7       let fun match r = C.sameColor(r,rs)
8     fun rewriteUse(mapr : I.C.cell -> I.C.cell,instr,rs,rt) =         fun R r = if match r then rt else r
9     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  
10           | O i = i           | O i = i
11     in  case instr of     in  case instr of
12           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 21 
21         | 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}
22         | 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}
23         | 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}
24         | I.JMPL{r,i,d,defs,uses=(A,B,C),nop,mem} =>         | I.JMPL{r,i,d,defs,uses,nop,mem} =>
25              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,
26         | I.CALL{defs,uses=(A,B,C),label,nop,mem} =>                     uses=C.CellSet.map {from=rs,to=rt} uses,nop=nop,mem=mem}
27              I.CALL{defs=defs,uses=(rwset(A,R),B,C),label=label,nop=nop,mem=mem}         | I.CALL{defs,uses,label,nop,mem} =>
28                I.CALL{defs=defs,uses=C.CellSet.map {from=rs,to=rt} uses,
29                       label=label,nop=nop,mem=mem}
30         | 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}
31         | 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}
32         | 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 34 
34         | I.COPY{src,dst,tmp,impl} =>         | I.COPY{src,dst,tmp,impl} =>
35             I.COPY{src=map R src,dst=dst,tmp=tmp,impl=impl}             I.COPY{src=map R src,dst=dst,tmp=tmp,impl=impl}
36         | I.ANNOTATION{i,a} =>         | I.ANNOTATION{i,a} =>
37             I.ANNOTATION{i=rewriteUse(mapr,i,rs,rt),             I.ANNOTATION{i=rewriteUse(i,rs,rt),
38                          a=case a of                          a=case a of
39                             C.DEF_USE{cellkind=C.GP,defs,uses} =>                             C.DEF_USE{cellkind=C.GP,defs,uses} =>
40                               C.DEF_USE{cellkind=C.GP,uses=map R uses,                               C.DEF_USE{cellkind=C.GP,uses=map R uses,
# Line 42  Line 43 
43         | _ => instr         | _ => instr
44     end     end
45    
46     fun rewriteDef(mapr : I.C.cell -> I.C.cell,instr,rs,rt) =     fun rewriteDef(instr,rs,rt) =
47     let fun R r = if mapr r = rs then rt else r     let fun match r = C.sameColor(r,rs)
48           fun R r = if match r then rt else r
49         fun ea(SOME(I.Direct r)) = SOME(I.Direct(R r))         fun ea(SOME(I.Direct r)) = SOME(I.Direct(R r))
50           | ea x = x           | ea x = x
51     in  case instr of     in  case instr of
# Line 54  Line 56 
56         | 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}
57         | 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}
58         | 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}
59         | I.JMPL{r,i,d,defs=(A,B,C),uses,nop,mem} =>         | I.JMPL{r,i,d,defs,uses,nop,mem} =>
60              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,
61         | I.CALL{defs=(A,B,C),uses,label,nop,mem} =>                     uses=uses,nop=nop,mem=mem}
62              I.CALL{defs=(rwset(A,R),B,C),uses=uses,label=label,nop=nop,mem=mem}         | I.CALL{defs,uses,label,nop,mem} =>
63                I.CALL{defs=C.CellSet.map {from=rs,to=rt} defs,
64                       uses=uses,label=label,nop=nop,mem=mem}
65         | 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}
66         | 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}
67         | I.RDY{d} => I.RDY{d=R d}         | I.RDY{d} => I.RDY{d=R d}
68         | I.COPY{src,dst,tmp,impl} =>         | I.COPY{src,dst,tmp,impl} =>
69             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}
70         | I.ANNOTATION{i,a} =>         | I.ANNOTATION{i,a} =>
71             I.ANNOTATION{i=rewriteDef(mapr,i,rs,rt),             I.ANNOTATION{i=rewriteDef(i,rs,rt),
72                          a=case a of                          a=case a of
73                             C.DEF_USE{cellkind=C.GP,defs,uses} =>                             C.DEF_USE{cellkind=C.GP,defs,uses} =>
74                               C.DEF_USE{cellkind=C.GP,uses=uses,                               C.DEF_USE{cellkind=C.GP,uses=uses,
# Line 73  Line 77 
77         | _ => instr         | _ => instr
78     end     end
79    
80     fun frewriteUse(mapr : I.C.cell -> I.C.cell,instr,rs,rt) =     fun frewriteUse(instr,rs,rt) =
81     let fun R r = if mapr r = rs then rt else r     let fun match r = C.sameColor(r,rs)
82           fun R r = if match r then rt else r
83     in  case instr of     in  case instr of
84           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}
85         | 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 87 
87         | 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}
88         | 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}
89         | 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}
90         | I.JMPL{r,i,d,defs,uses=(A,B,C),nop,mem} =>         | I.JMPL{r,i,d,defs,uses,nop,mem} =>
91             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,
92         | I.CALL{defs,uses=(A,B,C),label,nop,mem} =>                    uses=C.CellSet.map {from=rs,to=rt} uses,nop=nop,mem=mem}
93             I.CALL{defs=defs,uses=(A,rwset(B,R),C),label=label,nop=nop,mem=mem}         | I.CALL{defs,uses,label,nop,mem} =>
94               I.CALL{defs=defs,uses=C.CellSet.map {from=rs,to=rt} uses,
95                      label=label,nop=nop,mem=mem}
96         | I.FCOPY{src,dst,tmp,impl} =>         | I.FCOPY{src,dst,tmp,impl} =>
97             I.FCOPY{src=map R src,dst=dst,tmp=tmp,impl=impl}             I.FCOPY{src=map R src,dst=dst,tmp=tmp,impl=impl}
98         | I.ANNOTATION{i,a} =>         | I.ANNOTATION{i,a} =>
99             I.ANNOTATION{i=frewriteUse(mapr,i,rs,rt),             I.ANNOTATION{i=frewriteUse(i,rs,rt),
100                          a=case a of                          a=case a of
101                             C.DEF_USE{cellkind=C.FP,defs,uses} =>                             C.DEF_USE{cellkind=C.FP,defs,uses} =>
102                               C.DEF_USE{cellkind=C.FP,uses=map R uses,                               C.DEF_USE{cellkind=C.FP,uses=map R uses,
# Line 98  Line 105 
105         | _ => instr         | _ => instr
106     end     end
107    
108     fun frewriteDef(mapr : I.C.cell -> I.C.cell,instr,rs,rt) =     fun frewriteDef(instr,rs,rt) =
109     let fun R r = if mapr r = rs then rt else r     let fun match r = C.sameColor(r,rs)
110           fun R r = if match r then rt else r
111         fun ea(SOME(I.FDirect r)) = SOME(I.FDirect(R r))         fun ea(SOME(I.FDirect r)) = SOME(I.FDirect(R r))
112           | ea x = x           | ea x = x
113     in  case instr of     in  case instr of
# Line 108  Line 116 
116         | 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}
117         | 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}
118         | 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}
119         | I.JMPL{r,i,d,defs=(A,B,C),uses,nop,mem} =>         | I.JMPL{r,i,d,defs,uses,nop,mem} =>
120             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,
121         | I.CALL{defs=(A,B,C),uses,label,nop,mem} =>                    uses=uses,nop=nop,mem=mem}
122             I.CALL{defs=(A,rwset(B,R),C),uses=uses,label=label,nop=nop,mem=mem}         | I.CALL{defs,uses,label,nop,mem} =>
123               I.CALL{defs=C.CellSet.map {from=rs,to=rt} defs,
124                      uses=uses,label=label,nop=nop,mem=mem}
125         | I.FCOPY{src,dst,tmp,impl} =>         | I.FCOPY{src,dst,tmp,impl} =>
126             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}
127         | I.ANNOTATION{i,a}=>         | I.ANNOTATION{i,a}=>
128             I.ANNOTATION{i=frewriteDef(mapr,i,rs,rt),             I.ANNOTATION{i=frewriteDef(i,rs,rt),
129                          a=case a of                          a=case a of
130                             C.DEF_USE{cellkind=C.FP,defs,uses} =>                             C.DEF_USE{cellkind=C.FP,defs,uses} =>
131                               C.DEF_USE{cellkind=C.FP,uses=uses,                               C.DEF_USE{cellkind=C.FP,uses=uses,

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

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