[LLVMdev] C as used/implemented in practice: analysis of responses

Antoine Pitrou antoine at python.org
Mon Jul 13 11:28:21 PDT 2015


Chris Lattner <clattner <at> apple.com> writes:
> 
> There are many more modern and much safer languages that either eliminate 
> the UB entirely through language design (e.g. using a garbage collector to 
> eliminate an entire class of memory safety issues, completely disallowing 
> pointer casts to enable TBAA safely, etc), or by intentionally spending a 
> bit of performance to provide a safe and correct programming model (e.g.
> by guaranteeing that integers will trap if they overflow).

For the record, in Numba when we enabled the "nsw" flag on all arithmetic
operations, we got a sizable speedup (up to 2x IIRC) on some benchmarks.
That's even though we implement a high-level language (Python).

For those curious, the explanation is that negative array indices are
legal in Python - they mean indexing from the end of the array. So,
whenever a lookup such as `my_array[i+1]` was used, a check was
necessary to detect whether `i+1` was negative even when `i` was known
to be positive. Adding the "nsw" flag helps LLVM optimize away that
check in many cases - and it turns that can enable some other optimizations
such as vectorization.

Regards

Antoine.





More information about the llvm-dev mailing list