[LLVMdev] IR Liveness Analysis?

Philip Reames listmail at philipreames.com
Wed Jul 16 14:51:42 PDT 2014


Is anyone aware of an existing framework for asking liveness questions 
about SSA values in the IR?  I'm looking for something more precise than 
the trivial definition provided by SSA itself.  I can write something 
myself (and will if need be), but it seemed like a generic enough 
problem that I was surprised I couldn't find something already in tree.  
Anyone know of something I've missed?

The problem I'm trying to solve is identifying pointers which might be 
live at a garbage collection safepoint.  This in the context of 
transforming the IR to insert a statepoint intrinsic to explicitly 
represent a possible object relocation.  We've been using a very straigh 
forward and, due to implementation simplicity, expensive estimation 
based on simple reachability*.  This suffices for correctness, but is 
not ideal from a performance perspective.  (To put it mildly.)

* For those curious, you can find the current implement by searching for 
"isLiveAtSafepoint" in 
https://github.com/AzulSystems/llvm-late-safepoint-placement/blob/master/lib/Transforms/Scalar/SafepointPlacementPass.cpp. 
It's a trivial reachability algorithm with special cases for inbound 
values into a phi and uses that are encountered along paths which 
contain the original definition.  We rerun the search once per 
potentially live value.  As you might imagine, that's a bit expensive.  :)

Philip



More information about the llvm-dev mailing list