Re: [PATCH 2/8] rs6000: Don't #ifdef "short" built-in names
On 1/28/22 2:32 PM, Segher Boessenkool wrote: > On Fri, Jan 28, 2022 at 11:50:20AM -0600, Bill Schmidt wrote: >> It was recently pointed out that we get anomalous behavior when using >> __attribute__((target)) to select a CPU. As an example, when building for >> -mcpu=power8 but using __attribute__((target("mcpu=power10")), it is legal >> to call __builtin_vec_mod, but not vec_mod, even though these are >> equivalent. This is because the equivalence is established with a #define >> that is guarded by #ifdef _ARCH_PWR10. > Yeah that is bad. > >> This goofy behavior occurs with both the old builtins support and the >> new. One of the goals of the new builtins support was to make sure all >> appropriate interfaces are available using __attribute__((target)), so I >> failed in this respect. This patch corrects the problem by removing the >> apply. For example, #ifdef __PPU__ is still appropriate. > "By removing the apply"... What does that mean? Er, wow. Meant to say "by removing the #define." Strange error... will fix. Thanks for catching that! Bill > > Nice cleanup (and nice bugfix of course). Okay for trunk (with that > comment improved a bit perhaps). Thanks! > > > Segher
Re: [PATCH 2/8] rs6000: Don't #ifdef "short" built-in names
On Fri, Jan 28, 2022 at 11:50:20AM -0600, Bill Schmidt wrote: > It was recently pointed out that we get anomalous behavior when using > __attribute__((target)) to select a CPU. As an example, when building for > -mcpu=power8 but using __attribute__((target("mcpu=power10")), it is legal > to call __builtin_vec_mod, but not vec_mod, even though these are > equivalent. This is because the equivalence is established with a #define > that is guarded by #ifdef _ARCH_PWR10. Yeah that is bad. > This goofy behavior occurs with both the old builtins support and the > new. One of the goals of the new builtins support was to make sure all > appropriate interfaces are available using __attribute__((target)), so I > failed in this respect. This patch corrects the problem by removing the > apply. For example, #ifdef __PPU__ is still appropriate. "By removing the apply"... What does that mean? Nice cleanup (and nice bugfix of course). Okay for trunk (with that comment improved a bit perhaps). Thanks! Segher
[PATCH 2/8] rs6000: Don't #ifdef "short" built-in names
It was recently pointed out that we get anomalous behavior when using __attribute__((target)) to select a CPU. As an example, when building for -mcpu=power8 but using __attribute__((target("mcpu=power10")), it is legal to call __builtin_vec_mod, but not vec_mod, even though these are equivalent. This is because the equivalence is established with a #define that is guarded by #ifdef _ARCH_PWR10. This goofy behavior occurs with both the old builtins support and the new. One of the goals of the new builtins support was to make sure all appropriate interfaces are available using __attribute__((target)), so I failed in this respect. This patch corrects the problem by removing the apply. For example, #ifdef __PPU__ is still appropriate. Bootstrapped and tested on powerpc64le-linux-gnu with no regressions. Is this okay for trunk? Thanks, Bill 2022-01-06 Bill Schmidt gcc/ * config/rs6000/rs6000-overload.def (VEC_ABSD): Remove #ifdef token. (VEC_BLENDV): Likewise. (VEC_BPERM): Likewise. (VEC_CFUGE): Likewise. (VEC_CIPHER_BE): Likewise. (VEC_CIPHERLAST_BE): Likewise. (VEC_CLRL): Likewise. (VEC_CLRR): Likewise. (VEC_CMPNEZ): Likewise. (VEC_CNTLZ): Likewise. (VEC_CNTLZM): Likewise. (VEC_CNTTZM): Likewise. (VEC_CNTLZ_LSBB): Likewise. (VEC_CNTM): Likewise. (VEC_CNTTZ): Likewise. (VEC_CNTTZ_LSBB): Likewise. (VEC_CONVERT_4F32_8F16): Likewise. (VEC_DIV): Likewise. (VEC_DIVE): Likewise. (VEC_EQV): Likewise. (VEC_EXPANDM): Likewise. (VEC_EXTRACT_FP_FROM_SHORTH): Likewise. (VEC_EXTRACT_FP_FROM_SHORTL): Likewise. (VEC_EXTRACTH): Likewise. (VEC_EXTRACTL): Likewise. (VEC_EXTRACTM): Likewise. (VEC_EXTRACT4B): Likewise. (VEC_EXTULX): Likewise. (VEC_EXTURX): Likewise. (VEC_FIRSTMATCHINDEX): Likewise. (VEC_FIRSTMACHOREOSINDEX): Likewise. (VEC_FIRSTMISMATCHINDEX): Likewise. (VEC_FIRSTMISMATCHOREOSINDEX): Likewise. (VEC_GB): Likewise. (VEC_GENBM): Likewise. (VEC_GENHM): Likewise. (VEC_GENWM): Likewise. (VEC_GENDM): Likewise. (VEC_GENQM): Likewise. (VEC_GENPCVM): Likewise. (VEC_GNB): Likewise. (VEC_INSERTH): Likewise. (VEC_INSERTL): Likewise. (VEC_INSERT4B): Likewise. (VEC_LXVL): Likewise. (VEC_MERGEE): Likewise. (VEC_MERGEO): Likewise. (VEC_MOD): Likewise. (VEC_MSUB): Likewise. (VEC_MULH): Likewise. (VEC_NAND): Likewise. (VEC_NCIPHER_BE): Likewise. (VEC_NCIPHERLAST_BE): Likewise. (VEC_NEARBYINT): Likewise. (VEC_NMADD): Likewise. (VEC_ORC): Likewise. (VEC_PDEP): Likewise. (VEC_PERMX): Likewise. (VEC_PEXT): Likewise. (VEC_POPCNT): Likewise. (VEC_PARITY_LSBB): Likewise. (VEC_REPLACE_ELT): Likewise. (VEC_REPLACE_UN): Likewise. (VEC_REVB): Likewise. (VEC_RINT): Likewise. (VEC_RLMI): Likewise. (VEC_RLNM): Likewise. (VEC_SBOX_BE): Likewise. (VEC_SIGNEXTI): Likewise. (VEC_SIGNEXTLL): Likewise. (VEC_SIGNEXTQ): Likewise. (VEC_SLDB): Likewise. (VEC_SLV): Likewise. (VEC_SPLATI): Likewise. (VEC_SPLATID): Likewise. (VEC_SPLATI_INS): Likewise. (VEC_SQRT): Likewise. (VEC_SRDB): Likewise. (VEC_SRV): Likewise. (VEC_STRIL): Likewise. (VEC_STRIL_P): Likewise. (VEC_STRIR): Likewise. (VEC_STRIR_P): Likewise. (VEC_STXVL): Likewise. (VEC_TERNARYLOGIC): Likewise. (VEC_TEST_LSBB_ALL_ONES): Likewise. (VEC_TEST_LSBB_ALL_ZEROS): Likewise. (VEC_VEE): Likewise. (VEC_VES): Likewise. (VEC_VIE): Likewise. (VEC_VPRTYB): Likewise. (VEC_VSCEEQ): Likewise. (VEC_VSCEGT): Likewise. (VEC_VSCELT): Likewise. (VEC_VSCEUO): Likewise. (VEC_VSEE): Likewise. (VEC_VSES): Likewise. (VEC_VSIE): Likewise. (VEC_VSTDC): Likewise. (VEC_VSTDCN): Likewise. (VEC_VTDC): Likewise. (VEC_XL): Likewise. (VEC_XL_BE): Likewise. (VEC_XL_LEN_R): Likewise. (VEC_XL_SEXT): Likewise. (VEC_XL_ZEXT): Likewise. (VEC_XST): Likewise. (VEC_XST_BE): Likewise. (VEC_XST_LEN_R): Likewise. (VEC_XST_TRUNC): Likewise. (VEC_XXPERMDI): Likewise. (VEC_XXSLDWI): Likewise. (VEC_TSTSFI_EQ_DD): Likewise. (VEC_TSTSFI_EQ_TD): Likewise. (VEC_TSTSFI_GT_DD): Likewise. (VEC_TSTSFI_GT_TD): Likewise. (VEC_TSTSFI_LT_DD): Likewise. (VEC_TSTSFI_LT_TD): Likewise. (VEC_TSTSFI_OV_DD): Likewise. (VEC_TSTSFI_OV_TD): Likewise. (VEC_VADDCUQ): Likewise. (VEC_VADDECUQ):