libera/#sicl - IRC Chatlog
Search
8:01:43
beach
hayley: At the end of register allocation, you introduce registers to instructions, and that's great. We can then directly access the registers when we generate code. But what about stack locations? We do need those for code generation as well. Should we also introduce stack locations?
8:04:05
hayley
There are stack locations in LIR, but they are only temporarily used before being turned into MEMREF/MEMSET instructions.
8:04:53
beach
But the assignment instruction is sometimes used to spill/unspill, so then the stack location must be accessed somehow.
8:05:32
hayley
Right. The register introduction pass turns such assignment instructions into MEMREF2 and MEMSET2.
8:09:46
hayley
If I recall correctly, the comments describe what needs to be done before the code which does it.
8:10:07
hayley
But I can see that the comments could be read to state that the code does not yet do those things.
10:16:32
beach
It looks like code generation is going to be a breeze, thanks to the excellent preparatory work done by register allocation. I am now at a point where I add methods on TRANSLATE-INSTRUCTION as code generation fails for instructions with no method.
13:46:27
beach
I made progress on code generation today. It is mostly going as I predicted, which is 1. run the bootstrapping procedure until it fails because of a missing method. 2. Add the method. 3. Repeat. However, the first RETURN-VALUE-INSTRUCTION I run into does not have an immediate input, which makes me think that the unrolling of something like multiple-to-fixed is not working or is not being invoked.
13:48:26
beach
Also, I discovered that, as a result of instructions being deleted, there are EQ instructions with a single successor. There is an :AFTER method that replaces two identical successors of an instruction by a single successor.
13:48:29
beach
This method was designed for arithmetic instructions, but it is invoked also for these EQ instructions. However, instructions without an output and with two identical successors should probably be removed.
13:50:15
hayley
There is a TEST-MIXIN, though I can't remember if I introduced it, in order to cut down on the number of register allocation methods, or if it was there before.
13:54:34
hayley
The mixin could be used to determine whether an instruction should be removed or not. But, come to think of it, it might be better to check if any outputs of the instruction are used or not.
13:57:15
hayley
Yes, having no outputs would imply no outputs could be used. But checking usage would allow eliminating arithmetic instructions with unused outputs.
13:58:28
beach
I seem to remember a remove-useless-instructions that checks for side-effect-free-mixin
13:59:20
hayley
I recall it checked for side-effect-mixin, and it would remove instructions which didn't have side effects.