code optimized away before a deopt

Doug Simon doug.simon at oracle.com
Sat Nov 23 08:23:58 PST 2013


On Nov 23, 2013, at 5:18 PM, Lukas Stadler <lukas.stadler at jku.at> wrote:

> But it _is_ ok to remove side effecting nodes, because we know they will be reelected.

Yes, normally, but when you write this pattern in a snippet, then this won’t be true right, since we don’t resume execution in the bytecode of the snippet (yet!). That why I was thinking at least a warning would be a good idea.

-Doug

> Maybe the cleanup operations could be part of a special purpose deopt node?
> 
> - Lukas
> 
> Von meinem iPhone gesendet
> 
>> Am 23.11.2013 um 16:39 schrieb Doug Simon <doug.simon at oracle.com>:
>> 
>> This is done by the ConvertDeoptimizeToGuardPhase which replaces conditionals where one branch ends in a deopt with a GuardNode. This does indeed have the side effect of (silently) deleting all other nodes on that deopt-terminated branch. We should add some code to either make the deletion not silent or better, throw an error if these are any side-effecting nodes that will be deleted.
>> 
>> -Doug
>> 
>>> On Nov 23, 2013, at 1:58 AM, Deneau, Tom <tom.deneau at amd.com> wrote:
>>> 
>>> I've noticed that if I have a snippet that does a test and if the test fails, branches to a block that does some cleanup operations and then calls DeoptimizeNode.deopt(xxx, yyy), the cleanup code  gets "optimized away".  I guess this is related to what Gilles was talking about, maybe the cleanup operations were considered not state changing?
>>> 
>>> In our current state of HSAIL backend, a deopt just returns early from the kernel.   Is there something I can do to make the cleanup code get emitted before the deopt?
>>> 
>>> -- Tom
>> 



More information about the graal-dev mailing list