Control dependence vs. builtin_unreachable
Wed Jan 9 08:45:00 GMT 2013
On Tue, Jan 8, 2013 at 5:16 PM, Jeff Law <email@example.com> wrote:
> On 01/08/2013 04:26 AM, Richard Biener wrote:
>> The issue is VRP - when you remove unreachable blocks you lose the
>> conditional statement as it is no longer necessary and thus the predicate
>> you can derive value-ranges from.
> Understood. Perhaps we could eliminate them after the first VRP pass, but
> before the second. That ought to give us the majority of the benefit of
> seeing the conditional and propagating based on the conditional, but also
> give us the benefit of eliminating the branch generating straight-line code.
> Clearly it needs more investigation, but I think it's worth exploring.
Sure - especially if we eventually move to preserve value-range information
across passes. __builtin_constant_p is a similar thing - it guards one
reachable and one unreachable path but we forcefully remove it only
during the late fold-all-builtins pass.
More information about the Gcc-patches