  One way to write fast programs is to explore the potential parallelism and
take advantage of the high number of cores available in microprocessors. This
can be achieved by manually specifying which code executes on which thread, by
using compiler parallelization hints (such as OpenMP or Cilk), or by using a
parallel programming language (such as X10, Chapel or Aeminium. Regardless of
the approach, all of these programs are compiled to an intermediate lower-level
language that is sequential, thus preventing the backend compiler from
optimizing the program and observing its parallel nature. This paper presents
MISO, an intermediate language that expresses the parallel nature of programs
and that can be targeted by front-end compilers. The language defines 'cells',
which are composed by a state and a transition function from one state to the
next. This language can express both sequential and parallel programs, and
provides information for a backend- compiler to generate efficient parallel
programs. Moreover, MISO can be used to automatically add redundancy to a
program, by replicating the state or by taking advantage of different processor
cores, in order to provide fault tolerance for programs running on unreliable
hardware.
