The CIL compiler for core SML'97 compiles whole programs using the CIL typed intermediate
language with flow labels and intersection and union types.
Flow labels embed flow information in the types and intersection
and union types support more precise polyvariant type and flow
information, without the use of type-level abstraction or
quantification.
The CIL intermediate representation duplicates portions of the program
where intersection types are introduced and union types are eliminated.
This duplication makes it easier to represent type information and to
introduce multiple representation conventions. This paper presents
empirical data on the compile-time space costs of using CIL. In
particular, the data shows that the duplicating nature of CIL has
acceptable compile-time space performance in practice.