At some points of my program, I would like to know if some LLVM values are live or not. For that, I'm using the LiveValues pass, which gives me methods such as :
isLiveThroughBlock(Value * v, BasicBlock * b)
isKilledInBlock(Value * v, BasicBlock * b)
* If I understand well the code, dominator trees are used to compute the LiveThrough blocks.
The definition of dominator in graph theory is the following:
"A node <http://en.wikipedia.org/wiki/Node_(computer_science)> d /dominates/ a node n if every path from the /start node/ to n must go through d."
Then, that means in some cases, the method isLiveThroughBlock is going to answer false, whereas the right answer is true. Is it right ?
* To compute the set of blocks where isKilledInBlock is true, we compute the smallest loop containing both the definition of the variable and all its use, and isKilledInBlock becomes true in all ExitingBlock of this loop.
An exiting block is a block inside the loop that have successors outside of the loop.
So, even if isKilledInBlock(v,b)=true, that doesn't mean the value can't be used anymore: if the exiting block has a successor in the loop, then the value will be used again.
Do I understand well ? If yes, how is it possible to say for sure that a value isn't used any more ?
Thanks for your help