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