That's the way Intel defined the CPUID bits. I definitely see things like this in the backend
let Predicates = [HasBWI, HasVLX] and the comma there does mean AND so at least some of it is enforced. On Fri, Oct 16, 2015 at 12:35 AM, Eric Christopher <echri...@gmail.com> wrote: > Also, is the backend enforcing this? I.e. I should be able to construct a > testcase that has avx512vl or avx512bw that will fail to select yes? > > -eric > > On Fri, Oct 16, 2015 at 12:34 AM Eric Christopher <echri...@gmail.com> > wrote: > >> 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 >>> >> -- ~Craig
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits