freenode/#clasp - IRC Chatlog
Search
6:41:01
beach
I am not sure y'all have looked in the logs, but karlosz and myself adapted the published algorithm for sparse conditional constant propagation from SSA to SFA. In the process, the algorithm was simplified, and of course, we avoid the problems with SSA.
6:41:50
beach
Furthermore, we noticed a property of SFA namely that UD chains and DU chains are trivial. So in case we see algorithms that need such chains, we could consider converting to SFA first.
6:42:53
drmeister
beach: I was reading it today on my phone - it sounds exciting. What does it mean?
6:43:36
beach
Which part? The algorithm does constant propagation, and also eliminates branches where the test turns out to be constant at compile time.
6:45:02
beach
So instead of v <- phi(v1, v2, ... vn) we have n incoming arcs with an instruction in the middle doing v <- v1, v <- v2, ... v <- vn.
6:45:42
drmeister
Ok - here's a weird question - if I want to translate SFA into SSA do I use assignments or PHI nodes?
6:46:46
beach
So, again, we have discovered an algorithm that does not need the fact that SSA is S.S.A.
6:47:18
drmeister
Yes - I'm thinking about how it will impact Clasp - or how Clasp will use it to generate code for LLVM.
6:49:11
drmeister
I'd rather use more Cleavir and follow it all the way down to when it can generate native code but that will take a while
6:50:34
beach
I think the goal is to propose a complete set of optimization techniques, and that the client implementation can build a compiler according to its needs.
8:12:47
beach
But I think it is silly to call something an "alternative representation of SSA" when it does not have the S.S.A property.
10:27:31
heisig
beach, Bike: I finally found some free time to finish my load time value hoisting code. I would appreciate if anyone of you could review it.
10:27:42
heisig
The code is at https://github.com/marcoheisig/SICL/tree/load-time-value-hoisting/Code/Cleavir/HIR-transformations/Load-time-value-hoisting
10:28:55
heisig
At the moment, it is pretty useless, because it needs several client specific methods to operate correctly.
10:29:47
heisig
But if you agree with the overall design, I will add specializing methods for Clasp and SICL.
11:31:01
beach
Today, I have lunch guests and then I need a rest. I'll have a look this afternoon or tomorrow.
11:35:57
heisig
Hello beach. Take your time. I have a busy week ahead of me, so whether I get feedback tomorrow or next week won't make a difference.
12:52:44
karlosz
drmeister: the way we imagine SFA is that its use will be transparent to the user (not the optiimization writer, but those who decide to use the optimizations). one can optimize all the cleavir code and then translate back to SSA for llvm generation or whatever
12:53:09
karlosz
and i mean the translation is really replacing a few assignment nodes with a phi node in a linear pass
13:53:06
kpoeck
I see that load tries to get the source-pathname, even when called with e.g. a string-stream
13:55:48
kpoeck
If no source is Stream not reulting from a file, what should be the result of SourceFileInfo_sp sfi = core__source_file_info(source);?
14:00:24
Bike
i've set it up so that the source POS info should be nil, and the source file info ignored
14:08:28
kpoeck
In core__load_source there is an assigment SourcePosInfo_sp spi = SourcePosInfo_O::create(sfi->fileHandle(), 0, 0, 0);
14:10:47
Bike
itll only effect source positions, which are an extension, so those probably won't pick up any change
14:11:04
Bike
when i rewrote things i focused on compile-file and not load, so i'll have to take a look, probably
14:17:03
kpoeck
Well I only want to make (with-input-from-string (s "(defun foo())") (load s :verbose t :print t)) work, so I do the minimal to do that
14:20:12
Bike
for that, yeah, if you need to bind the source stuff just put nil or something in there and see how it goes
14:40:05
karlosz
beach: it might be a good idea to make the special assignment instructions in SFA a different instruction. lots of optimizations like copy propagation could otherwise mess up those assignment nodes which need to be in a special place
14:41:02
beach
Once the SFA conversion is done, those can move around freely, as long as the semantics of the code is preserved.
14:41:19
karlosz
to keep the trivial UD property they should always at least be in non overlapping branches right?
14:41:52
beach
If you have a transformation that accomplishes that, then it is not semantics preserving.
14:43:09
karlosz
well, in SSA copy prop is just deleting the assignment instruction and replacing the input with the output
14:44:50
karlosz
i would think that the assignment nodes leading up to the merge would need to be special cased