ifcvt limitations?

Jeff Law law@redhat.com
Tue Jun 23 19:58:00 GMT 2015


On 06/10/2015 07:36 AM, Kyrill Tkachov wrote:
>
> Thanks, I've made some progress towards making it more aggressive.
> A question since I'm in the area...
> noce_try_cmove_arith that I've been messing around with has this code:
>
>    /* A conditional move from two memory sources is equivalent to a
>       conditional on their addresses followed by a load.  Don't do this
>       early because it'll screw alias analysis.  Note that we've
>       already checked for no side effects.  */
>    /* ??? FIXME: Magic number 5.  */
>    if (cse_not_expected
>        && MEM_P (a) && MEM_P (b)
>        && MEM_ADDR_SPACE (a) == MEM_ADDR_SPACE (b)
>        && if_info->branch_cost >= 5)
>
>
> Any ideas on where the rationale for that 5 came from?
> I see it's been there since the very introduction of ifcvt.c
> I'd like to replace it with something more sane, maybe even remove it?
Richard was working on Itanic at the time.  So I can speculate that the 
transformation wasn't generally profitable on other targets, so he 
picked a value that was high enough for the code to only trigger on 
Itanic (and perhaps Alphas since he was still doing a lot of work on 
them and knew their properties quite well).

Richard is currently on PTO, so I don't think you're likely to get a 
quick response from him with further details.

jeff



More information about the Gcc mailing list