Unnecessary check on phi node in tree if-conversion?
Richard Biener
richard.guenther@gmail.com
Thu Apr 7 09:30:00 GMT 2016
On April 6, 2016 8:21:35 PM GMT+02:00, "Bin.Cheng" <amker.cheng@gmail.com> wrote:
>On Wed, Apr 6, 2016 at 5:07 PM, Bin.Cheng <amker.cheng@gmail.com>
>wrote:
>> Hi,
>> Function if_convertible_phi_p has below check on virtual PHI nodes:
>>
>>
>> if (any_mask_load_store)
>> return true;
>>
>> /* When there were no if-convertible stores, check
>> that there are no memory writes in the branches of the loop to
>be
>> if-converted. */
>> if (virtual_operand_p (gimple_phi_result (phi)))
>> {
>> imm_use_iterator imm_iter;
>> use_operand_p use_p;
>>
>> if (bb != loop->header)
>> {
>> if (dump_file && (dump_flags & TDF_DETAILS))
>> fprintf (dump_file, "Virtual phi not on loop->header.\n");
>> return false;
>> }
>>
>> FOR_EACH_IMM_USE_FAST (use_p, imm_iter, gimple_phi_result
>(phi))
>> {
>> if (gimple_code (USE_STMT (use_p)) == GIMPLE_PHI
>> && USE_STMT (use_p) != phi)
>> {
>> if (dump_file && (dump_flags & TDF_DETAILS))
>> fprintf (dump_file, "Difficult to handle this virtual
>phi.\n");
>> return false;
>> }
>> }
>> }
>>
>> Since the check is short-cut by any_mask_load_store, when the check
>is
>> triggered, it means there is virtual phi node but no conditional
>> memory stores? Is this possible? Plus, any_mask_load_store is set
>by
>> below code in if_convertible_gimple_assign_stmt_p:
>> if (ifcvt_can_use_mask_load_store (stmt))
>> {
>> gimple_set_plf (stmt, GF_PLF_2, true);
>> *any_mask_load_store = true;
>> return true;
>> }
>>
>> So in theory it's possible to skip aforementioned check when only
>mask
>> load is encountered.
>>
>> Any ideas?
>It's possible to have a loop like:
>
><bb header>
> .MEM_2232 = PHI <.MEM_574(179), .MEM_1247(183)>
> ...
> if (cond)
> goto <bb 1>
> else
> goto <bb2>
>
><bb 1>: //empty
><bb2>:
> .MEM_1247 = PHI <.MEM_2232(180), .MEM_2232(181)>
> if (cond2)
> goto <bb exit>
> else
> goto <bb latch>
>
><bb latch>:
> goto <bb header>
>
>So can we handle the PHI which can be degenerated in if-cvt?
I believe the check is bogus and we should drop it.
Richard.
>Thanks,
>bin
More information about the Gcc
mailing list