blob: eb0ddd73ff20ada6d1436d10c0513eff322162e4 [file] [log] [blame]
-*- text -*-
Pointer analysis to-do list
===========================
CONSTRAINT GENERATION:
- support reflection
- implement native intrinsics. These vary by platform.
- unsafe.Pointer conversions. Three options:
1) unsoundly (but type-safely) treat p=unsafe.Pointer(x) conversions as
allocations, losing aliases. This is what's currently implemented.
2) unsoundly (but type-safely) treat p=unsafe.Pointer(x) and T(p)
conversions as interface boxing and unboxing operations.
This may preserve some aliasing relations at little cost.
3) soundly track physical field offsets. (Summarise dannyb's email here.)
A downside is that we can't keep the identity field of struct
allocations that identifies the object.
OPTIMISATIONS
- pre-solver: PE and LE via HVN/HRU.
- solver: HCD, LCD.
- use sparse bitvectors for ptsets
- use sparse bitvectors for graph edges
- experiment with different worklist algorithms:
priority queue (solver visit-time order)
red-black tree (node id order)
double-ended queue (insertion order)
fast doubly-linked list (See Zhanh et al PLDI'13)
(insertion order with fast membership test)
dannyb recommends sparse bitmap.
API:
- Some optimisations (e.g. LE, PE) may change the API.
Think about them sooner rather than later.
MISC:
- Test on all platforms.
Currently we assume these go/build tags: linux, amd64, !cgo.