(* low-ir.sml * * This code is part of the Diderot Project (http://diderot-language.cs.uchicago.edu) * * COPYRIGHT (c) 2015 The University of Chicago * All rights reserved. * * Lower-level version of the Diderot CFG IR * * Note: this file is generated from gen/ir/low-ir.spec and gen/ir/low-ir.in. *) structure LowOps = struct (* required helper functions for types *) type ty = LowTypes.ty val samety = LowTypes.same val hashty = LowTypes.hash val tyToString = LowTypes.toString (* required helper functions for type lists *) type tys = ty list fun sametys (tys1, tys2) = ListPair.allEq samety (tys1, tys2) fun hashtys tys = List.foldl (fn (ty, s) => hashty ty + 0w3 * s) 0w0 tys fun tysToString tys = String.concat["[", String.concatWith "," (List.map tyToString tys), "]" ] (* required helper functions for the int type *) fun sameint (i1 : int, i2) = (i1 = i2) fun hashint i = Word.fromInt i fun intToString i = Int.toString i (* required helper functions for the string type *) fun samestring (s1 : string, s2) = (s1 = s2) val hashstring = HashString.hashString fun stringToString s = String.concat["\"", s, "\""] (* required helper functions for the mask type *) type mask = bool list val samemask : (mask * mask -> bool) = (op =) fun hashmask m = List.foldl (fn (false, w) => w+w | (true, w) => w+w+0w1) (Word.fromInt(List.length m)) m fun maskToString m = String.concat(List.map (fn true => "_" | false => ":") m) (* required helper functions for the index control type type *) type idxctl = IndexCtl.ctl val sameidxctl = IndexCtl.same val hashidxctl = IndexCtl.hash val idxctlToString = IndexCtl.toString @BODY@ end structure LowIR = SSAFn( val irName = "low-ir" structure Ty = LowTypes structure Op = LowOps) structure LowCensus = CensusFn(LowIR)