@ -16,7 +16,6 @@ type inst =
| Alloc of { reg : Var . t ; num : Exp . t ; len : Exp . t ; loc : Loc . t }
| Alloc of { reg : Var . t ; num : Exp . t ; len : Exp . t ; loc : Loc . t }
| Free of { ptr : Exp . t ; loc : Loc . t }
| Free of { ptr : Exp . t ; loc : Loc . t }
| Malloc of { reg : Var . t ; siz : Exp . t ; loc : Loc . t }
| Malloc of { reg : Var . t ; siz : Exp . t ; loc : Loc . t }
| Strlen of { reg : Var . t ; ptr : Exp . t ; loc : Loc . t }
| Nondet of { reg : Var . t option ; msg : string ; loc : Loc . t }
| Nondet of { reg : Var . t option ; msg : string ; loc : Loc . t }
[ @@ deriving sexp ]
[ @@ deriving sexp ]
@ -109,8 +108,6 @@ let pp_inst fs inst =
| Free { ptr ; loc } -> pf " @[<2>free %a;@] \t %a " Exp . pp ptr Loc . pp loc
| Free { ptr ; loc } -> pf " @[<2>free %a;@] \t %a " Exp . pp ptr Loc . pp loc
| Malloc { reg ; siz ; loc } ->
| Malloc { reg ; siz ; loc } ->
pf " @[<2>malloc %a@ %a;@] \t %a " Var . pp reg Exp . pp siz Loc . pp loc
pf " @[<2>malloc %a@ %a;@] \t %a " Var . pp reg Exp . pp siz Loc . pp loc
| Strlen { reg ; ptr ; loc } ->
pf " @[<2>strlen %a@ %a;@] \t %a " Var . pp reg Exp . pp ptr Loc . pp loc
| Nondet { reg ; msg ; loc } ->
| Nondet { reg ; msg ; loc } ->
pf " @[<2>nondet %a \" %s \" ;@] \t %a " ( Option . pp " %a " Var . pp ) reg msg
pf " @[<2>nondet %a \" %s \" ;@] \t %a " ( Option . pp " %a " Var . pp ) reg msg
Loc . pp loc
Loc . pp loc
@ -195,7 +192,6 @@ module Inst = struct
let alloc ~ reg ~ num ~ len ~ loc = Alloc { reg ; num ; len ; loc }
let alloc ~ reg ~ num ~ len ~ loc = Alloc { reg ; num ; len ; loc }
let free ~ ptr ~ loc = Free { ptr ; loc }
let free ~ ptr ~ loc = Free { ptr ; loc }
let malloc ~ reg ~ siz ~ loc = Malloc { reg ; siz ; loc }
let malloc ~ reg ~ siz ~ loc = Malloc { reg ; siz ; loc }
let strlen ~ reg ~ ptr ~ loc = Strlen { reg ; ptr ; loc }
let nondet ~ reg ~ msg ~ loc = Nondet { reg ; msg ; loc }
let nondet ~ reg ~ msg ~ loc = Nondet { reg ; msg ; loc }
let loc = function
let loc = function
@ -207,17 +203,12 @@ module Inst = struct
| Alloc { loc }
| Alloc { loc }
| Free { loc }
| Free { loc }
| Malloc { loc }
| Malloc { loc }
| Strlen { loc }
| Nondet { loc } ->
| Nondet { loc } ->
loc
loc
let union_locals inst vs =
let union_locals inst vs =
match inst with
match inst with
| Load { reg }
| Load { reg } | Alloc { reg } | Malloc { reg } | Nondet { reg = Some reg } ->
| Alloc { reg }
| Malloc { reg }
| Strlen { reg }
| Nondet { reg = Some reg } ->
Set . add vs reg
Set . add vs reg
| Store _ | Memcpy _ | Memmov _ | Memset _ | Free _ | Nondet { reg = None }
| Store _ | Memcpy _ | Memmov _ | Memset _ | Free _ | Nondet { reg = None }
->
->