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 1002, Fri Nov 30 17:11:33 2001 UTC revision 1003, Fri Dec 7 02:45:32 2001 UTC
# Line 5  Line 5 
5     structure CB = CellsBasis     structure CB = CellsBasis
6     structure CS = CB.CellSet     structure CS = CB.CellSet
7    
8     fun rewriteUse(instr,rs,rt) =     fun error msg = MLRiscErrorMsg.error ("SparcRewrite", msg)
9     let fun match r = CB.sameColor(r,rs)  
10       fun rewriteUse(instr,rs,rt) =  let
11         fun sparcUse(instr) = let
12             fun match r = CB.sameColor(r,rs)
13         fun R r = if match r then rt else r         fun R r = if match r then rt else r
14         fun O(i as I.REG r) = if match r then I.REG rt else i         fun O(i as I.REG r) = if match r then I.REG rt else i
15           | O i = i           | O i = i
# Line 36  Line 39 
39         | I.Ticc{t,cc,r,i} => I.Ticc{t=t,cc=cc,r=R r,i=O i}         | I.Ticc{t,cc,r,i} => I.Ticc{t=t,cc=cc,r=R r,i=O i}
40         | I.COPY{src,dst,tmp,impl} =>         | I.COPY{src,dst,tmp,impl} =>
41             I.COPY{src=map R src,dst=dst,tmp=tmp,impl=impl}             I.COPY{src=map R src,dst=dst,tmp=tmp,impl=impl}
        | I.ANNOTATION{i,a} =>  
            I.ANNOTATION{i=rewriteUse(i,rs,rt),  
                         a=case a of  
                            CB.DEF_USE{cellkind=CB.GP,defs,uses} =>  
                              CB.DEF_USE{cellkind=CB.GP,uses=map R uses,  
                                        defs=defs}  
                           | _ => a}  
42         | _ => instr         | _ => instr
43     end     end
44       in
45          case instr
46           of (I.ANNOTATION{i, ...}) => rewriteUse(i, rs, rt)
47            | I.LIVE{regs, spilled} => I.LIVE{regs=C.addReg(rt, C.rmvReg(rs, regs)),
48                                               spilled=spilled}
49            | I.INSTR(i) => I.INSTR(sparcUse(i))
50            | _ => error "rewriteUse"
51       end
52    
53     fun rewriteDef(instr,rs,rt) =     fun rewriteDef(instr,rs,rt) = let
54     let fun match r = CB.sameColor(r,rs)       fun sparcDef(instr) = let
55             fun match r = CB.sameColor(r,rs)
56         fun R r = if match r then rt else r         fun R r = if match r then rt else r
57         fun ea(SOME(I.Direct r)) = SOME(I.Direct(R r))         fun ea(SOME(I.Direct r)) = SOME(I.Direct(R r))
58           | ea x = x           | ea x = x
# Line 70  Line 75 
75         | I.RDY{d} => I.RDY{d=R d}         | I.RDY{d} => I.RDY{d=R d}
76         | I.COPY{src,dst,tmp,impl} =>         | I.COPY{src,dst,tmp,impl} =>
77             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}
        | I.ANNOTATION{i,a} =>  
            I.ANNOTATION{i=rewriteDef(i,rs,rt),  
                         a=case a of  
                            CB.DEF_USE{cellkind=CB.GP,defs,uses} =>  
                              CB.DEF_USE{cellkind=CB.GP,uses=uses,  
                                        defs=map R defs}  
                           | _ => a}  
78         | _ => instr         | _ => instr
79     end     end
80       in
81             case instr
82             of I.ANNOTATION{i, ...} => rewriteDef(instr, rs, rt)
83              | I.KILL{regs, spilled} =>
84                  I.KILL{regs=C.addReg(rt, C.rmvReg(rs, regs)), spilled=spilled}
85              | I.INSTR(i) => I.INSTR(sparcDef(i))
86              | _ => error "rewriteDef"
87       end
88    
89    
90     fun frewriteUse(instr,rs,rt) =     fun frewriteUse(instr,rs,rt) = let
91     let fun match r = CB.sameColor(r,rs)       fun sparcUse(instr) = let
92             fun match r = CB.sameColor(r,rs)
93         fun R r = if match r then rt else r         fun R r = if match r then rt else r
94     in  case instr of     in  case instr of
95           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}
# Line 99  Line 107 
107                    label=label,cutsTo=cutsTo,nop=nop,mem=mem}                    label=label,cutsTo=cutsTo,nop=nop,mem=mem}
108         | I.FCOPY{src,dst,tmp,impl} =>         | I.FCOPY{src,dst,tmp,impl} =>
109             I.FCOPY{src=map R src,dst=dst,tmp=tmp,impl=impl}             I.FCOPY{src=map R src,dst=dst,tmp=tmp,impl=impl}
        | I.ANNOTATION{i,a} =>  
            I.ANNOTATION{i=frewriteUse(i,rs,rt),  
                         a=case a of  
                            CB.DEF_USE{cellkind=CB.FP,defs,uses} =>  
                              CB.DEF_USE{cellkind=CB.FP,uses=map R uses,  
                                        defs=defs}  
                           | _ => a}  
110         | _ => instr         | _ => instr
111     end     end
112       in
113            case instr
114            of I.ANNOTATION{i, ...} => frewriteUse(instr, rs, rt)
115             | I.INSTR(i) => I.INSTR(sparcUse(i))
116             | I.LIVE{regs, spilled} =>
117                 I.LIVE{regs=C.addFreg(rt, C.rmvFreg(rs, regs)), spilled=spilled}
118             | _ => error "frewriteUse"
119    
120     fun frewriteDef(instr,rs,rt) =     end
121     let fun match r = CB.sameColor(r,rs)  
122    
123       fun frewriteDef(instr,rs,rt) = let
124         fun sparcDef(instr) = let
125             fun match r = CB.sameColor(r,rs)
126         fun R r = if match r then rt else r         fun R r = if match r then rt else r
127         fun ea(SOME(I.FDirect r)) = SOME(I.FDirect(R r))         fun ea(SOME(I.FDirect r)) = SOME(I.FDirect(R r))
128           | ea x = x           | ea x = x
# Line 128  Line 140 
140                    uses=uses,label=label,cutsTo=cutsTo,nop=nop,mem=mem}                    uses=uses,label=label,cutsTo=cutsTo,nop=nop,mem=mem}
141         | I.FCOPY{src,dst,tmp,impl} =>         | I.FCOPY{src,dst,tmp,impl} =>
142             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}
        | I.ANNOTATION{i,a}=>  
            I.ANNOTATION{i=frewriteDef(i,rs,rt),  
                         a=case a of  
                            CB.DEF_USE{cellkind=CB.FP,defs,uses} =>  
                              CB.DEF_USE{cellkind=CB.FP,uses=uses,  
                                        defs=map R defs}  
                           | _ => a}  
143         | _ => instr         | _ => instr
144     end     end
145      in
146            case instr
147            of I.ANNOTATION{i, ...} => frewriteDef(instr, rs, rt)
148             | I.KILL{regs, spilled} =>
149                 I.KILL{regs=C.addFreg(rt, C.rmvFreg(rs, regs)), spilled=spilled}
150             | I.INSTR(i) => I.INSTR(sparcDef(i))
151             | _ => error "frewriteUse"
152    
153  end  end
154    end
155    

Legend:
Removed from v.1002  
changed lines
  Added in v.1003

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