[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