1. 02 Nov, 2013 40 commits
  2. 01 Nov, 2013 40 commits
    • Andrei Paskevich's avatar
      Term: simplify t_label_copy · 96b8c672
      Andrei Paskevich authored
      96b8c672
    • Andrei Paskevich's avatar
      Termcode: do not reallocate buffers · 191d15da
      Andrei Paskevich authored
      191d15da
    • Andrei Paskevich's avatar
      Termcode: do not keep more than actually needed · dfd11796
      Andrei Paskevich authored
      I didn't increment the version just for this fix, so sessions
      are officially broken between the previous commit and this one.
      dfd11796
    • Andrei Paskevich's avatar
      9573328e
    • Andrei Paskevich's avatar
      Term: remove redundant *_alpha operations · d93cc40f
      Andrei Paskevich authored
      feel free to revert, if you think we might want to make again the
      distinction between t_equal and t_equal_alpha in future or just
      don't feel like breaking the API.
      d93cc40f
    • Andrei Paskevich's avatar
      tidying up · 58ff0109
      Andrei Paskevich authored
      also, ensure that t_label_copy does not lose information
      58ff0109
    • Andrei Paskevich's avatar
      Trans: do not memoize transformations of goals · 3cdc073f
      Andrei Paskevich authored
      the goal declarations are not shared and thus memoizing transformations
      on them is only interesting if we apply the same transformation on the
      same goal (which may happen when we launch several provers of the same
      family on the same goal). On the other hand, goal declarations are big
      (think WP) and numerous (think goal_split), and keeping them in memory
      is a bad idea.
      
      The same example from BWare can now be treated with 1/4 of memory:
      
      why3-replayer : full memoization
      106.81user 7.86system 1:59.32elapsed 96%CPU (0avgtext+0avgdata 1656908maxresident)k
      
      why3-replayer : no memoization on goals (this commit)
      74.14user 4.24system 1:24.93elapsed 92%CPU (0avgtext+0avgdata 429376maxresident)k
      
      why3-replayer : no memoization at all
      217.78user 6.25system 3:43.56elapsed 100%CPU (0avgtext+0avgdata 615204maxresident)k
      
      One side effect of this commit is that polymorphism encoding
      transformations are likely to be memoized only for a short time.
      The transformations that select the type instances to discriminate
      and the types to preserve in encoding are full-task-dependent and
      therefore are not memoized anymore. Thus, as soon the the task that
      contains all the selection metas is GCed, the rest of the chain
      will go, too, and Why3 will have to re-monomorphize the same decls.
      We'll see if this is a problem in practice.
      3cdc073f
  3. 30 Oct, 2013 40 commits
    • Andrei Paskevich's avatar
    • Andrei Paskevich's avatar
      Term: do not h-cons patterns and terms, t_equal becomes t_equal_alpha · 004f0edf
      Andrei Paskevich authored
      The rationale for this change is that the major case of term duplication
      is a transformation that changes only some parts of a term, leaving the
      rest intact. This case can be handled with the help of Term.t_label_copy
      (which must be called anyway, to preserve labels): if the two terms are
      "similar", i.e. composed from the identical components, we return the
      original and drop the copy. The duplication of unrelated terms is more
      rare, because of bound variables which are mostly unique.
      
      Decls and tasks are still h-consed, however, to permit memoization.
      
      On the same example of BWare the gain is quite visible:
      
      why3-replayer : hcons
      
      242.96user 12.04system 4:16.31elapsed 99%CPU (0avgtext+0avgdata 2007184maxresident)k
      
      why3-replayer : no hcons
      
      106.81user 7.86system 1:59.32elapsed 96%CPU (0avgtext+0avgdata 1656908maxresident)k
      004f0edf
    • Andrei Paskevich's avatar
      0d28b13f
  4. 29 Oct, 2013 40 commits
    • Andrei Paskevich's avatar
      Term: do not store t_vars in terms · 7abeba05
      Andrei Paskevich authored
      we still keep bv_vars in the binders, so calculating the set
      of free variables only has to descend to the topmost binders.
      The difference on an example from BWare is quite striking:
      
      /usr/bin/time why3-replayer : with t_vars
      
      505.14user 15.58system 8:40.45elapsed 100%CPU (0avgtext+0avgdata 3140336maxresident)k
      
      /usr/bin/time why3-replayer : without t_vars
      
      242.96user 12.04system 4:16.31elapsed 99%CPU (0avgtext+0avgdata 2007184maxresident)k
      
      Not only we take 2/3 of memory, but we also gain in speed (less work
      for the GC, most probably).
      
      This patch should be tested on big WhyML examples,
      since src/whyml/mlw_*.ml are big users of t_vars.
      
      Thanks to Guillaume for the suggestion.
      7abeba05
    • Andrei Paskevich's avatar
    • MARCHE Claude's avatar
      Fix pb with bench on Coq tactic · a39b8c95
      MARCHE Claude authored
      a39b8c95
  5. 28 Oct, 2013 40 commits
  6. 22 Oct, 2013 40 commits
  7. 21 Oct, 2013 40 commits
  8. 19 Oct, 2013 40 commits
  9. 18 Oct, 2013 40 commits
  10. 17 Oct, 2013 40 commits
  11. 16 Oct, 2013 40 commits