freenode/#clasp - IRC Chatlog
Search
1:52:06
drmeister
If it writes the header at rdi 0x7fff5b6206f4 then it will write the object at that +8 and then add 0x1 to the object start and return that as the pointer.
1:52:56
Bike
so we just need to change the... uh... i don't know. i think the memory is just from an alloca-i8*
1:53:30
drmeister
Yeah - the alloca instruction has an alignment argument - hang on - how does that work.
1:55:47
Bike
https://github.com/clasp-developers/clasp/blob/dev/src/lisp/kernel/cleavir/translate-instruction.lisp#L257
1:57:29
drmeister
Here is the alloca-i8 instruction ... https://github.com/clasp-developers/clasp/blob/dev/src/lisp/kernel/cleavir/ir.lisp#L97
2:02:02
drmeister
That calls this... https://github.com/clasp-developers/clasp/blob/dev/src/lisp/kernel/cleavir/ir.lisp#L72
2:04:24
drmeister
It's part of the llvm-ir instruction, but the IRBuilder call doesn't have an alignment argument.
2:04:40
drmeister
http://llvm.org/doxygen/classllvm_1_1IRBuilder.html#a6b59bf56f046cb7c408fb2e6c083f2eb
2:05:14
Bike
"Create an assume intrinsic call that represents an alignment assumption on the provided pointer. " oh this sounds super annoying
2:10:15
drmeister
Maybe I shouldn't be alloca'ing i8's - really i64's are more appropriate - but still - it should let me indicate the alignment somehow.
2:12:40
drmeister
Still - how do you connect the constraint to the alloca? Just do one after the other? That smells like spooky action-at-a-distance.
2:14:01
Bike
it's really dumb how llvm doesn't have real documentation for the actual api, just the text format
2:17:06
drmeister
I could create the AllocaInst directly - it has a constructor that takes alignment
2:24:45
drmeister
There are six constructors for AllocInst, three pairs where each pair takes either an instruction to insert before or a BasicBlock to insert at the end of.
2:26:24
drmeister
All six of the constructors bottom out on the one that takes alignment. The four that don't take alignment set it to 0 by default.
2:29:12
drmeister
This is from the llvm reference, talking about globals. There is similar prose for functions. Maybe it applies to alloca
2:29:12
drmeister
An explicit alignment may be specified for a global, which must be a power of 2. If not present, or if the alignment is set to zero, the alignment of the global is set by the target to whatever it feels convenient. If an explicit alignment is specified, the global is forced to have exactly that alignment.
2:31:13
drmeister
Yeah - this is how it's supposed to be done. The IRBuilder is just a porcelain for creating instructions.
2:32:44
drmeister
That's the code for IRBuilder::CreateAlloca - it's calling one of the constructors that doesn't explicitly take Align.
2:38:30
drmeister
Since the alignment of alloca's is currently left up to whatever llvm's tiny little brain wants it to be I'm going to create a new create-alloca-aligned instruction and switch everything to that. I don't want this to come up again.
2:39:57
drmeister
They are fascinating. He buys and opens and sometimes eats military rations from through the last century.
2:41:21
drmeister
Here's one where he's tries a British Emergency Ration from the 1899 Boer conflict. https://www.youtube.com/watch?v=jZoHuMwZwTk
2:58:42
drmeister
compnerd (who I met at the llvm meeting) says we can call setAlignment on the result of CreateAlloca
3:15:46
drmeister
I pushed the changes - so the buildbot has picked it up and will build the docker image. It will be 1h25m and then I can test it.
4:02:18
drmeister
NASA came out with a static analyzer for C++ https://www.reddit.com/r/C_Programming/comments/a5a5nc/ikos_21_an_open_source_static_analyzer_for_c_and_c/
4:23:52
drmeister
This is really starting to annoy me: ;;; Warning: compiled-function-file expected a function as argument - but it got NIL - there may not be any backtrace available
4:24:46
drmeister
Ok. The warning that is annoying me can be fixed now that we have call-with-backtrace
4:25:45
Bike
oh, i see. i forgot the no-applicable-methods case because we don't memoize it. i can fix that easily.
4:26:53
drmeister
So - clasp can dispatch on specialized types like core:simple-vector-double but the Common Lisp standard only allows specializing on 'vector - is that a problem?
6:04:41
drmeister
Now we have nice, clean backtraces. Coming soon to the docker image - (like 1.5 hours).
12:57:07
Shinmera
drmeister: the screenshot you posted had over 1000 unread emails in your gmail tab
13:07:24
drmeister
It's really not bad debugging inside of a docker container if you start it properly and install emacs and gdb.
13:08:01
drmeister
Starting it properly means: docker run --privileged --security-opt seccomp=unconfined -it -p 8888:8888 -p 4005:4005 -v $HOME:/home/app/home cracauer/cando
13:15:43
drmeister
slyrus1: Yes - but I skip over the C++ frames for now - also C++ frames don't come with arguments just yet. I'm not using the DWARF variable information and DWARF variable information is pretty messed up for any useful (non -O0) level of optimization.
13:17:01
drmeister
I'm adding the ability to use leap syntax as well as Common Lisp - that is building right now.