freenode/#clasp - IRC Chatlog
Search
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