> 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