freenode/#clasp - IRC Chatlog
Search
11:29:30
drmeister
karlosz: Do you have a Common Lisp function that can take HIR and carry out this transformation?
12:52:05
drmeister
::notify DVSSA Here is a good link that describes the Rosetta atom tree https://www.rosettacommons.org/docs/latest/getting_started/Getting-Started
13:03:28
Bike
drmeister: build failed. the error is comprehensible except i'm not sure where it's coming from
13:04:59
Bike
i'm wondering if maybe it isn't kosher to alter an instruction after generating other instructions
13:06:09
Bike
what i'm doing in landing-pad.lisp is generating a landing pad, then generating some other instructions, then adding clauses to the landing pad
13:06:10
drmeister
Ok - we have a landing pad that has no clauses and is not indicated as being a cleanup - that should be easy.
13:06:56
Bike
also, re karlosz's transformation, i'm pretty sure i wrote out something like that, but it wasn't adequate for what i wanted it for (simplifying analysis) so i didn't pursue it
13:07:26
drmeister
It's ok, you just need to get the info going to the right place. There are these things called IRBuilder(s) - they are like cursors that point to where the next instruction is going. If you don't keep them updated properly info will go to the wrong place.
13:07:47
Bike
that controls it even for something like add-clause that takes the landing pad as an argument?
13:08:52
drmeister
Everything is being generated as .ll files - right? Do you know which files have the bad IR?
13:09:56
drmeister
Well, the build/boehm/fasl/cclasp-boehm/** directories will be filled with .ll files - we could run them all through llc in a loop and maybe find the ones with bad landing pads.
13:10:43
Bike
it prints the link command and then it prints the LandingPadInst error a few dozen times
13:20:35
drmeister
Try this. find build/boehm/fasl/cclasp-boehm/ -name '*.ll' -print > /tmp/llfiles.txt
13:21:43
drmeister
I think this: find build/boehm/fasl/cclasp-boehm/ -name '*.ll' -print | xargs path/to/llc
13:24:30
drmeister
Alright - then dump the result of find into a file in /tmp/llfiles.sh and edit it and stick a path/to/llc in front of every one of them.
13:28:09
Bike
it generates two landing pads in a row (?) and doesn't add clauses or anything, so that's just wholly fucked up
13:30:42
drmeister
Telling a landing pad that it is a cleanup is an API call that sets a flag. Clauses are added using another API call. You are probably staring at the code right now and see that.
13:36:07
Bike
i guess if we were generating HIR ourselves it could go the same way. nothing to stop us from making a nop with no successors or whatever
13:40:05
drmeister
So what was up with that landingpad - did it need to be a cleanup or did it have a clause?
13:41:18
Bike
it needed to be a landingpad. i think i transmuted (llvm-sys:set-cleanup landpad t) into (cmp:irc-create-landing-pad 1) in some fit of madness
15:59:38
drmeister
Signal an error in slime and then quit sldb. That always stresses our exception handling.
16:29:24
Bike
i mean i have this artificial one that i got by calling ERROR in a handler-bind, but that's uninteresting
16:42:25
karlosz
drmeister: right now, i'm only implicitly doing the analysis in my translate method for <-, so it's backend speicific atm. however, i think it should really be a backend independent HIR pass, so I'll try to write it.
16:43:22
karlosz
so how does one write this kind of HIR pass that goes through the whole graph and changes the graph structure? is there some sort of graph traverse i can use?
16:44:22
karlosz
map instructions or something? does that allow me to combine and remove nodes as well?
16:45:20
Bike
yes, the cleavir-ir package exports several functions for mapping and graph manipulations
16:47:04
Bike
when i've written similar passes, i've used map-instructions, conditionally collected instructions to delete, then deleted them all in one go
16:50:19
karlosz
so you're not making a new flow graph in a functional manner, but rather deleting nodes off the existing graph
17:58:48
karlosz
okay, so i've collected a list of useless asign nodes. should i call delete-instruction inside a map-instrucition call? that doesn't seem right. how do you mean you've deleted them all in one go?
18:04:58
Bike
something like (let (death-row) (map-instructions (lambda (instruction) (when ... (push instruction death-row))) ...) (mapc #'delete-instruction death-row))
18:06:35
karlosz
looking at the code for typeq elimination, it seems that it does also modify the instruction graph during mapping
18:09:56
Bike
other important functions are set-predecessors and reinitialize-data, which fix up the predecessor slots of instructions and the user/definer slots of data, resp
18:18:14
karlosz
i need to merge the uses and defs of the input and output of the assign node im deleting, and i want to make sure im not tripping over an actual invariant
18:21:36
karlosz
so if i want to delete a lexical location from the graph, do i just manually remove all its uses and defs? tjhere's no analog of delete instruction for actual data nodes, correct?
18:22:36
Bike
yes. you don't need to bother editing the datum itself, reinitialize-data will restore consistency after you mess witht he instructions