let eliminate_temps f =
  ignore(visitCilFunction (new removeBrackets) f);
  Cfg.clearCFGinfo f;
  ignore(Cfg.cfgFun f);
  UD.ignoreSizeof := false;
  RD.computeRDs f;
  IH.clear iioh;
  IH.clear incdecHash;
  IH.clear idDefHash;
  let etec = new expLvTmpElimClass f in
  let f' = visitCilFunction (etec :> cilVisitor) f in
  let idtec = new incdecTempElimClass f' in
  let f' = visitCilFunction (idtec :> cilVisitor) f' in
  let ctec = new callTempElimClass f' in
  let f' = visitCilFunction (ctec :> cilVisitor) f' in
  visitCilFunction (new unusedRemoverClass) f'