Hi Andrew, on 2024/7/23 08:09, Andrew Pinski wrote: > On Sun, Jun 30, 2024 at 11:17 PM Kewen.Lin <li...@linux.ibm.com> wrote: >> >> Hi, >> >> As PR115659 shows, assuming c = x CMP y, there are some >> folding chances for patterns r = c ? 0/z : z/-1: >> - For r = c ? 0 : z, it can be folded into r = ~c & z. >> - For r = c ? z : -1, it can be folded into r = ~c | z. >> >> But BIT_AND/BIT_IOR applied on one BIT_NOT operand is a >> compound operation, I'm not sure if each target with >> vector capability have a single vector instruction for it, >> if no, it's arguable to consider it always beats vector >> selection (like vector constant gets hoisted or combined >> and selection has same latency as normal logical operation). >> So IMHO we probably need to query target with new optabs. >> So this patch is to introduce new optabs andc, iorc and its >> corresponding internal functions BIT_{ANDC,IORC} (looking >> for suggestion for naming optabs and ifns), and if targets >> defines such optabs for vector modes, it means targets >> support these hardware insns and should be not worse than >> vector selection. btw, the rs6000 changes are meant to >> give an example for a target supporting andc/iorc. >> >> Does this sound reasonable? > > Just a quick FYI (I will be making the change and testing the change). > The optab names `andc` and `iorc` unfortunately do not work with > scalar modes since there are complex modes which start with c and are > combined with the scalar modes. So for an example a pattern named > `andcsi3` is not for the optab `andc` with the mode of si but rather > for `and` optab and for the mode `csi`. The same issue happens for > `iorc` too.
ah, thanks for pointing out this! I guess a "_" can help, that is: OPTAB_D (andc_optab, "andc_$a3") OPTAB_D (iorc_optab, "iorc_$a3") but the downside is the code naming become different from "and$a3" and "ior$a3", so it seems better to use different names like what you proposed. > Thinking out loud on what names we should use instead; `andn` and > `iorn` might be ok? Does anyone else have any suggestions? FWIW, they look good to me. BR, Kewen > > Note I will also be adding the cond version of them since at least for > aarch64 SVE, bic (andc) can be conditional. > > Thanks, > Andrew Pinski > >>