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

SCM Repository

[diderot] Annotation of /branches/vis15/src/compiler/low-to-tree/low-to-tree.sml
ViewVC logotype

Annotation of /branches/vis15/src/compiler/low-to-tree/low-to-tree.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3829 - (view) (download)

1 : jhr 3828 (* low-to-tree.sml
2 :     *
3 :     * This code is part of the Diderot Project (http://diderot-language.cs.uchicago.edu)
4 :     *
5 :     * COPYRIGHT (c) 2016 The University of Chicago
6 :     * All rights reserved.
7 :     *)
8 :    
9 :     structure LowToTree : sig
10 :    
11 :     type vector_layout = int -> TreeTypes.t
12 :    
13 :     val translate : LowIR.program * vector_layout -> TreeIR.program
14 :    
15 :     end = struct
16 :    
17 :     structure SrcIR = LowIR
18 :     structure DstIR = TreeIR
19 :    
20 : jhr 3829 fun cvtScalarTy SrcTy.BoolTy = DstTy.BoolTy
21 :     | cvtScalarTy SrcTy.IntTy = DstTy.IntTy
22 :     | cvtScalarTy (SrcTy.TensorTy[]) = DstTy.RealTy
23 :     | cvtScalarTy ty = raise Fail(concat["cvtScalarTy(", SrcTy.toString ty, ")"])
24 : jhr 3828
25 : jhr 3829 fun trOp (lhs, rator, args) = let
26 :     fun bindOp rator = bind (lhs, DstIR.E_Op(rator, List.map ?? args))
27 :     fun binVOp rator = let
28 :     (* convert a list of LowIR variables, each of which are mapped
29 :     * to lists of of vector expressions, to a list of list of expressions
30 :     *)
31 :     val argLists = ??
32 :     val exps = ListPair.map
33 :     (fn (w, args) => DstIR.E_Op(rator w, args))
34 :     (argLists, pieces)
35 :     in
36 :     ??
37 :     end
38 :     in
39 :     case rator
40 :     of SrcOp.IAdd => bindOp DstOp.IAdd
41 :     | SrcOp.ISub => bindOp DstOp.ISub
42 :     | SrcOp.IMul => bindOp DstOp.IMul
43 :     | SrcOp.IDiv => bindOp DstOp.IDiv
44 :     | SrcOp.IMod => bindOp DstOp.IMod
45 :     | SrcOp.INeg => bindOp DstOp.INeg
46 :     | SrcOp.RAdd => bindOp DstOp.RAdd
47 :     | SrcOp.RSub => bindOp DstOp.RSub
48 :     | SrcOp.RMul => bindOp DstOp.RMul
49 :     | SrcOp.RDiv => bindOp DstOp.RDiv
50 :     | SrcOp.RNeg => bindOp DstOp.RNeg
51 :     | SrcOp.LT ty => bindOp (DstOp.LT (cvtScalarTy ty))
52 :     | SrcOp.LTE ty => bindOp (DstOp.LTE (cvtScalarTy ty))
53 :     | SrcOp.EQ ty => bindOp (DstOp.EQ (cvtScalarTy ty))
54 :     | SrcOp.NEQ ty => bindOp (DstOp.NEQ (cvtScalarTy ty))
55 :     | SrcOp.GT ty => bindOp (DstOp.GT (cvtScalarTy ty))
56 :     | SrcOp.GTE ty => bindOp (DstOp.GTE (cvtScalarTy ty))
57 :     | SrcOp.Not => bindOp DstOp.Not
58 :     | SrcOp.Abs ty => bindOp (DstOp.Abs (cvtScalarTy ty))
59 :     | SrcOp.Max ty => bindOp (DstOp.Max (cvtScalarTy ty))
60 :     | SrcOp.Min ty => bindOp (DstOp.Min (cvtScalarTy ty))
61 :     | SrcOp.Clamp(SrcTy.TensorTy[n]) =>
62 :     | SrcOp.Clamp ty => bindOp (DstOp.Clamp (cvtScalarTy ty))
63 :     | SrcOp.Lerp(SrcTy.TensorTy[n]) =>
64 :     | SrcOp.Lerp ty => bindOp (DstOp.Lerp (cvtScalarTy ty))
65 :     | SrcOp.VAdd _ => bindVOp DstOp.VAdd
66 :     | SrcOp.VSub _ => bindVOp DstOp.VSub
67 :     | SrcOp.VScale _ => bindVOp DstOp.VScale
68 :     | SrcOp.VMul _ => bindVOp DstOp.VMul
69 :     | SrcOp.VNeg _ => bindVOp DstOp.VNeg
70 :     | SrcOp.VSum _ => bindVOp DstOp.VSum
71 :     | SrcOp.VProj of int * int
72 :     | SrcOp.TensorIndex of ty * shape
73 :     | SrcOp.ProjectLast of ty * shape
74 :     | SrcOp.EigenVecs2x2
75 :     | SrcOp.EigenVecs3x3
76 :     | SrcOp.EigenVals2x2
77 :     | SrcOp.EigenVals3x3
78 :     | SrcOp.Zero ty =>
79 :     | SrcOp.Select of ty * int
80 :     | SrcOp.Subscript ty =>
81 :     | SrcOp.MkDynamic of ty * int
82 :     | SrcOp.Append ty =>
83 :     | SrcOp.Prepend ty =>
84 :     | SrcOp.Concat ty =>
85 :     | SrcOp.Range
86 :     | SrcOp.Length ty =>
87 :     | SrcOp.SphereQuery of ty * ty
88 :     | SrcOp.Sqrt => bindOp DstOp.Sqrt
89 :     | SrcOp.Cos => bindOp DstOp.Cos
90 :     | SrcOp.ArcCos => bindOp DstOp.ArcCos
91 :     | SrcOp.Sin => bindOp DstOp.Sin
92 :     | SrcOp.ArcSin => bindOp DstOp.ArcSin
93 :     | SrcOp.Tan => bindOp DstOp.Tan
94 :     | SrcOp.ArcTan => bindOp DstOp.ArcTan
95 :     | SrcOp.Ceiling 1 => bindOp (DstOp.Ceiling 1)
96 :     | SrcOp.Ceiling of int
97 :     | SrcOp.Floor 1 => bindOp (DstOp.Floor 1)
98 :     | SrcOp.Floor of int
99 :     | SrcOp.Round 1 => bindOp (DstOp.Floor 1)
100 :     | SrcOp.Round of int
101 :     | SrcOp.Trunc 1 => bindOp (DstOp.Trunc 1)
102 :     | SrcOp.Trunc of int
103 :     | SrcOp.IntToReal => bindOp SrcOp.IntToReal
104 :     | SrcOp.RealToInt of int
105 :     | SrcOp.R_All ty =>
106 :     | SrcOp.R_Exists ty =>
107 :     | SrcOp.R_Max ty =>
108 :     | SrcOp.R_Min ty =>
109 :     | SrcOp.R_Sum ty =>
110 :     | SrcOp.R_Product ty =>
111 :     | SrcOp.R_Mean ty =>
112 :     | SrcOp.R_Variance ty =>
113 :     | SrcOp.Transform of ImageInfo.info
114 :     | SrcOp.Translate of ImageInfo.info
115 :     | SrcOp.ControlIndex of ImageInfo.info * idxctl * int
116 :     | SrcOp.LoadVoxel of ImageInfo.info
117 :     | SrcOp.Inside of ImageInfo.info * int
118 :     | SrcOp.ImageDim of ImageInfo.info * int
119 :     | SrcOp.LoadSeq of ty * string
120 :     | SrcOp.LoadImage of ty * string
121 :     | SrcOp.Print of tys
122 :     | SrcOp.MathFn f => bindOp (DstOp.MathFn f)
123 :     | _ => (* error *)
124 :     (* end case *)
125 :     end
126 :    
127 : jhr 3828 end

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