freenode/#clasp - IRC Chatlog
Search
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
14:47:40
karlosz
and the input would replace the output, whihc is the merged var with multiple definitions
14:50:20
beach
Oh, I see what you are saying. The algorithm that assumes that there is a single definition of the output will not work because that is no longer the case.
14:50:56
beach
And I mean that we need to find a different algorithm then. Not make SFA look more like SSA.
14:51:43
beach
There is nothing special with SFA. It is an ordinary flow graph. Algorithms that work on any flow graph will continue working on SFA.
14:52:11
karlosz
copy propagation in SSA is trivial. it would be nice if that is still the case in SFA
14:53:20
beach
I would suggest thinking hard about a modified algorithm before thinking about introducing a special case in SFA, which is why I now have another homework assignment.
14:55:56
beach
OK, with SCC, you suggested introducing some special information into SFA so that we could use the published algorithm.
14:56:25
beach
Instead, we came up with an algorithm that works in SFA. In this case it is also simpler than the published algorithm.
14:57:41
beach
So instead of immediately thinking of introducing special assignment instructions in SFA in order to make this SSA copy propagation algorithm work, I am suggesting a new homework assignment for me, namely to come up with a copy propagation algorithm that works in SFA without extra information in it.
14:59:57
karlosz
yes, but as you say, just like last time, after thinking about it for a while it is possible to make it simpler
15:00:08
karlosz
i just wanted to bring up a potential area where things might be a little more complex
15:01:09
beach
Though I'm pretty much off for today. I had house guests for lunch, and I am fixing dinner in two hours.
15:14:24
Shinmera
I want to work but I'm too tired to. Not sure how to enjoy my Sunday in that state :(
15:17:39
beach
Not much left of the day unfortunately. And we have Bordeaux thunderstorms. They are way worse than those of a tropical place like Sài Gòn.
15:19:51
beach
Now, in the presence of threads, between the index check and the access, the index may have become invalid.
15:20:56
beach
Now, suppose you lock it. Then, I suppose AREF must check that the array is adjustable first, because the alternative seems to be to ALWAYS lock all arrays.
15:26:46
Shinmera
beach: Hmm. If you read length, adjust, access in that order it doesn't really matter, does it? it's no different from read length, access, adjust, as long as the elements don't change
15:27:35
Shinmera
I can only see it mattering if you copy the data to a new place and remove the old one due to size increase, and the old data gets changed in the meantime too
15:27:40
beach
Shinmera: Are you assuming that the memory cells that define the contents do not change?
15:28:37
Shinmera
either way, all you need to "lock" is making sure that the old array content does not get freed until you're done with your access.
15:29:25
beach
Shinmera: I am thinking, if you have a very large array, then you adjust it to be a very small one, you would want to reallocate a smaller contents vector.
15:29:39
Bike
https://pastebin.com/b28079YY if i do this, every few runs i get an assertion failure because the array element = 0, which i think is wrong
15:31:24
Shinmera
I would bet on all implementations putting the burden of thread safety on the user
15:33:29
Shinmera
I guess if you could hold on to not just a pointer to a memory region, but also to that region's length, then the problem would fall away, since the GC would not be allowed to realloc until you're done with your aref.
15:34:59
beach
Shinmera: My plan for SICL is to make the contents vector (i.e. the "rack") internally consistent, and for adjust-array to be obliged to allocate a new contents vector.
15:36:44
beach
I want it to be possible to declare that it is completely safe, i.e. that it is impossible to crash the system (barring defects of course).
17:41:47
kpoeck
I - perhaps always - fail with a variant of The function PRIMOP::INLINED-TWO-ARG-> is undefined.
17:45:40
kpoeck
I thought I just fix disassemble so that it does not fail when llvm-sys:get-name is called on a CORE:CLOSURE-WITH-SLOTS
17:49:51
drmeister
kpoeck: There seems to be a complicated (I haven't dug into it) interaction between parallel building, inlining and incremental builds that don't work together.
17:51:03
drmeister
I'm getting ready to rearrange the cclasp build/link system and so I haven't dug into it to fix it - because it is probably not fixable and it's a symptom of the way that startup works right now.
17:52:17
drmeister
So try building cclasp with -j1 - I think that will build incrementally like it always did.
17:52:52
drmeister
Or give up on incremental builds, wipe the cclasp object files and build in parallel
18:17:37
drmeister
With MPS allocations are done by bumping a pointer - I'm trying to get the allocators inlined into code.
19:49:09
kpoeck
COMMON-LISP-USER> (disassemble #'car) Disassembling function: #<CLOSURE-WITH-SLOTS@0x10b776308 CAR :type cclasp lambda-list: (X) :fptr 0x103654660> 0x103654660 <# 0+0> pushq %rbp 0x103654661 <# 1+1> movq %rsp, %rbp 0x103654664 <# 2+4> pushq %r15 0x103654666 <# 3+6> pushq %r14 0x103654668 <# 4+8> pushq %rbx 0x103654669 <# 5+9> subq $0x148, %rsp 0x103654670 <# 6+16> movq %rdx, %r15 0x103654673 <# 7+19> movq %rsi, %rbx 0x103654
19:54:01
kpoeck
If we ever manage to have ci, perhaps the regression tests can be included after every build