list of available/valid values near an instruction

I wonder if there is a list of available/valid values (globals, constants
arguments,..) in the scope of a given instruction?

Iterating over the instructions of a module, i would like to know which
values are accessible in the context of the instruction, possibly replacing
the instructions operand by a valid available other operand.


I'm not sure if I understand your question correctly, but all values whose definitions dominate the instruction that you are looking at are available. Globals and function arguments are always available in a given module or function.


Hi Krzysztof
yes, they are available. What I want is to have a list of those values I can
iterate over....


For instructions you can simply iterate over the current basic block from the instruction before the one that you are looking at, up to the beginning of the block. Then iterate over all instructions in all blocks dominating the current block. (You can get those from the dominator tree, following the immediate-dominator chain.)

There is no such iterator that I'm aware of, so you may need to implement your own, but it should be fairly simple.


If you're still looking for example code, you can glance at the function findLiveGCValuesAtInst in It does more or less exactly this with an extra filtering step.


thank you both!

Philip Reames wrote: