Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/cxx-util/tree-to-cxx.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/cxx-util/tree-to-cxx.sml

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

revision 3963, Mon Jun 13 17:49:00 2016 UTC revision 3977, Wed Jun 15 19:06:30 2016 UTC
# Line 26  Line 26 
26     *)     *)
27      val trExpToVar : CodeGenEnv.t * CLang.ty * string * TreeIR.exp -> CLang.exp * CLang.stm list      val trExpToVar : CodeGenEnv.t * CLang.ty * string * TreeIR.exp -> CLang.exp * CLang.stm list
28    
     val trAssign : CodeGenEnv.t * CLang.exp * TreeIR.exp -> CLang.stm list  
   
29    (* generate code to register an error message (require that a world pointer "wrld" is in scope) *)    (* generate code to register an error message (require that a world pointer "wrld" is in scope) *)
30      val errorMsgAdd : CodeGenEnv.t * CLang.exp -> CLang.stm      val errorMsgAdd : CodeGenEnv.t * CLang.exp -> CLang.stm
31    
# Line 237  Line 235 
235            (* end case *))            (* end case *))
236    
237  (* FIXME: trAssign and trDecl do the same analysis of the rhs; we should factor that out *)  (* FIXME: trAssign and trDecl do the same analysis of the rhs; we should factor that out *)
238      fun trAssign (env, lhs, rhs) = let    (* translate the assignment `lhs = rhs` and add the code to the stms list.  Note that the
239            fun trArg (i, arg) = CL.mkAssign(CL.mkSubscript(lhs, intExp i), trExp (env, arg))     * stms list is reverse order!
240       *)
241        fun trAssign (env, lhs, rhs, stms) = let
242              fun trArg (i, arg, stms) =
243                    CL.mkAssign(CL.mkSubscript(lhs, intExp i), trExp (env, arg)) :: stms
244            in            in
245              case rhs              case rhs
246               of IR.E_Op(Op.VToInt _, [a]) => [CL.mkCall ("vtoi", [lhs, trExp(env, a)])]               of IR.E_Op(Op.VToInt _, [a]) =>
247                      CL.mkCall ("vtoi", [lhs, trExp(env, a)]) :: stms
248                | IR.E_Op(Op.TensorCopy shp, [a]) =>                | IR.E_Op(Op.TensorCopy shp, [a]) =>
249                    [CL.mkCall (RN.tensorCopy shp, [lhs, trExp(env, a)])]                    CL.mkCall (RN.tensorCopy shp, [lhs, trExp(env, a)]) :: stms
250                | IR.E_Pack({wid, ...}, args) =>                | IR.E_Pack({wid, ...}, args) =>
251                    [CL.mkCall (RN.vpack wid, lhs :: List.map (fn e => trExp(env, e)) args)]                    CL.mkCall (RN.vpack wid, lhs :: List.map (fn e => trExp(env, e)) args) :: stms
252                | IR.E_Cons(args, _) => List.mapi trArg args                | IR.E_Cons(args, _) => List.foldli trArg stms args
253                | IR.E_Seq(args, _) => List.mapi trArg args                | IR.E_Seq(args, _) => List.foldli trArg stms args
254                | _ => [CL.mkAssign(lhs, trExp (env, rhs))]                | _ => CL.mkAssign(lhs, trExp (env, rhs)) :: stms
255              (* end case *)              (* end case *)
256            end            end
257    
# Line 306  Line 309 
309                        in                        in
310                          (env, trDecl (env, ty, x', exp) @ stms)                          (env, trDecl (env, ty, x', exp) @ stms)
311                        end                        end
312                    | IR.S_Assign(false, x, exp) => let                    | IR.S_Assign(false, x, exp) =>
313                        val stms' = trAssign (env, lvalueVar (env, x), exp)                        (env, trAssign (env, lvalueVar (env, x), exp, stms))
                       in  
                         (env, stms' @ stms)  
                       end  
314                    | IR.S_MAssign(xs, exp) =>                    | IR.S_MAssign(xs, exp) =>
315                        (env, trMultiAssign (env, List.map (fn x => lvalueVar (env, x)) xs, exp) :: stms)                        (env, trMultiAssign (env, List.map (fn x => lvalueVar (env, x)) xs, exp) :: stms)
316                    | IR.S_GAssign(x, exp) =>                    | IR.S_GAssign(x, exp) =>
317                        (env, trAssign (env, lvalueGlobalVar (env, x), exp) @ stms)                        (env, trAssign (env, lvalueGlobalVar (env, x), exp, stms))
318                    | IR.S_IfThen(cond, thenBlk) =>                    | IR.S_IfThen(cond, thenBlk) =>
319                        (env, CL.mkIfThen(trExp(env, cond), trBlock(env, thenBlk)) :: stms)                        (env, CL.mkIfThen(trExp(env, cond), trBlock(env, thenBlk)) :: stms)
320                    | IR.S_IfThenElse(cond, thenBlk, elseBlk) => let                    | IR.S_IfThenElse(cond, thenBlk, elseBlk) => let
# Line 351  Line 351 
351                        in                        in
352                          (env, stm :: stms)                          (env, stm :: stms)
353                        end                        end
354                    | IR.S_Save(x, exp) => (env, trAssign (env, lvalueStateVar(env, x), exp) @ stms)                    | IR.S_Save(x, exp) =>
355                        (env, trAssign (env, lvalueStateVar(env, x), exp, stms))
356                    | IR.S_LoadNrrd(lhs, ty, nrrd) => let                    | IR.S_LoadNrrd(lhs, ty, nrrd) => let
357                        val stm = (case ty                        val stm = (case ty
358                               of APITypes.SeqTy(ty, NONE) =>                               of APITypes.SeqTy(ty, NONE) =>

Legend:
Removed from v.3963  
changed lines
  Added in v.3977

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