freenode/#clasp - IRC Chatlog
Search
17:12:41
karlosz
if i just make a compiler macro for eq expanding to cleavir-primop:eq then i get problems when its not used in an if form
17:13:26
karlosz
but if i write (if (cleavir-primop:eq ,arg1 ,arg2) t nil) then it does some unnecessary stuff when you have code like (if (eq...))
17:28:19
Bike
Another way of doing it I guess would be to have a special ast that does (if whatever t nil), and then change the if compiler to skip that ast
17:29:33
karlosz
like having the ast method on cleavir-primop:eq convert to how it is now when it has two successors
17:30:35
karlosz
that way you can implement thte ocmpiler macro as (cleavir-primop:eq ,arg1 ,arg2) and eliminate the restriction that it has to appear as the test in an if form
17:31:47
karlosz
can it be done in the AST conversion method? what would the need for hir level hoisting be?
18:02:45
karlosz
it can probably be generalized for all test asts, dropping the two successor restriction
18:06:17
karlosz
i guess the part about make-load-time-value ast can just be changed to a conversion of t and nil to asts
18:06:40
karlosz
thatway no matter how constants are handled, the ieq-ast will just adapt accordingly
18:07:39
Bike
like, nil could be an immediate, and right now we worry about that in the form to ast step
18:10:05
karlosz
hm, then i guess you could just replace the call to make-load-time-ast to a call to (convert-form nil/t)
18:13:56
karlosz
thats true. so i guess either way how constants are rpesented will affect how the code is written
18:14:51
karlosz
but that will require a rewrite of all the constant handling machinery anyway, so we might as well get something like this in and deal with it with everything else
18:25:08
Bike
for analysis purposes we should probably just use like constant-input anyway, there's no actual environment dependence and we can worry about immediates at mir level
18:27:25
karlosz
i wonder why there needs to be a immediate-ast class? can't those just be introduced in HIR by the implementor?
19:09:53
karlosz
*sigh* cleavir-loops finds the loops in a flow graph but doesnt retain any information about where the loop entry node is
19:44:22
heisig
I am all in for removing the immediate-ast class. I didn't even know there is such a thing.
19:46:54
heisig
karlosz: Loop invariant hoisting is extremely important for numerical codes. Having to do this by hand is quite the pain.
19:47:34
karlosz
alright, ive already started writing it. itll be done in HIR so clasp can use it too
19:48:47
Bike
the existing loop detection seems to target strongly connected components, but i thought there was a broader condition
19:50:33
karlosz
yeah, usually whats done is a loop nest tree is done so that innermost loops can be optimized first
19:50:45
heisig
Loop optimization is probably also not a top priority at the moment. More something for the long-term wishlist.
20:19:36
Bike
also this problem is due to a complicated macro function, but only when it's compiled in part of a larger block.
20:19:52
attila_lendvai
hi! so, bclasp is basically aclasp compiling and loading a bunch more files that implement a full CL system, right?
20:23:59
karlosz
since you know at compile time whether youll have division by zero if youre constant folding...
20:27:14
karlosz
the user just defines a method on hoistable for whatever instruction they want to declare hoistable
20:32:36
attila_lendvai
Bike: and then when bclasp is being compiled by aclasp, the resulting fasl's are not loaded into the image (the way aclasp did), because it wouldn't speed up anything (aclasp remains the compiler code)? they are just linked together into an image that will be used when loading Cleavir, and then selfcompileing it into cclasp?
20:36:11
attila_lendvai
Bike: thanks for validating my assert's! I'm trying to sketch up a plan that includes the entire journey because it's too hard to hack ahead on this territory to just get going without a map
20:38:23
heisig
karlosz: That is pretty cool! That means we can finally have a fast AREF for multi-dimensional arrays (Because the index computation can be hoisted).
20:38:53
kpoeck
Is there a good reason why the calculation of *-float-positive-infinity is conditionalized with #+ieee-floating-point?
20:40:52
kpoeck
I fixed the printing error in push_base_string, so now (EXP (+ (LOG MOST-POSITIVE-SHORT-FLOAT) 100))
20:49:22
Bike
i can reproduce the bugifi have a print object method in the same block as the macro definition. what the living fuck
20:51:53
karlosz
its not able to recognize that (dotimes (i 5) (dotimes (j 7) (aref array (+ i 2) (+ j 4)))) is two different loops
20:56:01
Bike
a loop is a set of nodes all dominated by a header node, that are all successor*s of the header,and only the header has predecessors not in the set.
20:59:49
karlosz
good thing i havent signed away my rights to code to GNU yet, that means i can still upstream components to Cleavir
22:06:33
drmeister
Hello everyone - I'm at a "Foldamer" meeting at New York University - I get a few minutes to catch my breath and then I'm heading out to dinner - phew.
22:07:20
drmeister
ACTION is amazed at how many wireless networks are presented in New York when he opens his wireless pulldown menu.
22:08:37
drmeister
ACTION is glad that multiple bosons can occupy the same place at the same time - or he'd have trouble moving around.
22:19:53
drmeister
I'm really excited about this whole Cleavir thing - the more of Common Lisp that we can implement in pure Common Lisp - the less work there is getting a good implementation of Common Lisp up and running!
22:24:12
karlosz
okay, so now the (+ i 2) can get hoisted out of the inner loop in (lambda (array) (dotimes (j 7) (aref array (+ i 2) (+ j 4)))))
22:25:39
karlosz
heh! its not bad, just didnt have 30 years and tons of DARPA funding to make it good