[LLVMdev] IR Liveness Analysis?

Das, Dibyendu Dibyendu.Das at amd.com
Thu Jul 17 04:31:52 PDT 2014


We did some further work on the lines of the Boissinot paper. You can have a look at:

Efficient liveness computation using merge sets and DJ-graphs (in TACO, Jan 2012)
http://dl.acm.org/citation.cfm?id=2086706

-----Original Message-----
From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On Behalf Of Andrew Trick
Sent: Thursday, July 17, 2014 1:27 PM
To: Philip Reames
Cc: LLVMdev at cs.uiuc.edu
Subject: Re: [LLVMdev] IR Liveness Analysis?


> On Jul 16, 2014, at 2:51 PM, Philip Reames <listmail at philipreames.com> wrote:
> 
> 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

FWIW, "Computing Liveness Sets for SSA" by Boissinot is my favorite paper on liveness:
http://hal.inria.fr/docs/00/58/53/03/PDF/RR-7503.pdf

They describe a nice 2-pass data flow algorithm. I'm not aware that anyone has implemented this for LLVM. It works well if you can represent liveness as a bitset, but you'll probably be stuck with a DenseMap of pointer values which would not be efficient.


LLVM's own LiveVariables is a path-exploration that computes a set of blocks for each variable. You could actually add pointers to the safepoints as you go this way and don't need to store any liveness results. You just need a set of visited blocks as you traverse. The easiest thing to do is probably to port this from Machine IR to LLVM IR.

-Andy

_______________________________________________
LLVM Developers mailing list
LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list