Marcel van Kervinck
Marcel van Kervinck
Simplification that still hangs the compiler: ``` int main(int a) { return 1 * (a / 2); } ```
We seem stuck in a never ending recursion: ``` ASGNI2(ADDRLP2(29), LOAD(INDIRI2(VREGP(vAC)))) dumpcover(1a005e00) = stmt: ASGNI2(ADDRLP2,LOADI2(INDIRI2(VREGP))) / (action) (listing 1a005e00) (rallocing 1a005e00) (replacing 1a005130 with a reload from 56) (genreload: INDIRI2(ADDRLP2(27)))...
This looks funny: ``` (inserting load from vAC to vAC) ``` These vAC's are different symbol objects with the same name. The rightmost is created by mkreg(). The left one...
This is getting a bit outside my comfort zone. @pgavlin, is this related to #73 in some way?
If I replace ``` int inset(Symbol rs, Symbol r) { int i; if (!rs->x.wildcard) { return rs == r; } ``` with ``` int inset(Symbol rs, Symbol r) { int...
LCC gets in an infinite loop of spilling and reloading vAC. Initially it spills vAC at some point, which is fine and understandable. Later it reloads, but at that point...
It’s a nice brain teaser now that I understand what happens. It indeed begs for a simple generalised solution, but I don't "see" it (yet).
``` int main(void) { int a, b, c; return a * (b / c); } ``` Annotated simplified debug output ``` (rallocing 4b80d298 = LOAD(INDIRI2(ADDRLP2(a))) ) r1
It is called only at the beginning: ``` post-canon: RETI2(MULI2(INDIRI2(ADDRLP2(a)), DIVI2(INDIRI2(ADDRLP2(b)), INDIRI2(ADDRLP2(c))))) ``` But after that the tree gets modified.
Yes, I believe that part works as intended. I must admit that my hunt is based on partial understanding. Especially the wildcard stuff is black magic for me, and the...