let elim_dead_code (fd : fundec) : fundec =
(* fundec -> fundec *)
usedDefsSet := IS.empty;
IH.clear defUseSetHash;
IH.clear sidUseSetHash;
removedCount := 0;
time "reaching definitions" RD.computeRDs fd;
if !debug then (Kernel.debug "DCE: collecting used definitions\n");
ignore(time "ud-collector"
(visitCilFunction (new usedDefsCollectorClass :> cilVisitor)) fd);
if !debug then (Kernel.debug "DCE: eliminating useless instructions\n");
let fd' = time "useless-elim" (visitCilFunction (new uselessInstrElim)) fd in
fd'