CompCert-Release 24.10

New features

  • New optimization option -fextract-addr to improve code for addressing computations of global variables. Enabled by default.
  • New Clang-compatible option -f(no)-color-diagnostics to enable/disable the diagnostics color.
  • New configuration that instructs Valex to expect that symbols are not associated with a section in the compiled binary.

Improved value analysis

  • More precise value analysis for:
    • comparison and selection instructions
    • function arguments
    • neg, add, sub
    • loads from pointers to _Bool, and the corresponding optimizations of casts to _Bool types
  • Improved value analysis of:
    • divu, divs,
    • modu, mods,
    • mul, mulhs, and mulhu.

Improved if-conversion heuristic

  • Limit recursive calls on if–then–else statements to avoid quadratic behaviors.
  • Deactivate the if-conversion in cases where later optimization of conditional branches leads to better results.

ARM

  • Improved pointer + imm offset addressing, especially in Thumb mode for smaller code.
  • Improved constant propagation for andimm.

PowerPC

  • Improved code generation for >= and <= comparisons.

Other improvements

  • Optimize
    (x ^ n) != 0
    into
    x != n
    for PowerPC, ARM and AArch64.
  • More conservative analysis of pointer equality and difference.
  • Mark stack as non-executable in binaries produced by ccomp for BSD and Linux targets.
  • More precise CSE analysis for redundant load instructions.
  • Improvements to the CSE optimization.

Valex

  • Fixed false alarm for symbols with large addresses.