4 ms·
Basically LLVM is now a dependency of equal importance to GCC for Debian. Hopefully this will help motivate expanding architecture-support for LLVM, and by pro
by josteink 7y ago
Basically LLVM is now a dependency of equal importance to GCC for Debian.
Hopefully this will help motivate expanding architecture-support for LLVM, and by proxy Rust.
- simcop2387 7y agoIt's been a fairly important thing for debian for a while, but this probably solidifies it even more. https://clang.debian.net/ https://clang.debian.net/
- ncmncm 7y agoGodbolt shows that Clang is a lot more aggressive with use of "cmov" -- conditional move instructions. When the Spectre and Meltdown family of security debacles surfaced, cmov was promoted as a way to choke off speculative execution. But that suggests, also, that cmov would be bad for performance in places where cross-process security isn't a concern. Did something important change, or did I misunderstand? Maybe only cmov memory -> register blocks speculation?
- dbcurtis 7y agoCMOV replaces branches. So no branch, no speculation. Typically, though, only branches that the compiler identifies as not reliably predictable would be replaced. Because with a well predicted branch you do not waste resources. CMOV executes both paths, wasting the work of one path, but saving the mispredict penalty. Which for “flakey” branches can be a overall win.
- nikic 7y agoChoice of cmov vs branch is pretty tricky because profitability depends on branch probabilities, which are commonly not known. LLVM has an X86 cmov conversion pass that does this based on some cost modeling for loop-carried dependencies, but it does not always make the right choice. Common problem is binary search code where you really, really want that cmov, but might not get it.
- JoshTriplett 7y ago> Basically LLVM is now a dependency of equal importance to GCC for Debian. Yes, exactly. And until then, every time a new dependency on LLVM (or by extension on Rust) appears, users of architectures LLVM doesn't target complain bitterly and threaten to fork the last version without that dependency. (This argument has happened for Firefox, rsvg, and recently bzip2.)