let doInstr stmt instr state =
    !Db.progress ();
    P.debug "doInstr : %a" !Ast_printer.d_instr instr;
    match instr with
    | Set (lv, exp, _) ->
        let new_state = process_asgn current_pdg state stmt lv exp in
        Dataflow.Done new_state
    | Call (lvaloption,funcexp,argl,_) ->
        !Db.progress ();
        let new_state = process_call current_pdg state stmt
                                     lvaloption funcexp argl in
        Dataflow.Done new_state
    | Code_annot (annot, _) ->
        process_code_annot current_pdg stmt annot; Dataflow.Default
    | Skip _ -> process_skip current_pdg stmt ; Dataflow.Default
    | Asm  _ -> P.fatal ~current:true "inline assembly instruction"