diff --git a/src/plugins/value/engine/transfer_stmt.ml b/src/plugins/value/engine/transfer_stmt.ml
index 5c4f2650e53a56bb1facd010747138d2c99ede81..62f331452508232f548cd84c0a09152779514a0b 100644
--- a/src/plugins/value/engine/transfer_stmt.ml
+++ b/src/plugins/value/engine/transfer_stmt.ml
@@ -90,8 +90,7 @@ let is_determinate kf =
           || (name >= "Frama_C" && name < "Frama_D")
           || Builtins.find_builtin_override kf <> None)
 
-let subdivide_stmt _stmt =
-  Value_parameters.LinearLevel.get ()
+let subdivide_stmt = Value_util.get_subdivision
 
 let subdivide_kinstr = function
   | Kglobal -> Value_parameters.LinearLevel.get ()
diff --git a/src/plugins/value/utils/value_util.ml b/src/plugins/value/utils/value_util.ml
index 99bfd13838fb8991f534a2720753c88bf5b1a6e7..24df6f735e5e927b8ce97ea0a9a55b4c3eef7026 100644
--- a/src/plugins/value/utils/value_util.ml
+++ b/src/plugins/value/utils/value_util.ml
@@ -71,6 +71,12 @@ let get_slevel kf =
   try Value_parameters.SlevelFunction.find kf
   with Not_found -> Value_parameters.SemanticUnrollingLevel.get ()
 
+let get_subdivision stmt =
+  try
+    let kf = Kernel_function.find_englobing_kf stmt in
+    Value_parameters.LinearLevelFunction.find kf
+  with Not_found -> Value_parameters.LinearLevel.get ()
+
 let pretty_actuals fmt actuals =
   let pp fmt (e,x,_) = Cvalue.V.pretty_typ (Some (Cil.typeOf e)) fmt x in
   Pretty_utils.pp_flowlist pp fmt actuals
diff --git a/src/plugins/value/utils/value_util.mli b/src/plugins/value/utils/value_util.mli
index a631d797987bfab295360fc4b9e837bcaf042922..1613ca7b695c8eebe6278f633f1495e48795e6dd 100644
--- a/src/plugins/value/utils/value_util.mli
+++ b/src/plugins/value/utils/value_util.mli
@@ -46,6 +46,7 @@ val pp_callstack : Format.formatter -> unit
 (* TODO: Document the rest of this file. *)
 val emitter : Emitter.t
 val get_slevel : Kernel_function.t -> Value_parameters.SlevelFunction.value
+val get_subdivision: stmt -> int
 val pretty_actuals :
   Format.formatter -> (Cil_types.exp * Cvalue.V.t * 'b) list -> unit
 val pretty_current_cfunction_name : Format.formatter -> unit
diff --git a/src/plugins/value/value_parameters.ml b/src/plugins/value/value_parameters.ml
index a45ba4188c1cb01f9b82d9905db9aedc45b08956..1c1f48833fdf8241b8dd954cdd337d1f3f06a1fb 100644
--- a/src/plugins/value/value_parameters.ml
+++ b/src/plugins/value/value_parameters.ml
@@ -1020,6 +1020,30 @@ module LinearLevel =
 let () = add_precision_dep LinearLevel.parameter
 let () = LinearLevel.add_aliases ["-val-subdivide-non-linear"]
 
+let () = Parameter_customize.set_group precision_tuning
+module LinearLevelFunction =
+  Kernel_function_map
+    (struct
+      include Datatype.Int
+      type key = Cil_types.kernel_function
+      let of_string ~key:_ ~prev:_ s =
+        Extlib.opt_map
+          (fun s ->
+             try int_of_string s
+             with Failure _ ->
+               raise (Cannot_build ("'" ^ s ^ "' is not an integer")))
+          s
+      let to_string ~key:_ = Extlib.opt_map string_of_int
+    end)
+    (struct
+      let option_name = "-eva-subdivide-non-linear-function"
+      let arg_name = "f:n"
+      let help = "override the global option -eva-subdivide-non-linear with <n>\
+                  when analyzing the function <f>."
+      let default = Kernel_function.Map.empty
+    end)
+let () = add_precision_dep LinearLevelFunction.parameter
+
 let () = Parameter_customize.set_group precision_tuning
 let () = Parameter_customize.argument_may_be_fundecl ()
 module UsePrototype =
diff --git a/src/plugins/value/value_parameters.mli b/src/plugins/value/value_parameters.mli
index 7ead8310a01f463bd9cd8f75d995a2ecce1af21a..a6f0c7077ba74fbfd145669eb6f4833676858863 100644
--- a/src/plugins/value/value_parameters.mli
+++ b/src/plugins/value/value_parameters.mli
@@ -129,6 +129,10 @@ module SkipLibcSpecs: Parameter_sig.Bool
 module RmAssert: Parameter_sig.Bool
 
 module LinearLevel: Parameter_sig.Int
+module LinearLevelFunction:
+  Parameter_sig.Map with type key = Cil_types.kernel_function
+                     and type value = int
+
 module BuiltinsOverrides:
   Parameter_sig.Map with type key = Cil_types.kernel_function
                      and type value = string