sig
  type rewriting_rules =
      (Utils.u2 * Instruction.t) list -> (Utils.u2 * Instruction.t) list
  val optimize_constants : Peephole.rewriting_rules
  val optimize_locals : Peephole.rewriting_rules
  val avoid_conv : Peephole.rewriting_rules
  val remove_nops_and_unused_pushed_values : Peephole.rewriting_rules
  val optimize_iinc : Peephole.rewriting_rules
  val remove_load_store : Peephole.rewriting_rules
  val remove_get_put : Peephole.rewriting_rules
  val rewrite_store_store : Peephole.rewriting_rules
  val rewrite_store_load : Peephole.rewriting_rules
  val rewrite_load_load : Peephole.rewriting_rules
  val constant_on_the_top : Peephole.rewriting_rules
  val remove_neutral_elements : Peephole.rewriting_rules
  val rewrite_absorbing_elements : Peephole.rewriting_rules
  val apply_stength_reduction : Peephole.rewriting_rules
  val remove_identity : Peephole.rewriting_rules
  val all_rules : Peephole.rewriting_rules list
  type position =
      Head
    | Tail
    | Before of Peephole.rewriting_rules
    | After of Peephole.rewriting_rules
  val insert :
    Peephole.rewriting_rules ->
    Peephole.position ->
    Peephole.rewriting_rules list -> Peephole.rewriting_rules list
  val optimize_list :
    ?rules:Peephole.rewriting_rules list ->
    (Utils.u2 * Instruction.t) list -> (Utils.u2 * Instruction.t) list
  val optimize_graph :
    ?rules:Peephole.rewriting_rules list ->
    ('a * Utils.u2 list, 'b) ControlFlow.graph ->
    ('a * Utils.u2 list, 'b) ControlFlow.graph
end