[PATCH][RFA] Improvements to infer_nonnull_range
Richard Biener
richard.guenther@gmail.com
Mon Nov 4 12:56:00 GMT 2013
On Thu, Oct 31, 2013 at 6:41 AM, Jeff Law <law@redhat.com> wrote:
> On 10/28/13 23:02, Jeff Law wrote:
>>
>>
>> Based on a suggestion from Marc, I want to use infer_nonnull_range in
>> the erroneous path isolation optimization.
>>
>> In the process of doing that, I found a few deficiencies in
>> infer_nonnull_range that need to be addressed.
>>
>>
>> First, infer_nonnull_range_p doesn't infer ranges from a GIMPLE_RETURN
>> if the current function is marked as returns_nonnull. That's fixed in
>> the relatively obvious way.
>>
>> Second, infer_nonnull_range_p, when presented with an arglist where the
>> non-null attribute applies to all pointer arguments, it won't bother to
>> determine if OP is actually one of the arguments :( It just assumes
>> that OP is in the argument list. Opps.
>>
>> Third, I want to be able to call infer_nonnull_range with OP being 0B.
>> That lets me use infer_nonnull_range to look for explicit null pointer
>> dereferences, explicit uses of null in a return statement in functions
>> that can't return non-null and explicit uses of null arguments when
>> those arguments can't be null. Sadly, to make that work we need to use
>> operand_equal_p rather than simple pointer comparisons to see if OP
>> shows up in STMT.
>>
>> Finally, for detecting explicit null pointers, infer_nonnull_range calls
>> count_ptr_derefs. count_ptr_derefs counts things in two ways. One with
>> a FOR_EACH_SSA_TREE_OPERAND, then again with simple walks of the tree
>> structures. Not surprisingly if we're looking for an explicit 0B, then
>> the loop over the operands finds nothing, but walking the tree
>> structures does. And the checking assert triggers. This change removes
>> the assert and instead sets *num_uses_p to a sane value.
>>
>> I don't have testcases for this stuff that are independent of the
>> erroneous path isolation optimization. However, each is triggered by
>> tests I'll include in the the erroneous path isolation patch.
>>
>> Bootstrapped and regression tested on x86_64-unknown-linux-gnu. OK for
>> the trunk?
>
> I'm withdrawing this patch. While everything works exactly how I wanted, I
> think it's best to rework things a bit and totally eliminate
> count_ptr_derefs entirely.
Yes! And count_uses_and_derefs, too. See walk_stmt_load_store_addr_ops.
Richard.
> That change makes it significantly easier to move infer_nonnull_range out of
> tree-vrp.c and into gimple.c (or wherever Andrew wants it) without a
> significant modularity break.
> Jeff
>
More information about the Gcc-patches
mailing list