freenode/#clasp - IRC Chatlog
Search
11:03:37
Bike
if i compile (foo ...), that will compile as something like (funcall (car (load-time-value (function-cell 'foo +global-environment+))) ...). at runtime, if the function is unbound, calling the cell result will signal an UNBOUND-FUNCTION error
11:04:21
Bike
but if i compile (list #'foo), i get (list (car (load-time-value (function-cell 'foo +global-environment+)))). since the function isn't actually called, the error isn't signalled
11:54:54
drmeister
When I try compile-file'ing all cleavir source files, it goes into an infinite loop while or after compiling inline.lsp.
11:56:00
drmeister
If I load the cleavir source files the old way - it works fine - but doesn't go at all faster. It's really looking like jitted code is considerably slower and less optimized than AOT compile-file'd code.
11:58:42
Shinmera
Does LLVM have tuning properties for the tradeoff in JIT optimisation vs JIT compilation time?
11:59:21
Shinmera
It seems pretty strange to me that there would be a difference in quality of output if there isn't a tradeoff for compilation time.
11:59:41
drmeister
I define the JIT optimization pipeline - but it's kind of mysterious to me still.
12:06:59
drmeister
I added an optimization pass to bclasp that rewrites the llvm-ir to identify variables that can go into the stack frames, compress activation frames and remove empty activation frames. It should reduce consing as the code runs considerably.
12:09:00
drmeister
The most effect will be seen after inlining a bunch of small C++ functions that reveal that the the stack frame references can be promoted to registers and the mem2reg optimization pass is run on that to actually promote the stack frame references to register accesses.
12:10:06
drmeister
Without that the allocation-frame->stack-frame variable optimization doesn't improve things much by itself.
12:10:42
drmeister
So if the llvm optimizers aren't doing exactly what I want them to do - there can't be much improvement in performance.
12:35:33
drmeister
I compile-file 191 cleavir source files, reloading them as they are ready - then LOAD inline.lisp and then compile-file everything.
12:36:43
drmeister
At the very least - I should be able to push this stuff to github - I think it's ready to bring it online.
12:54:36
drmeister
I have one lambda-list/argument code generator now and it only deals in raw T_O* pointers
12:56:56
drmeister
These new llvm-ir rewriting optimizations added the time to do the new llvm-ir rewriting optimizations.
13:09:24
drmeister
Thank you - I realized I couldn't see it because I was in bclasp - cclasp is still building
13:09:43
Bike
beach: so, cst-to-ast and generate-ast both have the function special operator and global function calls go through a convert-global-function - i don't see where i can differentiate the special operator
13:10:11
Bike
i mean, other than putting a method on convert-special that redoes a lot of what the default one does, and i don't think theh functions are all exported
13:11:00
beach
Yes, I see. That may have to be fixed. Maybe in one case, wrap it in an AST that tests the return value.
13:12:01
beach
There might be functions that are not exported but that should. Not all that stuff has been tested.
13:13:22
drmeister
Bike: I'm not sure which 'inline thing' you are asking about. I didn't have any new insights about inline because I've been wrestling with getting things working.
13:16:21
drmeister
Oh - that. I compile-file everything up to inline.lisp and the load inline.lisp - that works.
13:17:05
Bike
oh, i see. if you get it stable enough to push i could look at why compile-file doesn't work
13:17:41
drmeister
I think it's stable enough to push - I'm just about in to the lab - I'll do it from there.
13:40:38
drmeister
Hmm, I'm getting this for clasp-cleavir::*global-optimize* --> ((COMPILATION-SPEED 1) (DEBUG 1) (SPACE 1) (SPEED 1) (SAFETY 1))
13:49:44
drmeister
I pushed through to testing, the VPN is working, but connecting in to linut the browser just hangs.
14:14:16
shiho
I'm trying to configure it for the first time so we can open a file in emacs from a shell in emacs.
14:25:50
beach
I wonder whether that is related to the problem I have with *cache-p* when I use CST-to-AST.
14:26:43
Bike
well, the problem is that sicl-genv:get-setf-expansion calls setf expanders with one argument, but setf expanders are produced by parse-macro, so they take two
14:27:05
Bike
that is, they take a form and an environment, but get-setf-expansion only passes the form
14:27:33
Bike
but i'm guessing on the latter part, since i'm not atually using sicl's define-setf-expander at the moment.
14:28:20
Bike
anyway, easily fixed, and i can have setf expanders that take the right arguments and setf works, so i can push that
14:30:15
Bike
no. i think what arguments setf expanders take isn't defined; clasp's take different arguments from sicl's, too
14:30:30
Bike
but setf expander lambda lists can have &environment, so they have to get that somehow
14:37:24
Bike
as a much more minor thing, get-setf-expansion should probably use *macroexpand-hook*, but i'm not sure how that would work with environments
15:03:04
Shinmera
shiho: All I had to do was (require 'server) (unless (server-running-p) (server-start))
15:55:45
drmeister
I made a few more commits to dev that fixed some problems - it should build now - it's building on Shiho's system
15:56:37
drmeister
Shinmera: I can see linut - thank you. It's building the latest now - finally we will get some timing data.
15:57:48
beach
Bike: I am again considering what to do when the compiler detects a fatal error, like a malformed special form or an incorrect number of arguments to a standard function. It may seem reasonable to compile a call to error, but then, can we be sure that forms that would normally follow the fatal form would be compiled normally?
15:57:49
beach
I suppose the answer is "yes", since we don't use the fact that error does not return until much later in the compilation process. I am sorry if this is a silly question. It is late in the day, and I am too tired to think it through myself.
15:59:20
beach
If so, we should be able to construct a call to ERROR such that the sub-forms of the fatal form are compiled normally as much as possible.
16:00:11
beach
This tactic may fail, of course, since we can't be entirely sure why the fatal form was incorrect, so we don't know for sure what sub-expressions are supposed to be forms to compile.
16:01:06
Bike
maybe i don't follow. "the forms that normally follow the fatal form" meaning what? Like, if we have (progn (let 4) (car x)) the (car x) is following?
16:04:00
beach
We could build something like (error "Attempt to execute a form compiled with an error: ~s~*" 'form (progn sub-form1 sub-form2 ... sub-formn))
16:05:40
Bike
i suspect that a lot of the time, or even most, there would be spurious (to the programmer) errors if compilation continues. like, if we have (progn (defun foo) (foo ...)) the defun would be an error, and then there'd be "undefined function" warnings, which are just clutter after the initial problem
16:05:42
beach
So if we have (progn (let 4 f1 f2 f3) (car x)) we would get (progn (error "..." '(let 4 f1 f2 f3) (progn f1 f2 f3)) (car x))
16:06:49
beach
I see what you are saying. I need to consider the consequences to the user experience of Second Climacs of excluding the subforms.
16:07:23
Bike
i think i've run into this in sbcl, though i don't have a real example off the top of my head
16:07:47
Bike
for the bad let, i'd imagine that f1 f2 and f3 might refer to bindings that the programmer meant to establish
16:07:51
beach
I guess it would not be too bad. The user will fix up the incorrect expression and then immediately get additional problems highlighted.
16:09:38
beach
Well, what I attempted so far was to try to preserve any correct bindings. But the code for doing that is very bulky, so if I can get away with just signaling the problem and a simple recovery strategy, that would make my life easier.
16:10:46
beach
So, if we had (let ((x 10) 234 (z 20)) ... x ... y), I would fix it up to (let ((x 10) generated-symbol (z 20)) ... x ... y)
16:15:53
beach
Also, nothing prevents us from proposing several restarts. One that does the simple thing and another that tries something more sophisticated.
16:15:58
Bike
is it? could you not just signal a bad-binding condition as you iterate through the list, and offer a use restart?