GCC Translation Validation

I am planning to do some work with SMT solvers and GCC. I usually start new projects by doing a naive implementation of the critical part to get a feel for the problems and find out what I need to learn before the real implementation. So I started this project by building a simple translation validator, similar to the LLVM Alive2 (but with many limitations).

Read More

Branch/cmove and compiler optimizations

I have recently seen several discussions on Twitter where people have been surprised/annoyed by what the compilers do to their branchless code. Here are some random comments on what the compilers do (and why).

Read More

-ffp-contract=fast

GCC per default enables one optimization for x86_64 that can change the result of floating-point operations: -ffp-contract=fast.1 This allows the compiler to do floating-point expression contraction such as combining multiplication and addition instructions with an FMA instruction.2

  1. -ffp-contract=fast is enabled for C++ and GNU C. It is not enabled for standard C (that is, when compiling with -std=c99, etc.). 

  2. The FMA instruction omits the rounding done in the multiplication instruction, making the calculations produce different results for some input values. 

Read More

Optimizations enabled by -ffast-math

This blog post describes the optimizations enabled by -ffast-math when compiling C or C++ code with GCC 11 for x86_64 Linux (other languages/operating systems/CPU architectures may enable slightly different optimizations).

Read More