On Tue, Jun 15, 2004 at 03:07:18PM -0500, Patrick Meredith
wrote:> How do you remove an instruction with uses before replacing said uses?
You cannot, here's why:
a = add b, c
d = add a, b
Now if we delete the first instruction that defines a, what do we get?
d = add <invalid>, b
Now try to iterate over the values of this instruction and read their
properties.... You can't, because the instruction is invalid as it's
pointing to deallocated memory. Hence, you must delete uses before
deleting the instruction itself.
This is not to make life difficult for you, it's to keep code
well-formed at all times.
> Opt exits immediately if you do this, it seems like it should wait
> until your pass finishes running. The only way I can get around it
> now is to work recursively post order removing the use before the def,
> which is slower than if I could just remove them in linear order! Oh
> well.
Perhaps you should consider what exactly you are trying to do if this
instruction really does have so many uses... If you are deleting a temporary
instruction, it probably doesn't have such a "deep" tree of uses
below it.
--
Misha Brukman :: http://misha.brukman.net :: http://llvm.cs.uiuc.edu