This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] vrp: remove rendundant has_single_use tests
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Patrick Palka <patrick at parcs dot ath dot cx>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 21 Apr 2016 12:13:10 +0200
- Subject: Re: [PATCH] vrp: remove rendundant has_single_use tests
- Authentication-results: sourceware.org; auth=none
- References: <1461192328-25630-1-git-send-email-patrick at parcs dot ath dot cx> <CA+C-WL_Oi0jss_Kw+qDc9CxVU-RUE5awFbDK5TpEv2Ru14d40Q at mail dot gmail dot com>
On Thu, Apr 21, 2016 at 2:47 AM, Patrick Palka <patrick@parcs.ath.cx> wrote:
> On Wed, Apr 20, 2016 at 6:45 PM, Patrick Palka <patrick@parcs.ath.cx> wrote:
>> During assert-location discovery, if an SSA name is live according to
>> live_on_edge() on some outgoing edge E, then the SSA name definitely has
>> at least two uses: the use on the outgoing edge, and the use in some BB
>> dominating E->src from which the SSA_NAME and the potential assertion
>> was discovered. These two uses can't be the same because the liveness
>> array is populated on-the-fly in reverse postorder so the latter use
>> which dominates BB couldn't have yet contributed to the liveness bitmap.
>>
>> So AFAICT it's not necessary to check live_on_edge() as well as
>> !has_single_use() since the former check will imply the latter. So this
>> patch removes these redundant calls to has_single_use() (and alse
>> replaces the use of has_single_use() in find_assert_locations_1 with a
>> liveness bitmap test which should be cheaper and more accurate).
>>
>> I bootstrapped and regtested this change on x86_64-pc-linux-gnu. I also
>> confirmed that the number of calls made to register_new_assert_for
>> before and after the patch remains the same during compilation of
>> libstdc++ and during compilation of gimple-match.c and when running the
>> tree-ssa.exp testsuite. Does this look OK to commit?
>>
>> gcc/ChangeLog:
>>
>> * tree-vrp.c (register_edge_assert_for_2): Remove redundant
>> has_single_use() tests.
>> (register_edge_assert_for_1): Likewise.
>> (find_assert_locations_1): Check the liveness bitmap instead of
>> calling has_single_use().
>
> By the way, would it be reasonable to cache/precompute the number of
> non-debug uses each ssa name has so that has_single_use, has_zero_uses
> etc are much cheaper?
Not sure whether that's good (think of the need to update this plus the
storage required for it). Maybe keep the immediate use list in order
{ real uses, debug uses }?
(thus do inserting at head/tail depending on use stmt case)
Richard.