Looks like we'll need "and" for ARM's builtins as well - several require things like neon+fp16 or neon+vfp4.
Eric Christopher <echri...@gmail.com> writes: > Right. My current direction is going to be: > > "foo+bar" we can represent as "and" > "foo,bar" we'll continue to represent as "or" > > this will lead to things like (possibly): > > "foo+bar, baz" - "either foo and bar, or baz." > > -eric > > On Fri, Oct 16, 2015 at 11:41 AM Justin Bogner <m...@justinbogner.com> > wrote: > >> Hm. Well, supporting both "and" and "or" combinations here sounds like >> an unpleasant path to go down. I guess the question is, which is >> weirder? >> >> - With fma, we have fma4 which is basically a synonym as far as >> intrinsics go - some chips have 3-argument versions and some have 4, >> but I don't think any of the intrinsics reflect that. >> >> - With avx512, we have combinations of features which introduce new >> intrinsics, since the supported elements and supported vector types >> are more or less orthogonal. >> >> I guess the fma situation is easier to special case if we want to avoid >> having to parse expressions here. Ie, we could have some kind of >> meta-feature that expands to "fma or fma4". Of course, the obvious name >> for that is "fma", which means fma3 today... >> >> Eric Christopher via cfe-commits <cfe-commits@lists.llvm.org> writes: >> > Lovely. Cc'ing Justin here. We'll need to figure out some change for >> these >> > builtins here if we need to have and as well as or. >> > >> > (Why on earth are these builtins subject to two separate features? *sigh* >> > It's ridiculous.) >> > >> > -eric >> > >> > On Thu, Oct 15, 2015 at 11:59 PM Craig Topper <craig.top...@gmail.com> >> > wrote: >> > >> >> Correct you avx512vl means it support 128 and 256-bit vectors. avx512bw >> >> means it supports byte and word elements. So you actually need both. >> >> >> >> On Thu, Oct 15, 2015 at 11:57 PM, Eric Christopher <echri...@gmail.com> >> >> wrote: >> >> >> >>> The comma separated list is currently represented as "one of these". I >> >>> couldn't parse your first sentence, for the avx512 ones are you saying >> that >> >>> it requires both and not just one of the options? >> >>> >> >>> -eric >> >>> >> >>> On Thu, Oct 15, 2015 at 11:55 PM Craig Topper <craig.top...@gmail.com> >> >>> wrote: >> >>> >> >>>> So for the AVX512 ones that list 2 features those features are both >> >>>> required, but for FMA you need either one of the features but not >> both. >> >>>> What is the comma separated list currently implemented as? >> >>>> >> >>>> On Thu, Oct 15, 2015 at 3:46 PM, Eric Christopher via cfe-commits < >> >>>> cfe-commits@lists.llvm.org> wrote: >> >>>> >> >>>>> Author: echristo >> >>>>> Date: Thu Oct 15 17:46:02 2015 >> >>>>> New Revision: 250470 >> >>>>> >> >>>>> URL: http://llvm.org/viewvc/llvm-project?rev=250470&view=rev >> >>>>> Log: >> >>>>> Fix the subtarget features required by some x86 builtins. >> >>>>> >> >>>>> Update the fma builtins to be fma/fma4 until some we can find some >> >>>>> documentation either way. >> >>>>> >> >>>>> Update a couple of the avx intrinsics because they were in the wrong >> >>>>> category. >> >>>>> >> >>>>> Modified: >> >>>>> cfe/trunk/include/clang/Basic/BuiltinsX86.def >> >>>>> >> >>>>> Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def >> >>>>> URL: >> >>>>> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsX86.def?rev=250470&r1=250469&r2=250470&view=diff >> >>>>> >> >>>>> >> ============================================================================== >> >>>>> --- cfe/trunk/include/clang/Basic/BuiltinsX86.def (original) >> >>>>> +++ cfe/trunk/include/clang/Basic/BuiltinsX86.def Thu Oct 15 17:46:02 >> >>>>> 2015 >> >>>>> @@ -718,38 +718,38 @@ TARGET_BUILTIN(__builtin_ia32_sha256msg1 >> >>>>> TARGET_BUILTIN(__builtin_ia32_sha256msg2, "V4iV4iV4i", "", "sha") >> >>>>> >> >>>>> // FMA >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmaddps, "V4fV4fV4fV4f", "", "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmaddpd, "V2dV2dV2dV2d", "", "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmaddss, "V4fV4fV4fV4f", "", "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmaddsd, "V2dV2dV2dV2d", "", "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmsubps, "V4fV4fV4fV4f", "", "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmsubpd, "V2dV2dV2dV2d", "", "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmsubss, "V4fV4fV4fV4f", "", "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmsubsd, "V2dV2dV2dV2d", "", "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfnmaddps, "V4fV4fV4fV4f", "", "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfnmaddpd, "V2dV2dV2dV2d", "", "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfnmaddss, "V4fV4fV4fV4f", "", "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfnmaddsd, "V2dV2dV2dV2d", "", "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfnmsubps, "V4fV4fV4fV4f", "", "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfnmsubpd, "V2dV2dV2dV2d", "", "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfnmsubss, "V4fV4fV4fV4f", "", "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfnmsubsd, "V2dV2dV2dV2d", "", "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmaddsubps, "V4fV4fV4fV4f", "", >> "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd, "V2dV2dV2dV2d", "", >> "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmsubaddps, "V4fV4fV4fV4f", "", >> "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmsubaddpd, "V2dV2dV2dV2d", "", >> "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmaddps256, "V8fV8fV8fV8f", "", >> "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmaddpd256, "V4dV4dV4dV4d", "", >> "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmsubps256, "V8fV8fV8fV8f", "", >> "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmsubpd256, "V4dV4dV4dV4d", "", >> "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfnmaddps256, "V8fV8fV8fV8f", "", >> "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfnmaddpd256, "V4dV4dV4dV4d", "", >> "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfnmsubps256, "V8fV8fV8fV8f", "", >> "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfnmsubpd256, "V4dV4dV4dV4d", "", >> "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmaddsubps256, "V8fV8fV8fV8f", "", >> >>>>> "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd256, "V4dV4dV4dV4d", "", >> >>>>> "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmsubaddps256, "V8fV8fV8fV8f", "", >> >>>>> "fma") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_vfmsubaddpd256, "V4dV4dV4dV4d", "", >> >>>>> "fma") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmaddps, "V4fV4fV4fV4f", "", >> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmaddpd, "V2dV2dV2dV2d", "", >> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmaddss, "V4fV4fV4fV4f", "", >> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmaddsd, "V2dV2dV2dV2d", "", >> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmsubps, "V4fV4fV4fV4f", "", >> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmsubpd, "V2dV2dV2dV2d", "", >> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmsubss, "V4fV4fV4fV4f", "", >> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmsubsd, "V2dV2dV2dV2d", "", >> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfnmaddps, "V4fV4fV4fV4f", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfnmaddpd, "V2dV2dV2dV2d", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfnmaddss, "V4fV4fV4fV4f", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfnmaddsd, "V2dV2dV2dV2d", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfnmsubps, "V4fV4fV4fV4f", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfnmsubpd, "V2dV2dV2dV2d", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfnmsubss, "V4fV4fV4fV4f", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfnmsubsd, "V2dV2dV2dV2d", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmaddsubps, "V4fV4fV4fV4f", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd, "V2dV2dV2dV2d", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmsubaddps, "V4fV4fV4fV4f", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmsubaddpd, "V2dV2dV2dV2d", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmaddps256, "V8fV8fV8fV8f", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmaddpd256, "V4dV4dV4dV4d", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmsubps256, "V8fV8fV8fV8f", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmsubpd256, "V4dV4dV4dV4d", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfnmaddps256, "V8fV8fV8fV8f", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfnmaddpd256, "V4dV4dV4dV4d", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfnmsubps256, "V8fV8fV8fV8f", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfnmsubpd256, "V4dV4dV4dV4d", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmaddsubps256, "V8fV8fV8fV8f", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd256, "V4dV4dV4dV4d", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmsubaddps256, "V8fV8fV8fV8f", "", >> >>>>> "fma,fma4") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_vfmsubaddpd256, "V4dV4dV4dV4d", "", >> >>>>> "fma,fma4") >> >>>>> >> >>>>> TARGET_BUILTIN(__builtin_ia32_vfmaddpd128_mask, "V2dV2dV2dV2dUc", >> "", >> >>>>> "avx512vl") >> >>>>> TARGET_BUILTIN(__builtin_ia32_vfmaddpd128_mask3, "V2dV2dV2dV2dUc", >> "", >> >>>>> "avx512vl") >> >>>>> @@ -952,8 +952,8 @@ TARGET_BUILTIN(__builtin_ia32_cmpps256_m >> >>>>> TARGET_BUILTIN(__builtin_ia32_cmpps128_mask, "UcV4fV4fIiUc", "", >> >>>>> "avx512vl") >> >>>>> >> >>>>> TARGET_BUILTIN(__builtin_ia32_pcmpeqb512_mask, "LLiV64cV64cLLi", "", >> >>>>> "avx512bw") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_pcmpeqd512_mask, "sV16iV16is", "", >> >>>>> "avx512bw") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_pcmpeqq512_mask, "cV8LLiV8LLic", "", >> >>>>> "avx512bw") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_pcmpeqd512_mask, "sV16iV16is", "", >> >>>>> "avx512f") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_pcmpeqq512_mask, "cV8LLiV8LLic", "", >> >>>>> "avx512f") >> >>>>> TARGET_BUILTIN(__builtin_ia32_pcmpeqw512_mask, "iV32sV32si", "", >> >>>>> "avx512bw") >> >>>>> >> >>>>> TARGET_BUILTIN(__builtin_ia32_pcmpeqb256_mask, "iV32cV32ci", "", >> >>>>> "avx512vl,avx512bw") >> >>>>> @@ -966,8 +966,8 @@ TARGET_BUILTIN(__builtin_ia32_pcmpeqq128 >> >>>>> TARGET_BUILTIN(__builtin_ia32_pcmpeqw128_mask, "cV8sV8sc", "", >> >>>>> "avx512vl,avx512bw") >> >>>>> >> >>>>> TARGET_BUILTIN(__builtin_ia32_pcmpgtb512_mask, "LLiV64cV64cLLi", "", >> >>>>> "avx512bw") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_pcmpgtd512_mask, "sV16iV16is", "", >> >>>>> "avx512bw") >> >>>>> -TARGET_BUILTIN(__builtin_ia32_pcmpgtq512_mask, "cV8LLiV8LLic", "", >> >>>>> "avx512bw") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_pcmpgtd512_mask, "sV16iV16is", "", >> >>>>> "avx512f") >> >>>>> +TARGET_BUILTIN(__builtin_ia32_pcmpgtq512_mask, "cV8LLiV8LLic", "", >> >>>>> "avx512f") >> >>>>> TARGET_BUILTIN(__builtin_ia32_pcmpgtw512_mask, "iV32sV32si", "", >> >>>>> "avx512bw") >> >>>>> >> >>>>> TARGET_BUILTIN(__builtin_ia32_pcmpgtb256_mask, "iV32cV32ci", "", >> >>>>> "avx512vl,avx512bw") >> >>>>> >> >>>>> >> >>>>> _______________________________________________ >> >>>>> cfe-commits mailing list >> >>>>> cfe-commits@lists.llvm.org >> >>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> >>>>> >> >>>> >> >>>> >> >>>> >> >>>> -- >> >>>> ~Craig >> >>>> >> >>> >> >> >> >> >> >> -- >> >> ~Craig >> >> >> > _______________________________________________ >> > cfe-commits mailing list >> > cfe-commits@lists.llvm.org >> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits