[LLVMdev] IR Liveness Analysis?
Philip Reames
listmail at philipreames.com
Wed Jul 16 16:40:00 PDT 2014
Not quite. In fact, that definition is fundamentally flawed as a
measure of liveness. Consider:
BB1:
def a
br i1 undef, BB2, BB3
BB2:
Instruction I //Is a live here?
br BB3
BB3:
use a
In the above, "use a" is not dominated by I, but is live in that there
is a path from "def a" to "use a" which includes "I".
The question I want to answer is: "Given a value, V, and a interesting
location, L, is there a possible path from L to any use of V which does
not pass the definition of V?" An alternate formulation is "Is there a
dynamic path from V to some use of V which includes L?" In particular,
I want to be able to answer this question for large numbers of values,
moderate numbers of locations, and do it efficiently.
I'm fine with a slightly conservative answer (i.e. "yes" when
dynamically the answer is "no"), but not an incorrect answer ("no" when
there is such a path at runtime). This is pretty much the textbook
definition of variable liveness.
Philip
On 07/16/2014 03:23 PM, Hal Finkel wrote:
> Philip,
>
> To clarify, you want an analysis that answers this question: Are there are any uses of a value, V, that are dominated by an instruction, I. Is that right?
>
> -Hal
>
> ----- Original Message -----
>> From: "Philip Reames" <listmail at philipreames.com>
>> To: LLVMdev at cs.uiuc.edu
>> Sent: Wednesday, July 16, 2014 4:51:42 PM
>> Subject: [LLVMdev] IR Liveness Analysis?
>>
>> 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
>> _______________________________________________
>> 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