Lifting C Semantics for Dataflow Optimization