https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95830

--- Comment #9 from Martin Liška <marxin at gcc dot gnu.org> ---


> We can't ignore them unless VEC_COND_EXPR lowering will process them.
> That is, we have to check whether we can expand all instances of the
> compares.  This basically means we need to run "isel" on them but
> not actually commit the IL change but instead lower all cases we
> could not process.  The question is what to do about for example
> 
>     _34 = vect__1.7_28 == vect__3.11_33;
>     vect_iftmp.12_35 = VEC_COND_EXPR <_34, vect__1.7_28, vect__2.10_31>;
>     foo (_34);  
> 
> where we can ISEL the VEC_COND_EXPR together with _34 but _34 is
> live anyway.  Do we want to both lower _34 (for the use in foo)
> and keep it (for the purpose of VEC_COND_EXPR expansion)?

Likely not as seen in PR95745 where a "temporary" tmp = A == B is not
guaranteed to be expandable and so we purge it.

> I guess so.
> OTOH if the target an expand VEC_COND_EXPR <_1 == _2, ...>
> then it can expand _1 == _2 as VEC_COND_EXPR <_1 == _2, {-1,-1,-1}, 
> {0,0,0}> so this is exactly the case why I thought applying ISEL
> on both together makes sense.  Looks like it actually happens ...
> 
> Which means we don't actually need to lower the compare since
> we can expand it as VEC_COND_EXPR?

Yes, I would recommend skipping lowering of all the comparison that feeds
VEC_COND_EXPR. I'm going to prepare a patch..

Reply via email to