freenode/#clasp - IRC Chatlog
Search
12:56:39
beach
I am starting to agree with Bike in that it might not be a great idea to have a CST syntax checker separate from the converter to AST.
15:02:40
drmeister
And in cl-wrappers.lisp is: (generate-direct-call-defun (core:magic-intern "cl__cons") (object1 object2) "wrapped_cl__cons" )
15:04:05
drmeister
And wrapped_cl__cons translates the arguments - which shouldn't be anything in this case, just wrap the core::T_O* in a T_sp
15:09:21
drmeister
I think that was so that these wrapped functions wouldn't override our cleavir inline versions
15:11:14
Bike
so, 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:49
drmeister
Yes - 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:55
drmeister
Right - now this is assuming all this stuff is working and LTO is working as it should.
15:15:37
drmeister
We can verify it if we compile-file some test code and link it to fasls while saving the llvm LTO temp files.
15:16:17
drmeister
LTO 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:22:34
drmeister
There can be no variadic functors in calls involving these functions. If there are - then something is wrong.
15:25:28
drmeister
My 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:48:35
drmeister
cclasp appears to be building fine. I'll push to testing and get some timing - now with direct-calls turned on.
15:53:29
drmeister
The other thing is to make sure LTO is on and that I haven't left something else disabled or some other debugging flags on that could be slowing things down.
15:55:38
drmeister
And there are a lot of calls that aren't being wrapped at the moment - investigating...
15:59:10
drmeister
The 'cclasp-boehm' executable is the executable that has everything inlined as well as it can be.
15:59:54
drmeister
the 'iclasp-boehm' executable relies on calls from the Common Lisp code to the C++ code - but not through VariadicFunctor - straight up calls.
16:09:11
drmeister
No - they do. What you don't get is (in the case of cl__cons) the LTO inlining of the core::cl__cons into the wrapped_cl__cons
16:11:16
drmeister
Uh - I misspoke. core::cl__cons can be inlined in wrapped_cl__cons - thats all on the C++ side. You are correct wrapped_cl__cons won't be inlined into cl:cons
16:13:29
drmeister
We would need to LTO link a 'bclasp-boehm' if we wanted to take advantage of LTO for building.
16:16:30
drmeister
We could get a measure of the value by timing compile-file using 'iclasp-boehm' vs 'cclasp-boehm'