This seems, at least upon first read, analogous to global value numbering (GVN). Or, depending on how you look at it, common subexpression elimination (CSE). I am mostly wondering why they are not mentioned in the article.
I don't know how deep call stacks go (and also separately don't know if I am allowed to quote stats like that) but people tend to not do points-to with k higher than 2 or 3 because it explodes the whole graph
It's not really supposed to be for any particular language. We didn't want to even say Ruby in the title because the experiment is on a very very (very!) stripped-down Ruby.
IMO the more interesting thing here is incrementally discovering and building the interprocedural flows-to relation.
Probably a different thing entirely than the specialization. A new lattice. A pair of uint64 for int ranges that has its own join function, maybe. CF Bolz-Tereick has a good blog post about this for pypy and it also talks about known bits
And another bit of info: it's much harder to reliably track that, because as soon as the list (for example) escapes, its elements could have any type and it could be any size. PyPy has storage strategies and speculative typing (with guards and deoptimization) that help with this kind of thing.
I got one 1.5 years ago and still enjoying. I hope it will be the laptop of Theseus of the rest of my life, but some unexpected development will probably happen that will make that unlikely.