Suppose I have in my CFG (among others) two basic blocks A and B, with an edge from A to B. I need to do the following:
- get the set S of live values across that edge
- map each of them to another value (S->S’)
- replace - in B and its successors - all the uses of values in S with the mapped values (S’)
Does LLVM provide an easy way to do this (because I can’t seem to be able to find it)? If not, do you have any suggestions about how to do it?
I forgot to add that it doesn’t have to be exactely the set of live values: it can also be an overapproximation, i.e. S might contain also values that are not live anymore
From the fact that nobody is replying I guess there’s no easy way to do what I asked.
Can you just confirm then that the following is a meaningful way to do it?
-
D_b ← set of dominators of BB b
-
S_b ← set containing b and its successors (optional)
-
VD_b ← set of the values defined in D_b
-
VS_b ← set of the values with uses in S_b (optional)
-
LV_b ← VD_b ∩ VS_b, i.e. the live values (optional, otherwise LV_b = VD_b)
-
create the value mapping LV_b → LV’_b
-
apply the mapping to the uses in VS_b
the points marked (optional) are needed only if we don’t want an overapproximation of the set of live values. To keep things simple, let’s assume that b has a single predecessor.
Is this correct? Any flaws?
Hi,
From the fact that nobody is replying I guess there's no easy way to do
what I asked.
Can you just confirm then that the following is a meaningful way to do it?
* D_b <- set of dominators of BB b
* S_b <- set containing b and its successors (optional)
* VD_b <- set of the values defined in D_b
* VS_b <- set of the values with uses in S_b (optional)
* LV_b <- VD_b ∩ VS_b, i.e. the live values (optional, otherwise
LV_b = VD_b)
* create the value mapping LV_b -> LV'_b
* apply the mapping to the uses in VS_b
I think your approach is correct, but there are more optimized approaches to compute sets of Live values.
I suggest you have a look at the Phd thesis of Benoit Boissinot, chapter 3, that you can find here:
http://bboissin.appspot.com/thesis.html
Hope this helps,
Julien