Finch Logic (High-Level IR)
Finch Logic is an internal high-level intermediate representation (IR) that allows us to fuse and optimize successive calls to array operations such as map
, reduce
, and broadcast
. It is reminiscent to database query notation, representing the a sequence of tensor expressions bound to variables. Values in the program are tensors, with named indices. The order of indices is semantically meaningful.
The nodes are as follows:
Finch.FinchLogic.immediate
— Constantimmediate(val)
Logical AST expression for the literal value val
.
Finch.FinchLogic.deferred
— Constantdeferred(ex, [type])
Logical AST expression for an expression ex
of type type
, yet to be evaluated.
Finch.FinchLogic.field
— Constantfield(name)
Logical AST expression for an field named name
.
Finch.FinchLogic.alias
— Constantalias(name)
Logical AST expression for an alias named name
.
Finch.FinchLogic.table
— Constanttable(tns, idxs...)
Logical AST expression for a tensor object tns
, indexed by fields idxs...
.
Finch.FinchLogic.mapjoin
— Constantmapjoin(op, args...)
Logical AST expression for mapping the function op
across args...
. The order of fields in the mapjoin is unique(vcat(map(getfields, args)...))
Finch.FinchLogic.aggregate
— Constantaggregate(op, init, arg, idxs...)
Logical AST statement that reduces arg
using op
, starting with init
. idxs
are the dimensions to reduce. May happen in any order.
Finch.FinchLogic.reorder
— Constantreorder(arg, idxs...)
Logical AST statement that reorders the dimensions of arg
to be idxs...
. Dimensions known to be length 1 may be dropped. Dimensions that do not exist in arg
may be added.
Finch.FinchLogic.relabel
— Constantrelabel(arg, idxs...)
Logical AST statement that relabels the dimensions of arg
to be idxs...
Finch.FinchLogic.reformat
— Constantreformat(tns, arg)
Logical AST statement that reformats arg
into the tensor tns
.
Finch.FinchLogic.subquery
— Constantsubquery(lhs, arg)
Logical AST statement that evaluates arg
, binding the result to lhs
, and returns arg
.
Finch.FinchLogic.query
— Constantquery(lhs, rhs)
Logical AST statement that evaluates rhs
, binding the result to lhs
.
Finch.FinchLogic.produces
— Constantproduces(args...)
Logical AST statement that returns args...
from the current plan. Halts execution of the program.
Finch.FinchLogic.plan
— Constantplan(bodies...)
Logical AST statement that executes a sequence of statements bodies...
.
Finch Logic Internals
Finch.FinchLogic.LogicNode
— TypeLogicNode
A Finch Logic IR node. Finch uses a variant of Concrete Field Notation as an intermediate representation.
The LogicNode struct represents many different Finch IR nodes. The nodes are differentiated by a FinchLogic.LogicNodeKind
enum.
Finch.FinchLogic.logic_leaf
— Functionlogic_leaf(x)
Return a terminal finch node wrapper around x
. A convenience function to determine whether x
should be understood by default as a immediate or value.
Finch.FinchLogic.isimmediate
— Functionisimmediate(node)
Returns true if the node is a finch immediate
Finch.FinchLogic.isdeferred
— Functionisdeferred(node)
Returns true if the node is a finch immediate
Finch.FinchLogic.isalias
— Functionisalias(node)
Returns true if the node is a finch alias
Finch.FinchLogic.isfield
— Functionisfield(node)
Returns true if the node is a finch field