let ae_lval_to_exp lvh _sid lv _fd nofrm =
  match lv, nofrm with
  | (Var vi, NoOffset), false ->
      (* If the var is not a temp, then don't replace *)
      if check_forms vi.vname forms then begin
        try
          let e = AELV.LvExpHash.find lvh lv in
          match e.enode with
          | Const(CStr _)
          | Const(CWStr _) -> None
          | _ -> begin
              ae_lval_to_exp_change := true;
              if !debug then Kernel.debug "ae: replacing %a with %a"
                d_lval lv d_exp e;
              Some e
          end
        with Not_found -> None
      end else None
  | _, true -> begin
     (* replace everything *)
      try
        let e = AELV.LvExpHash.find lvh lv in
        match e.enode with
        | Const(CStr _)
        | Const(CWStr _) -> None
        | _ -> begin
            ae_lval_to_exp_change := true;
            Kernel.debug "ae: replacing %a with %a"
              d_lval lv d_exp e;
            Some e
        end
      with Not_found -> None
  end
  | _, _ -> None