4:13:03Bikewell, it's 14.248/2.105 on this machine (which is worse, but also i'm chewing up the cpu), for pre-this, so that would be a reduction from 6.77 to 4.82
15:11:14Bikeso, i mean, this lisp function isn't inlined. so (cons 'a 'b) calls a lisp function, which multiple-value-foreign-calls wrapped_cl__cons, which finally calls cl__cons?
15:12:49drmeisterYes - and the the core:multiple-value-foreign-call can cause the wrapped_cl__cons to be inlined in the lisp function via LTO and the core::cl__cons function can be inlined in the wrapped_cl__cons via LTO.
15:14:55drmeisterRight - now this is assuming all this stuff is working and LTO is working as it should.
15:15:37drmeisterWe can verify it if we compile-file some test code and link it to fasls while saving the llvm LTO temp files.
15:16:17drmeisterLTO kind of does it's think when clang runs on the final link product. But it's set up to turn on a flag that saves the intermediate optimized bitcode files.
15:19:07Bikeso this whole thing is to skip the variadic functors, right?
15:22:34drmeisterThere can be no variadic functors in calls involving these functions. If there are - then something is wrong.
15:22:47Bikesounds good to me, assuming T_O* <=> T_sp is nothing at runtime
15:23:05drmeisterI'm going to check that as soon as the new build is ready
15:23:47drmeisterA T_sp is a struct containing a single core::T_O*
15:25:28drmeisterMy reading of the C++ rules and my occasional tests tell me that T_sp should be passed by value in a single pointer and that creating them and using T_sp x; x.raw_() or x.rawRef_() should be zero cost.
15:32:40Bikei can believe it, but, you know, verification