let computeRDs fdec =
try
if String.compare fdec.svar.vname (!debug_fn) = 0 then
(debug := true;
Kernel.debug "%s =\n%a\n" (!debug_fn) d_block fdec.sbody);
let bdy = fdec.sbody in
let slst = bdy.bstmts in
ReachingDef.StmtStartData.clear ();
IH.clear ReachingDef.defIdStmtHash;
IH.clear rhsHtbl;
Hashtbl.clear iRDsHtbl;
ReachingDef.nextDefId := 0;
let fst_stm = List.hd slst in
let fst_iosh = IH.create 32 in
UD.onlyNoOffsetsAreDefs := false;
ReachingDef.StmtStartData.add fst_stm ((), 0, fst_iosh);
time "liveness" L.computeLiveness fdec;
ignore(ReachingDef.computeFirstPredecessor fst_stm ((), 0, fst_iosh));
if !debug then Kernel.debug "computeRDs: fst_stm.sid=%d\n" fst_stm.sid ;
RD.compute [fst_stm];
if String.compare fdec.svar.vname (!debug_fn) = 0 then
debug := false
with Failure "hd" -> if String.compare fdec.svar.vname (!debug_fn) = 0 then
debug := false