[PATCH 0/3][POPCOUNT]
Jeff Law
law@redhat.com
Fri Jul 6 05:51:00 GMT 2018
On 07/05/2018 11:39 PM, Richard Biener wrote:
> On July 6, 2018 12:03:11 AM GMT+02:00, Jeff Law <law@redhat.com> wrote:
>> On 06/24/2018 08:41 PM, Kugan Vivekanandarajah wrote:
>>> Hi Jeff,
>>>
>>> Thanks for the comments.
>>>
>>> On 23 June 2018 at 02:06, Jeff Law <law@redhat.com> wrote:
>>>> On 06/22/2018 03:11 AM, Kugan Vivekanandarajah wrote:
>>>>> When we set niter with maybe_zero, currently final_value_relacement
>>>>> will not happen due to expression_expensive_p not handling. Patch 1
>>>>> adds this.
>>>>>
>>>>> With that we have the following optimized gimple.
>>>>>
>>>>> <bb 2> [local count: 118111601]:
>>>>> if (b_4(D) != 0)
>>>>> goto <bb 3>; [89.00%]
>>>>> else
>>>>> goto <bb 4>; [11.00%]
>>>>>
>>>>> <bb 3> [local count: 105119324]:
>>>>> _2 = (unsigned long) b_4(D);
>>>>> _9 = __builtin_popcountl (_2);
>>>>> c_3 = b_4(D) != 0 ? _9 : 1;
>>>>>
>>>>> <bb 4> [local count: 118111601]:
>>>>> # c_12 = PHI <c_3(3), 0(2)>
>>>>>
>>>>> I assume that 1 in b_4(D) != 0 ? _9 : 1; is OK (?) because when
>> the
>>>>> latch execute zero times for b_4 == 0 means that the body will
>> execute
>>>>> ones.
>>>> ISTM that DOM ought to have simplified the conditional, unless
>> there's
>>>> some other way to get to bb3. We know that b_4 is nonzero and thus
>> c_3
>>>> must have the value _9.
>>> As of now, dom is not optimizing it. With the attached hack, it can
>> be made to.
>> What's strange is I'm not getting the c_3 = (b_4 != 0) ... in any of
>> the
>> dumps I'm looking at. Instead it's c_3 = _9, which is what I would
>> expect since we know that b_4 != 0
>>
>>
>> My tests have been on x86_64 and aarch64 linux targets. I've tried
>> with
>> patch#1 installed as well as with patch #1 and patch #2 together.
>>
>> What target, what flags and what patches do I need to see this?
>
> I believe it has been fixed in niters analysis to avoid the condition if it is known to be true.
Ah. Presumably the change from 6-16. I'll back that out and retry.
jeff
More information about the Gcc-patches
mailing list