freenode/#clasp - IRC Chatlog
Search
15:33:19
Bike
irc-call-or-invoke is now expecting (function-type function args), but closure-call is passing (entry-point args). where should it get the function type?
15:35:31
Bike
i have to change this in a lot of places. can irc-call-or-invoke not get the function type itself from the number of arguments?
15:37:34
Bike
i'm also not sure if LISP function type is going to work when unsafe-FOREIGN-call uses irc-call-or-invoke too
15:39:11
drmeister
jackdaniel: I hit a brick wall with Boehm's precise mode I can't get anything that should work to work without segfaulting after some time. It's been really frustrating.
15:39:38
drmeister
There is a new GC coming up that we are going to transition to as it matures. It's called MMTk.
15:42:28
drmeister
It's not suitable for us yet - but in the next couple of months it will get conservative GC.
15:46:27
drmeister
The thing is - all the work that we did to support the Memory Pool System - I can reuse for any other garbage collector.
15:47:11
drmeister
It turns out that the heavy lift is being able to describe where all the pointers are in all your objects and the size of your objects from the header.
15:47:49
drmeister
Oh - and following a coding discipline that allows MPS to work was also necessary.
15:48:37
drmeister
It also underperforms in multithreaded applications. There is a lock in the page allocator that you slam into right away.
15:50:07
drmeister
Yep. I am developing trust with the researcher/group that is leading the MMTk effort as I read his papers.
15:51:08
drmeister
Boehm and MPS were developed in the 80's and 90's - a new generation of memory manager development for modern processors will be interesting.
15:52:18
drmeister
Boehm is impressive as heck - but to GC code I need to get the precise GC to work and I can't get it to work and nobody answers my questions about it.
15:53:12
jackdaniel
that would probably require some quiet time with a debugger (and knowledge about clasp internals:)
15:53:48
jackdaniel
that said, if I were making a bet, I would think that getting bdwgc precise gc mode right would be easier
15:55:07
drmeister
The MMTk looks like it's going to be more a'la carte - where we can mix different capabilities together to tune the GC for our needs.
15:55:47
drmeister
Like precise on the heap, stackmaps on the stack for precise pointers that keep objects alive and pinned and support internal pointers at the same time.
15:56:56
drmeister
That's just my weak naming abilities run amok. I can't even remember what 'irc' was supposed to stand for anymore.
15:58:28
drmeister
It's a big collection of functions that each generate a few llvm-IR instructions.
15:59:35
drmeister
Yeah - we want to pass the function type now - it's often easy to get if you have the function.
16:03:11
drmeister
I'm going to try first to get the function-type using: (let ((function-type (llvm-sys:get-function-type entry-point)) ...)
16:06:30
drmeister
So I'm basically converting... (cmp:irc-call-or-invoke function arguments ...) to...
16:07:03
drmeister
(let ((function-type (llvm-sys:get-function-type function))) (cmp:irc-call-or-invoke function-type function arguments ...) ...)
16:08:40
drmeister
I'm remembering now the reason. llvm12 changed the IRBuilder::CreateCall and CreateInvoke
16:09:20
drmeister
And it wasn't totally trivial, I couldn't just do like I did above in every case - there were places where I had to cook up a function-type.
16:10:05
drmeister
So I added the extra argument for irc-call-or-invoke by sticking by inserting a function-type argument before all the others.
16:10:28
drmeister
In aclasp/bclasp I was able to convert them all successfully. I left the cclasp ones for now.
16:10:53
drmeister
There should be plenty of examples in the cmp directory for ways to set up the function-type for irc-call-or-invoke.
16:11:30
drmeister
I will push the changes now where I make a first pass by just using the function/entry-point and getting the function-type from that.
16:16:37
drmeister
I'm fine working like this though - if you can dig into the problems a bit deeper I can provide insight and support regarding the changes I made and things I didn't finish in bringing us up to llvm12.
16:18:24
drmeister
If I recall correctly - the main changes were these function-types are required now in calls/invokes and the removed one of the DebugInfo constructors and it looks like we are supposed to use DILocation instead.
16:33:09
Bike
if you do (setq core:*eval-with-env-hook* #'core:interpret-eval-with-env) it stop being stupid
16:35:44
Bike
i dunno if there's a way to streamline it. if we can't compile cclasp code a lot of stuff is broken.
16:37:52
drmeister
In the BacktraceFrame I added the source line info - we could add that to the backtrace so we know what line and source file each frame represents.
16:53:32
drmeister
Ok - it looks like it's going to take a bit more finesse to get the function-type than my ham first -fisted attempt. I'll leave it to you - ok? If you need anything just ping me.
17:22:01
drmeister
Bike: I'm banging at the cclasp compilation and maybe you already see the problem but with the new entry points the closure passed to closure-call-or-invoke is a #<LOAD-INST...> that we pass to cmp:irc-calculate-entry closure argument) and that returns another #<LOAD-INST...> that has the function-type buried within it.
17:24:42
drmeister
In the future, when we have multiple entry points - this will change depending on the number of arguments - and we have the arguments - so we are future proof.
17:50:02
drmeister
Bike: Another thing I did was I converted all of the structure types that we define in cmpintrinsics.lsp to use define-c++-struct.
17:50:45
drmeister
I'm pretty sure I did everything correctly - but there were downstream changes that needed to be made.
17:51:54
drmeister
The definitions of +rack.stamp-index+ and so on were used downstream to index into the struct.
17:52:35
drmeister
With define-c++-struct the fields are accessed using their field names like :stamp
17:53:04
drmeister
I kept the index definitions but changed them like: (defconstant +rack.stamp-index+ (c++-field-index :stamp info.%rack%))
17:53:46
drmeister
If I made a mistake somewhere, shame on me. cclasp will be more sensitive to problems here because it generates inline accessors.
17:54:15
drmeister
I think those are the major changes from the master branch that I started with a couple of months ago.
18:46:59
drmeister
Yeah - that gets you farther. Now I'm crashing in row-major-aref in compile-file-parallel.lsp
18:47:22
drmeister
I'm working on a proposal - reading about the immune system and immune checkpoints - so I'll pass this to you.
18:49:43
drmeister
The diversity of the T cell receptors is 25 million. We just made about 800,000 - off by a factor of 30.
19:14:12
drmeister
The only thing I did with arrays/vectors was the define-c++-struct thing and I temporarily added a boehm work-done word to object headers. I took out the work-done word.
19:37:58
Bike
in this case it seems like the problem is %intrinsic-call is getting a function name that's not in the primitives list
19:39:07
Bike
ah. it's llvm.frameaddress.p0i8 instead of llvm.frameaddress now? is that an llvm 12 thing? whatever
19:58:51
drmeister
We had this problem with one of the intrinsics before and it seemed pretty arbitrary.
19:59:38
Colleen
frgo: drmeister said at 2021.01.28 17:08:40: Can you check that your boehmgc is installed using homebrew? That's what we use.
20:00:04
Bike
i also put something in so that if another intrinsic is changed i'll get a sensible error.
20:01:32
frgo
boehmgc is via homebrew. Compiled ok. Loading quicklisp via (load "quicklisp/setup.lisp") resulted in segmentation violation. Debugger backtrace says it's in a call to (OPEN #P"/Users/frgo/.cache/common-lisp/clasp-cclasp-boehm-0.4.2-3637-g057b30ba7-cst-macosx-x64/opt/quicklisp/quicklisp/package-tmpPS5HLO8R.fasp" :DIRECTION :IO :ELEMENT-TYPE :DEFAULT :EXTERNAL-FORMAT :UTF-8 :IF-EXISTS NIL :IF-DOES-NOT-EXIST :CREATE)
20:04:17
frgo
But that's not important. I am trying to figure this out myself. You are busy with proposal and stuff.
20:06:33
drmeister
Ok - thanks. What I can tell you is I installed BigSur, upgraded Xcode, cloned clasp 'master' and built it and then loaded quicklisp and it built fine.
20:06:59
drmeister
I can give the laptop to Martin and he could help match up library versions if it's something like that.
20:08:26
frgo
Oh - so once again a busy weekend... Yeah, me too. I actually miss writing proposal now that I no more in consulting but on the client side.
20:11:45
drmeister
Yes - the code-model message is meant to remind me to remove the code-model message.
20:12:38
Bike
it also only took fifteen minutes to build instead of twenty. dunno what's going on there
20:12:51
drmeister
We have up to date llvm-12 support. Now all we need is for llvm-12 to support us (linux/JITLink).
20:13:30
drmeister
The large code model slows down exception handling a lot. That might be part of it.
20:17:12
drmeister
The alternative was to go back to object files/dynamic libraries - but I wanted to really make sure that faso files worked in production.
21:26:15
Bike
drmeister: do you have any idea how we'd end up with characters with negative character codes? maybe we're misinterpreting words somewhere?
21:27:51
Bike
yeah. i mean, the problem is that DISASSEMBLE crashes slime because the string has these impossible characters in it
21:27:52
drmeister
There is a single function that generates character immediates as well as other immediates