1. 13 Jan, 2021 4 commits
    • Xavier Leroy's avatar
      Improve branch tunneling · 7f152e2f
      Xavier Leroy authored
      The previous branch tunneling was missing optimization opportunities
      introduced by the optimization of conditional branches.  For example:
      L1: instr; branch L2
      L2: if cond then branch L3 else branch L4
      L3: branch L4
      L4: ...
      was transformed into
      L1: instr; branch L2
      L2: branch L4
      L3: branch L4
      L4: ...
      missing a tunneling opportunity (branch L2 -> branch L4).
      This commit improves branch tunneling so that the expected code is produced:
      L1: instr; branch L4
      L2: branch L4
      L3: branch L4
      L4: ...
      To this end, additional equalities are introduced in the union-find
      data structure corresponding to optimizable conditional branches.
      In rare cases these additional equalities trigger new opportunities for
      optimizing conditional branches.  Hence we iterate the analysis
      until no optimizable conditional branch remains.
    • Xavier Leroy's avatar
      Revised correctness proof for record_goto · e16f5d1d
      Xavier Leroy authored
      We used to define an instrumented version record_goto' that also
      builds the measure f, prove it correct, then show equivalence with
      The new proofs make do without the instrumented version.  They prove
      strong existence of the measure, as in
      `{ f | branch_map_correct (record_goto fn) f}`.
    • Xavier Leroy's avatar
      Add new fold_ind induction principle for folds · bbf3b414
      Xavier Leroy authored
      fold_inv is in Type, hence can prove goals such as `{ x | P x }`.
      Also, no extensionality property is needed.
      fold_rec is now derived from fold_inv.
    • Xavier Leroy's avatar
      Add lemma list_norepet_rev · dd191041
      Xavier Leroy authored
  2. 10 Jan, 2021 1 commit
  3. 07 Jan, 2021 1 commit
    • Xavier Leroy's avatar
      Ignore and warn about pragmas inside functions · 35e2b11d
      Xavier Leroy authored
      Pragmas can occur either outside external declarations, at the top level
      of a compilation unit, or within a compound statement, inside a function
      The parse tree in cparse/C.mli cannot represent pragmas occuring within
      a compound statement.
      In this case, the elaborator used to silently move the pragma to top
      level, just before the function definition where the pragma occurs.
      It looks safer to just ignore pragmas occurring inside a function
      definition, and emit a specific warning.
  4. 29 Dec, 2020 2 commits
    • Xavier Leroy's avatar
      Replace `omega` tactic with `lia` · aba0e740
      Xavier Leroy authored
      Since Coq 8.12, `omega` is flagged as deprecated and scheduled for removal.
      Also replace CompCert's homemade tactics `omegaContradiction`, `xomega`,
      and `xomegaContradiction` with `lia` and `extlia`.
      Turn back on the deprecation warning for uses of `omega`.
      Make the proof of `Ctypes.sizeof_pos` more robust to variations in `lia`.
    • Xavier Leroy's avatar
      Remove useless parameters in theorems int_round_odd_bits and int_round_odd_le · 2e202e2b
      Xavier Leroy authored
      IEEE754_extra: clear unused context so that none of the context is
      picked up by tactics and ends as extra parameters to theorems
      int_round_odd_bits and int_round_odd_le
      Floats: simplify uses of int_round_odd_bits and int_round_odd_le
  5. 28 Dec, 2020 3 commits
  6. 26 Dec, 2020 5 commits
  7. 25 Dec, 2020 3 commits
  8. 24 Dec, 2020 3 commits
  9. 11 Dec, 2020 1 commit
  10. 06 Dec, 2020 5 commits
    • Xavier Leroy's avatar
      Error when using -main without -interp · b40aef6c
      Xavier Leroy authored
      Outside of -interp mode, -main has no (known) effect but could be
      confused for a linker option that sets the program's entrypoint, say.
      It's safer to reject the option.
    • Xavier Leroy's avatar
      PowerPC modeling of registers destroyed by pseudo-instructions · 5e389894
      Xavier Leroy authored
      Inlined built-in functions destroy GPR0
    • Xavier Leroy's avatar
      ARM modeling of registers destroyed by pseudo-instructions · a4cfb9c2
      Xavier Leroy authored
      Pflid destroys IR14
      Inlined built-in functions destroy IR14
    • Xavier Leroy's avatar
      AArch64 modeling of registers destroyed by pseudo-instructions · 0df99dc4
      Xavier Leroy authored
      Pfmovimms, Pfmovimmd destroy X16
      Pbtbl preserves X17
      Inlined built-in functions destroy X16 and X30
    • Xavier Leroy's avatar
      Remove Pfcfi, Pfcfiu, Pfctiu pseudoinstructions · ef5477a4
      Xavier Leroy authored
      Also remove the Ofloatofint, Ofloatofintu, and Ointuoffloat
      PowerPC operations.
      The pseudoinstructions were used to implement these operations,
      as follows:
      Pfcfi  : Ofloatofint   i.e. the conversion signed int32 -> float64
      Pfcfiu : Ofloatofintu  i.e. the conversion unsigned int32 -> float64
      Pfctiu : Ointuoffloat  i.e. the conversion float64 -> unsigned int32
      These pseudoinstructions were expanded (in Asmexpand.ml) in terms of
      Pfcfid  : signed int64 -> float64
      Pfctidz : float64 -> signed int64
      and int32/int64 conversions.
      This commit performs this expansion during instruction selection
      floatofint(n)  becomes floatoflong(longofint(n))
      floatofintu(n) becomes floatoflong(longuofint(n))
      intuoffloat(n) becomes cast32unsigned(longoffloat(n))
      Then there is no need for the 3 removed operations and the 3 removed
      More importantly, the correctness of these expansions is now proved as
      part of instruction selection, using the corresponding results from
  11. 16 Nov, 2020 1 commit
  12. 14 Nov, 2020 2 commits
  13. 09 Nov, 2020 1 commit
  14. 08 Nov, 2020 1 commit
  15. 07 Nov, 2020 1 commit
  16. 06 Nov, 2020 2 commits
  17. 01 Nov, 2020 1 commit
  18. 30 Oct, 2020 1 commit
    • Xavier Leroy's avatar
      Add -main option to specify entrypoint function in interpreter mode (#374) · b1b853a2
      Xavier Leroy authored
      When running unit tests with the CompCert reference interpreter, it's nice to be able to start execution at a given test function instead of having to write a main function.
      This PR adds a -main command-line option to give the name of the entry point function. The default is still main. Frama-C has a similar option.
      The function specified with -main is called with no arguments. If its return type is int, its return value is the exit status of the program. Otherwise, its return value is ignored and the program exits with status 0.
  19. 12 Oct, 2020 2 commits