> fixed_scalar_and_varying_struct_p passes an _address_ rather than a MEM.
> So in these cases fixed_scalar_and_varying_struct_p effectively becomes
> a no-op on targets that don't allow MEMs in addresses and takes on
> suspicious semantics for those that do.  In the former case, every
> address is treated as "unvarying" and f_s_a_v_s_p always returns null.
> In the latter case, things like REG addresses are (wrongly) treated as
> unvarying while a MEM address might correctly be treated as varying,
> leading to false positives.
> 
> It looks like this goes back to when fixed_scalar_and_varying_struct_p
> was added in r24759 (1999).

Does this mean that MEM_IN_STRUCT_P and MEM_SCALAR_P have also been effectively 
disabled since then?

> AIUI, the true_dependence varies_p parameter exists for the benefit
> of CSE, so that it can use its local cse_rtx_varies_p function.
> All other callers should be using rtx_varies_p instead.  Question is,
> should I make that change, or is it time to get rid of
> fixed_scalar_and_varying_struct_p instead?

I'd vote for the latter (and for eliminating MEM_IN_STRUCT_P and MEM_SCALAR_P 
in the process, if the answer to the above question is positive), there is no 
point in resurrecting this now IMO.

-- 
Eric Botcazou

Reply via email to