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

SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/mid-to-low/gen-ein.sml
ViewVC logotype

Diff of /branches/charisee/src/compiler/mid-to-low/gen-ein.sml

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

revision 2604, Fri Apr 25 18:23:44 2014 UTC revision 2605, Wed Apr 30 01:46:09 2014 UTC
# Line 80  Line 80 
80      fun getMapp _ = let      fun getMapp _ = let
81          val ref mappC=jx          val ref mappC=jx
82          in mappC end          in mappC end
83      val mm= gHelper.printIndexXX(0,ap)  
84      fun gen body=(case body      fun gen body=(case body
85          of  E.Field _ =>raise Fail(concat["Invalid Field here "]   )          of  E.Field _ =>raise Fail(concat["Invalid Field here "]   )
86          | E.Partial _ =>raise Fail(concat["Invalid FieldPartial here "]   )          | E.Partial _ =>raise Fail(concat["Invalid FieldPartial here "]   )
# Line 167  Line 167 
167    
168          | E.Prod e => let          | E.Prod e => let
169              (*checkO removes 1 from list, and returns 0  if there is one*)              (*checkO removes 1 from list, and returns 0  if there is one*)
170              fun checkO ([],[],[])=let val (vA,A)=gHelper.aaV(DstOp.C 1,[],"Const",DstTy.TensorTy([])) in ([vA],A) end              fun checkO ([],[],[])=let
171                        val (vA,A)=gHelper.aaV(DstOp.C 1,[],"Const",DstTy.TensorTy([]))
172                        in ([vA],A) end
173                  | checkO(ids,code,[])=(ids,code)                  | checkO(ids,code,[])=(ids,code)
174                  | checkO(ids,code, e1::es)=let                  | checkO(ids,code, e1::es)=let
175                      val (a,b)=gen e1                      val (a,b)=gen e1
# Line 200  Line 202 
202              end)              end)
203    
204          | E.Sum(sumx, e)=> let          | E.Sum(sumx, e)=> let
205              val m=print "\n general sum \n"  
206              fun sumloop(mapsum)= (jx:=mapsum; let              fun sumloop(mapsum)= (jx:=mapsum; let
207    
208                  val(vA,A)=gen e                  val(vA,A)=gen e
209                  val sA=gHelper.skeleton A                  val sA=gHelper.skeleton A
210                  in (case sA                  in (case sA
211                      of 0 =>([],[])                      (*of 0 =>([],[])*)
212                      | _=>([vA],A)                      of  _=>([vA],A)
213                      (*end case*))                      (*end case*))
214    
215                  end )                  end )
# Line 245  Line 247 
247  (*Below functions are used to check for vectorization*)  (*Below functions are used to check for vectorization*)
248  (*Check Addition expression *)  (*Check Addition expression *)
249  fun handleSimpleAdd(E.Add body,index,origargs, args)=let  fun handleSimpleAdd(E.Add body,index,origargs, args)=let
250    
251      val n=length(index)-1      val n=length(index)-1
252      fun add (lft,[])=let      fun add (lft,[])=let
253              val index'=List.take(index,n)              val index'=List.take(index,n)
# Line 296  Line 299 
299          of E.V v =>          of E.V v =>
300              if(v=n) (*can use vectorization*)              if(v=n) (*can use vectorization*)
301              then let              then let
302                  val (vA,A)= gHelper.mkC(0)                  val (vA,A)= gHelper.mkC(~1)
303    
304                  val index'=List.take(index,n)                  val index'=List.take(index,n)
305                  val ix'=List.take(ix,n)                  val ix'=List.take(ix,n)
306                   val m=List.nth(index,n)                   val m=List.nth(index,n)
307                  val g=print "IN HANDLE NEG-- PUPPY\n"  
                 val ggg=print(Int.toString(m))  
308                  val (vB,B)=prodIter(index,index',gHelper.mkNegV,((vA,id,ix'),[],m,args))                  val (vB,B)=prodIter(index,index',gHelper.mkNegV,((vA,id,ix'),[],m,args))
309                  in (vB,A@B)                  in (vB,A@B)
310                  end                  end
# Line 350  Line 352 
352              (*end case*)) end              (*end case*)) end
353          else if (ns=1) then let          else if (ns=1) then let
354                  val [(sx1,lb,ub)]=sx                  val [(sx1,lb,ub)]=sx
                 val rr=print "\n Summation 1"  
355    
356                  in                  in
357                      if(vi=vj andalso vi=sx1)                      if(vi=vj andalso vi=sx1)
358                      then                      then
359                          (print "\n AAA";prodIter(index,index,gHelper.mkprodSumVec,([(id1,list1'),(id2,list2')],[],ub,args))) (*v,v*)                          (prodIter(index,index,gHelper.mkprodSumVec,([(id1,list1'),(id2,list2')],[],ub,args))) (*v,v*)
360                          else (print "\n BBB";                          else (
361                                  prodIter(index,index,gHelper.sum,(orig,sx,args))) (*s,s *)                                  prodIter(index,index,gHelper.sum,(orig,sx,args))) (*s,s *)
362                  end                  end
363          else if (ns=2)          else if (ns=2)
# Line 385  Line 386 
386      in if(j=n andalso nsx=0)      in if(j=n andalso nsx=0)
387          then  let          then  let
388                  val index'=List.take(index,n)     val list2'=List.take(list2,n2)                  val index'=List.take(index,n)     val list2'=List.take(list2,n2)
389                  val q=print(String.concat["Puppy-Make Vector index",Int.toString(m)])  
390              in prodIter(index,index',gHelper.mkprodScaV,([(id1,[]),(id2,list2')],[],m, args)) end              in prodIter(index,index',gHelper.mkprodScaV,([(id1,[]),(id2,list2')],[],m, args)) end
391          else prodIter(index,index,generalfn,(body,[],origargs, args))          else prodIter(index,index,generalfn,(body,[],origargs, args))
392      end      end
# Line 398  Line 399 
399      val  sx= ref[]      val  sx= ref[]
400      val n=length index      val n=length index
401      val args=(a,params)      val args=(a,params)
402     (*Potential for Vectorization here *)  
403    
404     fun gen b=(case b     fun gen b=(case b
405          of  E.Field _ =>raise Fail(concat["Invalid Field here "]   )          of  E.Field _ =>raise Fail(concat["Invalid Field here "]   )
406          | E.Partial _ =>raise Fail(concat["Invalid Field here "]   )          | E.Partial _ =>raise Fail(concat["Invalid Field here "]   )
407          | E.Apply _ =>raise Fail(concat["Invalid Field here "]   )          | E.Apply _ =>raise Fail(concat["Invalid Field here "]   )
408          | E.Probe _ =>raise Fail(concat["Invalid Field here "]   )          | E.Probe _ =>raise Fail(concat["Invalid Field here "]   )
409          | E.Conv _ =>raise Fail(concat["Invalid Field here "]   )          | E.Conv _ =>raise Fail(concat["Invalid Field here "]   )
   
         (*| E.Const _=>[]*)  
   
410          | E.Neg(E.Tensor(id,ix))=> handleNeg(body,index,id, ix,origargs, args)          | E.Neg(E.Tensor(id,ix))=> handleNeg(body,index,id, ix,origargs, args)
411          | E.Add _ => handleSimpleAdd(body,index,origargs,  args)          | E.Add _ =>(case !sx
412          | E.Sub(E.Tensor(id1, ix1), E.Tensor(id2, ix2)) =>              of []   => handleSimpleAdd(body,index,origargs,  args)
413              handleSimpleOp([(id1,ix1),(id2,ix2)],index,gHelper.mksubVec,gHelper.mksubSca,args)              | _     => prodIter(index,index,generalfn,(body,[],origargs, args))
414                (*end case*))
415    
416            | E.Sub(E.Tensor(id1, ix1), E.Tensor(id2, ix2)) =>(case !sx
417                of []   => handleSimpleOp([(id1,ix1),(id2,ix2)],index,gHelper.mksubVec,gHelper.mksubSca,args)
418                | _     => prodIter(index,index,generalfn,(body,[],origargs, args))
419                (*end case*))
420          | E.Prod[E.Tensor(id1,[]), E.Tensor(id2, [])]=>          | E.Prod[E.Tensor(id1,[]), E.Tensor(id2, [])]=>
421                  gHelper.mkprodSca(empty,([(id1,[]),(id2,[])],[],args))                  gHelper.mkprodSca(empty,([(id1,[]),(id2,[])],[],args))
422          | E.Prod[E.Tensor(id1, []), E.Tensor(id2, ix2)] =>let          | E.Prod[E.Tensor(id1, []), E.Tensor(id2, ix2)] =>let
423                  val ref x=sx                  val ref x=sx
424                  in handleScVProd(body,(id1,id2,ix2),index,x,origargs, args) end              in
425                    handleScVProd(body,(id1,id2,ix2),index,x,origargs, args)
426                end
427          | E.Prod[E.Tensor(id1, ix1), E.Tensor(id2, [])] =>let          | E.Prod[E.Tensor(id1, ix1), E.Tensor(id2, [])] =>let
428                  val ref x=sx                  val ref x=sx
429                  in handleScVProd(body,(id2,id1,ix1),index,x, origargs, args) end              in
430         | E.Prod[E.Tensor(id1, ix1), E.Tensor(id2, ix2)] =>                  handleScVProd(body,(id2,id1,ix1),index,x, origargs, args)
                 let  
             val ref x=sx  
             in   handleProd([(id1,ix1),(id2,ix2)],index,x,origargs, args)  
   
431              end              end
432          (*| E.Div(E.Tensor _,E.Tensor _ )=>[]*)         | E.Prod[E.Tensor(id1, ix1), E.Tensor(id2, ix2)] =>
433                handleProd([(id1,ix1),(id2,ix2)],index,!sx,origargs, args)
434    
435          | E.Sum(ss,E.Prod(E.Img(Vid,_,_)::E.Krn(id,del,pos)::es))=>let          | E.Sum(ss,E.Prod(E.Img(Vid,_,_)::E.Krn(id,del,pos)::es))=>let
436              val ref x=sx              val ref x=sx
             val m=print "\n match img"  
   
437              in              in
438                  if(length x=0) then let                  if(length x=0) then let
439                      val harg=List.nth(origargs,id)                      val harg=List.nth(origargs,id)
# Line 444  Line 446 
446    
447          | E.Sum(sx', e)=> (let          | E.Sum(sx', e)=> (let
448              val ref x=sx              val ref x=sx
449              val m=print "\n Found Summation"  
450              in   sx:=x@sx' end ;gen e)              in   sx:=x@sx' end ;gen e)
451          | _ => prodIter(index,index,generalfn,(body,[],origargs, args))          | _ => prodIter(index,index,generalfn,(body,[],origargs, args))
452          (*end case*))          (*end case*))
# Line 458  Line 460 
460          | E.Sub _=> generalfn(empty,(b,[],origargs, args))          | E.Sub _=> generalfn(empty,(b,[],origargs, args))
461          | E.Div _=> generalfn(empty,(b,[],origargs, args))          | E.Div _=> generalfn(empty,(b,[],origargs, args))
462          | E.Prod [E.Tensor(_,[]),E.Tensor(_,[])] => generalfn(empty,(b,[],origargs, args))          | E.Prod [E.Tensor(_,[]),E.Tensor(_,[])] => generalfn(empty,(b,[],origargs, args))
463          | _=> (print "\n goes to gen ";gen b)          | _=> gen b
464    
465          (*end case*))          (*end case*))
466    
467  in (case n of 0 =>(print "\n in single";single body)  | _=> gen body) end  in (case n of 0 =>single body  | _=> gen body) end
468    
469  end (* local *)  end (* local *)
470    

Legend:
Removed from v.2604  
changed lines
  Added in v.2605

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