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

SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/tree-il/low-to-tree-fn.sml
ViewVC logotype

Diff of /branches/charisee/src/compiler/tree-il/low-to-tree-fn.sml

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

revision 2623, Thu May 15 20:01:40 2014 UTC revision 2624, Fri May 16 17:53:41 2014 UTC
# Line 16  Line 16 
16    (* tests for whether various expression forms can appear inline *)    (* tests for whether various expression forms can appear inline *)
17      val inlineCons : int -> bool        (* can n'th-order tensor construction appear inline *)      val inlineCons : int -> bool        (* can n'th-order tensor construction appear inline *)
18      val inlineMatrixExp : bool          (* can matrix-valued expressions appear inline? *)      val inlineMatrixExp : bool          (* can matrix-valued expressions appear inline? *)
19        val isHwVec :  int -> bool
20        val isVecTy :  int -> bool
21     val getPieces :   int -> int list
22    
23    end) : sig    end) : sig
24    
# Line 257  Line 260 
260                  end                  end
261    
262    
263              val isHwVec=Target.isHwVec
264              val getPieces= Target.getPieces
265              val isVecTy= Target.isVecTy
266    
267             fun foundVec(lhs,rator,n,[a,b])= let
268    
269                fun Done _ =[T.S_Assign([lhs],T.E_Op(rator n,[a,b]))]
270                    (* ExpOp.creatLd(lhs,rator,n,[n],[a,b]) (*Done*)*)
271    
272                fun fillVec vn =(case (isVecTy vn)
273                    of true => ExpOp.creatFl(lhs,rator,n,vn,[a,b])
274                    | false => fillVec(vn+1)
275                    (*end case*))
276    
277                fun splitV _ =let
278                    val n'=getPieces n
279                    in
280                        ExpOp.creatLd(lhs,rator,n,n',[a,b])
281                    end
282    
283                in (case (isVecTy n)
284                    of true=> Done 1
285                    | false=>(case isHwVec n
286                        of true=> fillVec (n+1)
287                        | false=>splitV 1
288                        (*end case*))
289                    (*end case*))
290                end
291               | foundVec _ =raise Fail"Not the right number of args"
292    
293    
294    
295    
296          (* force an argument to be stored in something that will be mapped to an l-value *)          (* force an argument to be stored in something that will be mapped to an l-value *)
297            fun bindVar (env, x) = (case useVar env x            fun bindVar (env, x) = (case useVar env x
298                   of x' as T.E_State _ => (env, x', [])                   of x' as T.E_State _ => (env, x', [])
# Line 295  Line 331 
331                      (env, [T.S_LoadNrrd(t, ty, nrrd)])                      (env, [T.S_LoadNrrd(t, ty, nrrd)])
332                    end*)                    end*)
333                | IL.OP(rator,args) =>let                | IL.OP(rator,args) =>let
334                        (*Target.isHwVec*)
335                  val args'=List.map (useVar env) args                  val args'=List.map (useVar env) args
336                  val (env, t) = doLHS()                  val (env, t) = doLHS()
337                  in (case rator                  in (case rator
338                      of SrcOp.prodVec n   => (env, ExpOp.creatLdSt(t,DstOp.prodVec,n,args'))                       of SrcOp.addVec n   => (env, foundVec(t,DstOp.addVec,n,args'))
339                       | SrcOp.subVec n    => (env, ExpOp.creatLdSt(t,DstOp.subVec,n,args'))                       | SrcOp.subVec n    => (env, foundVec(t,DstOp.subVec,n,args'))
340                       | SrcOp.prodScaV n  => (env, ExpOp.creatLdSt(t,DstOp.prodScaV ,n,args'))                       | SrcOp.prodScaV n  => (env, foundVec(t,DstOp.prodScaV ,n,args'))
341                       | SrcOp.sumVec n =>(env, ExpOp.creatLdSt(t,DstOp.sumVec ,n,args'))                       | SrcOp.prodVec n   => (env, foundVec(t,DstOp.prodVec,n,args'))
342                         | SrcOp.sumVec n    => (env, foundVec(t,DstOp.sumVec ,n,args'))
343                         | SrcOp.C c         => (env,[T.S_Assign([t],T.E_Lit(Literal.Int 0))])
344                       | _ => let                       | _ => let
345                          val Trator = ExpOp.expandOp rator                          val Trator = ExpOp.expandOp rator
346                          val exp = T.E_Op(Trator,  args')                          val exp = T.E_Op(Trator,  args')

Legend:
Removed from v.2623  
changed lines
  Added in v.2624

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