lean4-htt/src/Lean/Compiler/LCNF/ConfigOptions.lean
Henrik Böving c3779bc8d5
refactor: reset reuse pass to LCNF (#12315)
This PR migrates the IR ResetReuse pass to LCNF.
2026-02-05 15:54:46 +00:00

98 lines
3.3 KiB
Text

/-
Copyright (c) 2022 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Leonardo de Moura
-/
module
prelude
public import Lean.Data.Options
public section
namespace Lean.Compiler.LCNF
/--
User controlled configuration options for the code generator.
-/
structure ConfigOptions where
/--
Any function declaration or join point with size `≤ smallThreshold` is inlined
even if there are multiple occurrences.
-/
smallThreshold : Nat := 1
/--
Maximum number of times a recursive definition tagged with `[inline]` can be recursively inlined before generating an
error during compilation.
-/
maxRecInline : Nat := 1
/--
Maximum number of times a recursive definition tagged with `[inline_if_reduce]` can be recursively inlined
before generating an error during compilation.
-/
maxRecInlineIfReduce : Nat := 16
/--
Perform type compatibility checking after each compiler pass.
-/
checkTypes : Bool := false
/--
Cache closed terms and evaluate them at initialization time.
-/
extractClosed : Bool := true
/--
Maximum number of times a definition tagged with `@[specialize]` can be recursively specialized
before generating an error during compilation.
-/
maxRecSpecialize : Nat := 64
/--
Insert reset-reuse instructions.
-/
resetReuse : Bool := true
deriving Inhabited
register_builtin_option compiler.small : Nat := {
defValue := 1
descr := "(compiler) function declarations with size `≤ small` is inlined even if there are multiple occurrences."
}
register_builtin_option compiler.maxRecInline : Nat := {
defValue := 1
descr := "(compiler) maximum number of times a recursive definition tagged with `[inline]` can be recursively inlined before generating an error during compilation."
}
register_builtin_option compiler.maxRecInlineIfReduce : Nat := {
defValue := 16
descr := "(compiler) maximum number of times a recursive definition tagged with `[inline_if_reduce]` can be recursively inlined before generating an error during compilation."
}
register_builtin_option compiler.checkTypes : Bool := {
defValue := false
descr := "(compiler) perform type compatibility checking after each compiler pass. Note this is not a complete check, and it is used only for debugging purposes. It fails in code that makes heavy use of dependent types."
}
register_builtin_option compiler.extract_closed : Bool := {
defValue := true
descr := "(compiler) enable/disable closed term caching"
}
register_builtin_option compiler.maxRecSpecialize : Nat := {
defValue := 64
descr := "(compiler) maximum number of times a definition tagged with `@[specialize]` can be recursively specialized before generating an error during compilation."
}
register_builtin_option compiler.reuse : Bool := {
defValue := true
descr := "heuristically insert reset/reuse instruction pairs"
}
def toConfigOptions (opts : Options) : ConfigOptions := {
smallThreshold := compiler.small.get opts
maxRecInline := compiler.maxRecInline.get opts
maxRecInlineIfReduce := compiler.maxRecInlineIfReduce.get opts
checkTypes := compiler.checkTypes.get opts
extractClosed := compiler.extract_closed.get opts
maxRecSpecialize := compiler.maxRecSpecialize.get opts
resetReuse := compiler.reuse.get opts
}
end Lean.Compiler.LCNF