| -*- 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. | |
| PRESOLVER OPTIMISATIONS | |
| - use HVN, HRU, LE, PE, HCD, LCD. | |
| SOLVER: | |
| - use BDDs and/or sparse bitvectors for ptsets | |
| - use sparse bitvectors for graph edges | |
| - use BDD-based relational composition for e.g. offset computations. | |
| - 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: | |
| - Rely less on callbacks and more on a 'result' type | |
| returned by Analyze(). | |
| - Abstract the callgraph into a pure interface so that | |
| we can provide other implementations in future (e.g. RTA-based). | |
| Also provide the option to eliminate context-sensitivity | |
| in a callgraph to yield a smaller (less precise) callgraph. | |
| - Some optimisations (e.g. LE, PE) may change the API. | |
| Think about them sooner rather than later. | |
| - Eliminate Print probe now that we can query specific ssa.Values. | |
| Misc: | |
| - os.Args should point to something; currently they don't. | |
| - Test on all platforms. | |
| Currently we assume these go/build tags: linux, amd64, !cgo. |