let pd_b_but_not_a infos stmt_a stmt_b =
if stmt_a.sid = stmt_b.sid then S.empty
else begin
let a_to_ret, postdom_a = get_postdoms infos ~without:true stmt_a in
let b_to_ret, postdom_b = get_postdoms infos ~without:false stmt_b in
let res = match a_to_ret, b_to_ret with
| true, true | false, false -> S.diff postdom_b postdom_a
| true, false -> postdom_b
| false, true -> (* no path [a, ret] but path [b, ret]
* possible when a there is a jump, because then we have
* either (A=G, B=S) or (A=S, B=L) *)
S.empty (* because we don't want b postdoms to depend on the jump *)
in
Macros.debug 2 "pd_b_but_not_a for a=%d b=%d = %a"
stmt_a.sid stmt_b.sid S.pretty res;
res
end