r250470 - Fix the subtarget features required by some x86 builtins.

Craig Topper via cfe-commits cfe-commits at lists.llvm.org
Fri Oct 16 00:49:28 PDT 2015


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 <echristo at 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 <echristo at 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.topper at 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 <echristo at 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.topper at 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 at 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 at lists.llvm.org
>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> ~Craig
>>>>>
>>>>
>>>
>>>
>>> --
>>> ~Craig
>>>
>>


-- 
~Craig
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151016/43a6c55b/attachment.html>


More information about the cfe-commits mailing list