If you go this way (and require special GC/debugger support) you
could as well xor next/prev too and save another field.
Adding a xor is basically free and much cheaper than any cache miss
from larger data structures.
The only thing that wouldn't work is that when you have a pointer
to an arbitary element (without starting from beginning/end first)
you couldn't get previous or next.
You would pass around a BSI (basic-block/statement iterator) in this
case. The BSI would hold the previous/next as necessary.
Paolo