39 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| -*- 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.
 |