let rec iter_read_il f = function
ILstmtIf( t, n, m ) -> f n
| ILstmtSwitch( n, jump_table ) -> f n
| ILstmtGoto _ -> ()
| ILstmtReturn None -> ()
| ILstmtReturn (Some n) -> f n
| ILstmtAssign( n, t, e ) -> iter_read_expr f e
| ILstmtRead( n, t, lv, l ) -> iter_read_lvalue f lv
| ILstmtWrite( ILlvTemp _, _, _ ) -> assert false
| ILstmtWrite( lv, l, n ) -> iter_read_lvalue f lv; f n
| ILstmtInitialize( n, t, i ) -> f n
| ILstmtSequence l -> List.iter (iter_read_il f) l
| ILstmtParallel l -> List.iter (iter_read_il f) l