On May 6, 2018, at 10:08 AM, Adam adam.mlmb@gmail.com wrote:
What causes this lower speed should likely boil down to that the way Gambit implements trampolines and its whole single host / calling convention model in C, that for some reason LLVM fails to make those exact logics fast.
I deduce that reasoning from the general observation that GCC and LLVM these days generally are in about the same performance ballpark, if the reports I read were correct - my thought then is that LLVM cannot possibly compile all of Gambit's runtime slower than GCC, as those parts of Gambit are fairly similar in nature to other C applications [and so what LLVM would need to optimize should be Gambit's trampolines/single host/calling conventions that LLVM].
Do you think that line of reasoning would make sense?
It is possible that the difference in speed is due to clang not compiling the trampoline mechanism efficiently. But this can be due to a variety of underlying issues…
- not optimizing value labels and the “goto *…” statement - not performing an optimization when the code is too large or irreducible (not having a structured control flow) - not performing good register allocation when the code’s control flow is unstructured
If you are interested in solving this issue, I suggest you perform some experiments with gcc and clang. It shouldn’t take more than a few minutes. Try compiling your code with and without --enable-single-host . Please report your results back to the mailing list.
Marc