Using checked overflow will
reduce the performance of most code with non-trivial usage of integer
arithmetic by 30-70%.

No, this view is overly pessimistic.

The last time we checked, Clang with the integer sanitizer turned on had a little less than 30% overhead for SPEC CINT 2006, on average. Here are the actual slowdowns:

  400.perlbench       42.8%
  401.bzip2           44.4%
  403.gcc             12.7%
  429.mcf             11.3%
  445.gobmk           42.0%
  456.hmmer           36.5%
  458.sjeng           36.7%
  462.libquantum      36.9%
  464.h264ref         122.0%
  471.omnetpp         4.8%
  473.astar           16.1%
  483.xalancbmk       12.4%
  433.milc            22.7%
  444.namd            15.5%
  447.dealII          52.5%
  450.soplex          17.5%
  453.povray          11.0%
  470.lbm             13.3%
  482.sphinx3         34.3%

This was on some sort of Core i7.

Now consider that:

- This isn't only checking for signed overflows, it's checking for lossy casts, shift past bitwidth, etc. -- the average overhead goes down to 20% if we only check for C/C++ undefined behaviors

- LLVM does a crap job in removing overflow checks; there's a ton of room for improvement, and I believe this will start happening now due to Swift

- We designed the integer sanitizer to be a debugger, not a production tool, it has precise exception semantics which suppresses a lot of integer optimizations; a more relaxed exception model like AIR/Ada would permit most of LLVM's integer optimizations to keep working

John Regehr
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to