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/compiler/CodeGen/cpscompile/memAliasing.sml
 [smlnj] / sml / trunk / src / compiler / CodeGen / cpscompile / memAliasing.sml

# Diff of /sml/trunk/src/compiler/CodeGen/cpscompile/memAliasing.sml

revision 589, Fri Mar 31 16:14:36 2000 UTC revision 590, Sat Apr 1 02:24:08 2000 UTC
# Line 73  Line 73
73
74     exception NotFound     exception NotFound
75
76       val top = CPSRegions.memory
77
78     (*     (*
79      * Analyze a set of CPS functions      * Analyze a set of CPS functions
80      *)      *)
# Line 175  Line 177
177               | mkRecord(C.RK_VECTOR,x,vs,hp) = mkVector(x,vs,hp)               | mkRecord(C.RK_VECTOR,x,vs,hp) = mkVector(x,vs,hp)
178               | mkRecord(_,x,vs,hp) = mkNormalRecord(x,vs,hp)               | mkRecord(_,x,vs,hp) = mkNormalRecord(x,vs,hp)
179
180               fun makeTop(m) = (PT.unify(m, top); top)
181
182             (* CPS Pure Primitives *)             (* CPS Pure Primitives *)
183             fun arrayptr v = PT.strongSubscript(value v, 0)             fun arrayptr v = PT.pi(value v, 0)
184
185             fun mkspecial(x,v,hp) = mkNormalRecord(x,[(v,off0)],hp)             fun mkspecial(x,v,hp) = mkNormalRecord(x,[(v,off0)],hp)
186             fun fwrap(x,v,hp) = mkFRecord(x,[(v,off0)],hp)             fun fwrap(x,v,hp) = mkFRecord(x,[(v,off0)],hp)
# Line 185  Line 189
189             fun newarray0(x,hp) =             fun newarray0(x,hp) =
190                 bind(x,PT.mkRecord(NONE,[PT.mkRecord(NONE,[])]))                 bind(x,PT.mkRecord(NONE,[PT.mkRecord(NONE,[])]))
191
192             fun objlength(x,v) = bind(x, PT.strongSubscript(value v, ~1))             fun objlength(x,v) = bind(x, PT.pi(value v, ~1))
193             fun length(x,v) = bind(x, PT.strongSubscript(value v, 1))             fun length(x,v) = bind(x, PT.pi(value v, 1))
194             fun arraysub(x,a,i) = bind(x,PT.weakSubscript(arrayptr a))             fun arraysub(x,a,i) = makeTop(PT.weakSubscript(arrayptr a))
195             fun subscriptv(x,a,i) = arraysub(x,a,i)             fun subscriptv(x,a,i) = arraysub(x,a,i)
196             fun subscript(x,a,i) = arraysub(x,a,i)             fun subscript(x,a,i) = arraysub(x,a,i)
197             fun pure_numsubscript(x,a,i) = arraysub(x,a,i)             fun pure_numsubscript(x,a,i) = arraysub(x,a,i)
198             fun gettag(x,v) = bind(x,PT.strongSubscript(value v, ~1))             fun gettag(x,v) = bind(x,PT.pi(value v, ~1))
199             fun numsubscript8(x,a,i) = arraysub(x,a,i)             fun numsubscript8(x,a,i) = arraysub(x,a,i)
200             fun numsubscriptf64(x,a,i) = arraysub(x,a,i)             fun numsubscriptf64(x,a,i) = arraysub(x,a,i)
201             fun getcon(x,v) = bind(x, PT.strongSubscript(value v,0))             fun getcon(x,v) = bind(x, PT.pi(value v,0))
202             fun getexn(x,v) = bind(x, PT.strongSubscript(value v,0))             fun getexn(x,v) = bind(x, PT.pi(value v,0))
203             fun recsubscript(x,a,i) = arraysub(x,a,i)             fun recsubscript(x,a,i) = arraysub(x,a,i)
204             fun raw64subscript(x,a,i) = arraysub(x,a,i)             fun raw64subscript(x,a,i) = arraysub(x,a,i)
205
206             (* CPS Looker Primitives *)             (* CPS Looker Primitives *)
207             fun deref(x,v) = bind(x, PT.strongSubscript(value v, 0))             fun deref(x,v) = makeTop(PT.strongSubscript(value v, 0))
208             fun gethdlr x = bind(x, PT.strongSubscript(exnptr, 0))             fun gethdlr x = bind(x, PT.strongSubscript(exnptr, 0))
209             fun getvar x = bind(x, PT.strongSubscript(varptr, 0))             fun getvar x = bind(x, PT.strongSubscript(varptr, 0))
210
211             (* CPS Setter Primitives *)             (* CPS Setter Primitives *)
212             fun supdate(a,x) = PT.strongUpdate(value a, 0, value x)             fun supdate(a,x) = PT.strongUpdate(value a, 0, makeTop(value x))
213             fun wupdate(a,x) = PT.weakUpdate(value a, value x)             fun wupdate(a,x) = PT.weakUpdate(value a, makeTop(value x))
214
215               fun arrayupdate(a,i,x) = PT.weakUpdate(arrayptr a,value x)
216
217             fun assign(a,x) = supdate(a,x)             fun assign(a,x) = supdate(a,x)
218             fun unboxedassign(a,x) = supdate(a,x)             fun unboxedassign(a,x) = supdate(a,x)
219             fun update(a,i,x) = wupdate(a,x)             fun update(a,i,x) = arrayupdate(a,i,x)
220             fun boxedupdate(a,i,x) = wupdate(a,x)             fun boxedupdate(a,i,x) = arrayupdate(a,i,x)
221             fun numupdate(a,i,x) = wupdate(a,x)             fun unboxedupdate(a,i,x) = arrayupdate(a,i,x)
222             fun numupdateF64(a,i,x) = wupdate(a,x)             fun numupdate(a,i,x) = arrayupdate(a,i,x)
223               fun numupdateF64(a,i,x) = arrayupdate(a,i,x)
224             fun sethdlr x = PT.strongUpdate(exnptr, 0, value x)             fun sethdlr x = PT.strongUpdate(exnptr, 0, value x)
225             fun setvar  x = PT.strongUpdate(varptr, 0, value x)             fun setvar  x = PT.strongUpdate(varptr, 0, value x)
226
# Line 284  Line 291
291                   (update(a,i,v); infer(k,hp+storeListSize))                   (update(a,i,v); infer(k,hp+storeListSize))
292               | infer(C.SETTER(P.boxedupdate, [a,i,v], k),hp) =               | infer(C.SETTER(P.boxedupdate, [a,i,v], k),hp) =
293                   (boxedupdate(a,i,v); infer(k,hp+storeListSize))                   (boxedupdate(a,i,v); infer(k,hp+storeListSize))
294                 | infer(C.SETTER(P.unboxedupdate, [a,i,v], k), hp) =
295                     (unboxedupdate(a,i,v); infer(k,hp))
296               | infer(C.SETTER(P.numupdate{kind=P.INT _}, [a,i,v], k),hp) =               | infer(C.SETTER(P.numupdate{kind=P.INT _}, [a,i,v], k),hp) =
297                   (numupdate(a,i,v); infer(k,hp))                   (numupdate(a,i,v); infer(k,hp))
298               | infer(C.SETTER(P.numupdate{kind=P.FLOAT 64}, [a,i,v], k),hp) =               | infer(C.SETTER(P.numupdate{kind=P.FLOAT 64}, [a,i,v], k),hp) =
# Line 308  Line 317
317         in infer(cexp, 0)         in infer(cexp, 0)
318         end         end
319
val top = CPSRegions.memory
320     in  if !Control.CG.memDisambiguate then     in  if !Control.CG.memDisambiguate then
321         (CPSRegions.reset();         (CPSRegions.reset();
322          app defineFunction cpsFunctions;          app defineFunction cpsFunctions;

Legend:
 Removed from v.589 changed lines Added in v.590