  We propose an IR for quantum computing that directly exposes quantum and
classical data dependencies for the purpose of optimization. Our IR consists of
two dialects, one input dialect and one that is specifically tailored to enable
quantum-classical co-optimization. While the first employs a perhaps more
intuitive memory-semantics (quantum operations act as side-effects), the latter
uses value-semantics (operations consume and produce states). Crucially, this
encodes the dataflow directly in the IR, allowing for a host of optimizations
that leverage dataflow analysis. We discuss how to map existing quantum
programming languages to the input dialect and how to lower the resulting IR to
the optimization dialect. We present a prototype implementation based on MLIR
that includes several quantum-specific optimization passes. Our benchmarks show
that significant improvements in resource requirements are possible even
through static optimization. In contrast to circuit optimization at runtime,
this is achieved while incurring only a small constant overhead in compilation
time, making this a compelling approach for quantum program optimization at
application scale.
