Skip to content

Commit a10dccf

Browse files
committed
[X86] Support some Intel CPUs for cpu_specific/dispatch feature
Reviewed By: RKSimon, skan Differential Revision: https://reviews.llvm.org/D154493
1 parent 4392754 commit a10dccf

File tree

2 files changed

+68
-32
lines changed

2 files changed

+68
-32
lines changed

clang/test/CodeGen/attr-cpuspecific-cpus.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ ATTR(cpu_specific(skylake)) void CPU(void){}
3737
ATTR(cpu_specific(skylake_avx512)) void CPU(void){}
3838
ATTR(cpu_specific(cannonlake)) void CPU(void){}
3939
ATTR(cpu_specific(knm)) void CPU(void){}
40+
ATTR(cpu_specific(cascadelake)) void CPU(void){}
41+
ATTR(cpu_specific(cooperlake)) void CPU(void){}
42+
ATTR(cpu_specific(icelake_client)) void CPU(void){}
43+
ATTR(cpu_specific(tigerlake)) void CPU(void){}
44+
ATTR(cpu_specific(alderlake)) void CPU(void){}
45+
ATTR(cpu_specific(sapphirerapids)) void CPU(void){}
4046

4147
// ALIAS CPUs
4248
ATTR(cpu_specific(pentium_iii_no_xmm_regs)) void CPU0(void){}
@@ -45,3 +51,31 @@ ATTR(cpu_specific(core_3rd_gen_avx)) void CPU2(void){}
4551
ATTR(cpu_specific(core_4th_gen_avx)) void CPU3(void){}
4652
ATTR(cpu_specific(core_5th_gen_avx)) void CPU4(void){}
4753
ATTR(cpu_specific(mic_avx512)) void CPU5(void){}
54+
ATTR(cpu_specific(pentiumpro)) void CPU6(void){}
55+
ATTR(cpu_specific(pentium3)) void CPU7(void){}
56+
ATTR(cpu_specific(pentium3m)) void CPU8(void){}
57+
ATTR(cpu_specific(pentium4)) void CPU9(void){}
58+
ATTR(cpu_specific(pentium4m)) void CPU10(void){}
59+
ATTR(cpu_specific(yonah)) void CPU11(void){}
60+
ATTR(cpu_specific(prescott)) void CPU12(void){}
61+
ATTR(cpu_specific(nocona)) void CPU13(void){}
62+
ATTR(cpu_specific(core2)) void CPU14(void){}
63+
ATTR(cpu_specific(penryn)) void CPU15(void){}
64+
ATTR(cpu_specific(bonnell)) void CPU16(void){}
65+
ATTR(cpu_specific(silvermont)) void CPU17(void){}
66+
ATTR(cpu_specific(slm)) void CPU18(void){}
67+
ATTR(cpu_specific(goldmont_plus)) void CPU19(void){}
68+
ATTR(cpu_specific(tremont)) void CPU20(void){}
69+
ATTR(cpu_specific(nehalem)) void CPU21(void){}
70+
ATTR(cpu_specific(corei7)) void CPU22(void){}
71+
ATTR(cpu_specific(westmere)) void CPU23(void){}
72+
ATTR(cpu_specific(sandybridge)) void CPU24(void){}
73+
ATTR(cpu_specific(skx)) void CPU25(void){}
74+
ATTR(cpu_specific(rocketlake)) void CPU26(void){}
75+
ATTR(cpu_specific(icelake_server)) void CPU27(void){}
76+
ATTR(cpu_specific(raptorlake)) void CPU28(void){}
77+
ATTR(cpu_specific(meteorlake)) void CPU29(void){}
78+
ATTR(cpu_specific(sierraforest)) void CPU30(void){}
79+
ATTR(cpu_specific(grandridge)) void CPU31(void){}
80+
ATTR(cpu_specific(graniterapids)) void CPU32(void){}
81+
ATTR(cpu_specific(emeraldrapids)) void CPU33(void){}

llvm/lib/TargetParser/X86TargetParser.cpp

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -333,48 +333,48 @@ constexpr ProcInfo Processors[] = {
333333
{ {"pentium-mmx"}, CK_PentiumMMX, ~0U, FeaturesPentiumMMX, '\0', false },
334334
{ {"pentium_mmx"}, CK_PentiumMMX, ~0U, FeaturesPentiumMMX, 'D', true },
335335
// i686-generation processors, P6 / Pentium M microarchitecture based.
336-
{ {"pentiumpro"}, CK_PentiumPro, ~0U, FeatureCMOV | FeatureX87 | FeatureCMPXCHG8B, '\0', false },
336+
{ {"pentiumpro"}, CK_PentiumPro, ~0U, FeatureCMOV | FeatureX87 | FeatureCMPXCHG8B, 'C', false },
337337
{ {"pentium_pro"}, CK_PentiumPro, ~0U, FeatureCMOV | FeatureX87 | FeatureCMPXCHG8B, 'C', true },
338338
{ {"i686"}, CK_i686, ~0U, FeatureCMOV | FeatureX87 | FeatureCMPXCHG8B, '\0', false },
339-
{ {"pentium2"}, CK_Pentium2, ~0U, FeaturesPentium2, '\0', false },
339+
{ {"pentium2"}, CK_Pentium2, ~0U, FeaturesPentium2, 'E', false },
340340
{ {"pentium_ii"}, CK_Pentium2, ~0U, FeaturesPentium2, 'E', true },
341-
{ {"pentium3"}, CK_Pentium3, ~0U, FeaturesPentium3, '\0', false },
342-
{ {"pentium3m"}, CK_Pentium3, ~0U, FeaturesPentium3, '\0', false },
341+
{ {"pentium3"}, CK_Pentium3, ~0U, FeaturesPentium3, 'H', false },
342+
{ {"pentium3m"}, CK_Pentium3, ~0U, FeaturesPentium3, 'H', false },
343343
{ {"pentium_iii"}, CK_Pentium3, ~0U, FeaturesPentium3, 'H', true },
344344
{ {"pentium_iii_no_xmm_regs"}, CK_Pentium3, ~0U, FeaturesPentium3, 'H', true },
345345
{ {"pentium-m"}, CK_PentiumM, ~0U, FeaturesPentium4, '\0', false },
346346
{ {"pentium_m"}, CK_PentiumM, ~0U, FeaturesPentium4, 'K', true },
347347
{ {"c3-2"}, CK_C3_2, ~0U, FeaturesPentium3, '\0', false },
348-
{ {"yonah"}, CK_Yonah, ~0U, FeaturesPrescott, '\0', false },
348+
{ {"yonah"}, CK_Yonah, ~0U, FeaturesPrescott, 'L', false },
349349
// Netburst microarchitecture based processors.
350-
{ {"pentium4"}, CK_Pentium4, ~0U, FeaturesPentium4, '\0', false },
351-
{ {"pentium4m"}, CK_Pentium4, ~0U, FeaturesPentium4, '\0', false },
350+
{ {"pentium4"}, CK_Pentium4, ~0U, FeaturesPentium4, 'J', false },
351+
{ {"pentium4m"}, CK_Pentium4, ~0U, FeaturesPentium4, 'J', false },
352352
{ {"pentium_4"}, CK_Pentium4, ~0U, FeaturesPentium4, 'J', true },
353353
{ {"pentium_4_sse3"}, CK_Prescott, ~0U, FeaturesPrescott, 'L', true },
354-
{ {"prescott"}, CK_Prescott, ~0U, FeaturesPrescott, '\0', false },
355-
{ {"nocona"}, CK_Nocona, ~0U, FeaturesNocona, '\0', false },
354+
{ {"prescott"}, CK_Prescott, ~0U, FeaturesPrescott, 'L', false },
355+
{ {"nocona"}, CK_Nocona, ~0U, FeaturesNocona, 'L', false },
356356
// Core microarchitecture based processors.
357-
{ {"core2"}, CK_Core2, FEATURE_SSSE3, FeaturesCore2, '\0', false },
357+
{ {"core2"}, CK_Core2, FEATURE_SSSE3, FeaturesCore2, 'M', false },
358358
{ {"core_2_duo_ssse3"}, CK_Core2, ~0U, FeaturesCore2, 'M', true },
359-
{ {"penryn"}, CK_Penryn, ~0U, FeaturesPenryn, '\0', false },
359+
{ {"penryn"}, CK_Penryn, ~0U, FeaturesPenryn, 'N', false },
360360
{ {"core_2_duo_sse4_1"}, CK_Penryn, ~0U, FeaturesPenryn, 'N', true },
361361
// Atom processors
362-
{ {"bonnell"}, CK_Bonnell, FEATURE_SSSE3, FeaturesBonnell, '\0', false },
362+
{ {"bonnell"}, CK_Bonnell, FEATURE_SSSE3, FeaturesBonnell, 'O', false },
363363
{ {"atom"}, CK_Bonnell, FEATURE_SSSE3, FeaturesBonnell, 'O', false },
364-
{ {"silvermont"}, CK_Silvermont, FEATURE_SSE4_2, FeaturesSilvermont, '\0', false },
365-
{ {"slm"}, CK_Silvermont, FEATURE_SSE4_2, FeaturesSilvermont, '\0', false },
364+
{ {"silvermont"}, CK_Silvermont, FEATURE_SSE4_2, FeaturesSilvermont, 'c', false },
365+
{ {"slm"}, CK_Silvermont, FEATURE_SSE4_2, FeaturesSilvermont, 'c', false },
366366
{ {"atom_sse4_2"}, CK_Nehalem, FEATURE_SSE4_2, FeaturesNehalem, 'c', true },
367367
{ {"atom_sse4_2_movbe"}, CK_Goldmont, FEATURE_SSE4_2, FeaturesGoldmont, 'd', true },
368368
{ {"goldmont"}, CK_Goldmont, FEATURE_SSE4_2, FeaturesGoldmont, 'i', false },
369369
{ {"goldmont-plus"}, CK_GoldmontPlus, FEATURE_SSE4_2, FeaturesGoldmontPlus, '\0', false },
370-
{ {"goldmont_plus"}, CK_GoldmontPlus, FEATURE_SSE4_2, FeaturesGoldmontPlus, '\0', true },
371-
{ {"tremont"}, CK_Tremont, FEATURE_SSE4_2, FeaturesTremont, '\0', false },
370+
{ {"goldmont_plus"}, CK_GoldmontPlus, FEATURE_SSE4_2, FeaturesGoldmontPlus, 'd', true },
371+
{ {"tremont"}, CK_Tremont, FEATURE_SSE4_2, FeaturesTremont, 'd', false },
372372
// Nehalem microarchitecture based processors.
373-
{ {"nehalem"}, CK_Nehalem, FEATURE_SSE4_2, FeaturesNehalem, '\0', false },
373+
{ {"nehalem"}, CK_Nehalem, FEATURE_SSE4_2, FeaturesNehalem, 'P', false },
374374
{ {"core_i7_sse4_2"}, CK_Nehalem, FEATURE_SSE4_2, FeaturesNehalem, 'P', true },
375-
{ {"corei7"}, CK_Nehalem, FEATURE_SSE4_2, FeaturesNehalem, '\0', false },
375+
{ {"corei7"}, CK_Nehalem, FEATURE_SSE4_2, FeaturesNehalem, 'P', false },
376376
// Westmere microarchitecture based processors.
377-
{ {"westmere"}, CK_Westmere, FEATURE_PCLMUL, FeaturesWestmere, '\0', false },
377+
{ {"westmere"}, CK_Westmere, FEATURE_PCLMUL, FeaturesWestmere, 'Q', false },
378378
{ {"core_aes_pclmulqdq"}, CK_Nehalem, FEATURE_SSE4_2, FeaturesNehalem, 'Q', true },
379379
// Sandy Bridge microarchitecture based processors.
380380
{ {"sandybridge"}, CK_SandyBridge, FEATURE_AVX, FeaturesSandyBridge, 'R', false },
@@ -397,38 +397,40 @@ constexpr ProcInfo Processors[] = {
397397
{ {"skylake"}, CK_SkylakeClient, FEATURE_AVX2, FeaturesSkylakeClient, 'b', false },
398398
// Skylake server microarchitecture based processors.
399399
{ {"skylake-avx512"}, CK_SkylakeServer, FEATURE_AVX512F, FeaturesSkylakeServer, '\0', false },
400-
{ {"skx"}, CK_SkylakeServer, FEATURE_AVX512F, FeaturesSkylakeServer, '\0', false },
400+
{ {"skx"}, CK_SkylakeServer, FEATURE_AVX512F, FeaturesSkylakeServer, 'a', false },
401401
{ {"skylake_avx512"}, CK_SkylakeServer, FEATURE_AVX512F, FeaturesSkylakeServer, 'a', true },
402402
// Cascadelake Server microarchitecture based processors.
403-
{ {"cascadelake"}, CK_Cascadelake, FEATURE_AVX512VNNI, FeaturesCascadeLake, '\0', false },
403+
{ {"cascadelake"}, CK_Cascadelake, FEATURE_AVX512VNNI, FeaturesCascadeLake, 'o', false },
404404
// Cooperlake Server microarchitecture based processors.
405-
{ {"cooperlake"}, CK_Cooperlake, FEATURE_AVX512BF16, FeaturesCooperLake, '\0', false },
405+
{ {"cooperlake"}, CK_Cooperlake, FEATURE_AVX512BF16, FeaturesCooperLake, 'f', false },
406406
// Cannonlake client microarchitecture based processors.
407407
{ {"cannonlake"}, CK_Cannonlake, FEATURE_AVX512VBMI, FeaturesCannonlake, 'e', false },
408408
// Icelake client microarchitecture based processors.
409409
{ {"icelake-client"}, CK_IcelakeClient, FEATURE_AVX512VBMI2, FeaturesICLClient, '\0', false },
410+
{ {"icelake_client"}, CK_IcelakeClient, FEATURE_AVX512VBMI2, FeaturesICLClient, 'k', true },
410411
// Rocketlake microarchitecture based processors.
411-
{ {"rocketlake"}, CK_Rocketlake, FEATURE_AVX512VBMI2, FeaturesRocketlake, '\0', false },
412+
{ {"rocketlake"}, CK_Rocketlake, FEATURE_AVX512VBMI2, FeaturesRocketlake, 'k', false },
412413
// Icelake server microarchitecture based processors.
413414
{ {"icelake-server"}, CK_IcelakeServer, FEATURE_AVX512VBMI2, FeaturesICLServer, '\0', false },
415+
{ {"icelake_server"}, CK_IcelakeServer, FEATURE_AVX512VBMI2, FeaturesICLServer, 'k', true },
414416
// Tigerlake microarchitecture based processors.
415-
{ {"tigerlake"}, CK_Tigerlake, FEATURE_AVX512VP2INTERSECT, FeaturesTigerlake, '\0', false },
417+
{ {"tigerlake"}, CK_Tigerlake, FEATURE_AVX512VP2INTERSECT, FeaturesTigerlake, 'l', false },
416418
// Sapphire Rapids microarchitecture based processors.
417-
{ {"sapphirerapids"}, CK_SapphireRapids, FEATURE_AVX512BF16, FeaturesSapphireRapids, '\0', false },
419+
{ {"sapphirerapids"}, CK_SapphireRapids, FEATURE_AVX512BF16, FeaturesSapphireRapids, 'n', false },
418420
// Alderlake microarchitecture based processors.
419-
{ {"alderlake"}, CK_Alderlake, FEATURE_AVX2, FeaturesAlderlake, '\0', false },
421+
{ {"alderlake"}, CK_Alderlake, FEATURE_AVX2, FeaturesAlderlake, 'p', false },
420422
// Raptorlake microarchitecture based processors.
421-
{ {"raptorlake"}, CK_Raptorlake, FEATURE_AVX2, FeaturesAlderlake, '\0', false },
423+
{ {"raptorlake"}, CK_Raptorlake, FEATURE_AVX2, FeaturesAlderlake, 'p', false },
422424
// Meteorlake microarchitecture based processors.
423-
{ {"meteorlake"}, CK_Meteorlake, FEATURE_AVX2, FeaturesAlderlake, '\0', false },
425+
{ {"meteorlake"}, CK_Meteorlake, FEATURE_AVX2, FeaturesAlderlake, 'p', false },
424426
// Sierraforest microarchitecture based processors.
425-
{ {"sierraforest"}, CK_Sierraforest, FEATURE_AVX2, FeaturesSierraforest, '\0', false },
427+
{ {"sierraforest"}, CK_Sierraforest, FEATURE_AVX2, FeaturesSierraforest, 'p', false },
426428
// Grandridge microarchitecture based processors.
427-
{ {"grandridge"}, CK_Grandridge, FEATURE_AVX2, FeaturesGrandridge, '\0', false },
429+
{ {"grandridge"}, CK_Grandridge, FEATURE_AVX2, FeaturesGrandridge, 'p', false },
428430
// Granite Rapids microarchitecture based processors.
429-
{ {"graniterapids"}, CK_Graniterapids, FEATURE_AVX512BF16, FeaturesGraniteRapids, '\0', false },
431+
{ {"graniterapids"}, CK_Graniterapids, FEATURE_AVX512BF16, FeaturesGraniteRapids, 'n', false },
430432
// Emerald Rapids microarchitecture based processors.
431-
{ {"emeraldrapids"}, CK_Emeraldrapids, FEATURE_AVX512BF16, FeaturesSapphireRapids, '\0', false },
433+
{ {"emeraldrapids"}, CK_Emeraldrapids, FEATURE_AVX512BF16, FeaturesSapphireRapids, 'n', false },
432434
// Knights Landing processor.
433435
{ {"knl"}, CK_KNL, FEATURE_AVX512F, FeaturesKNL, 'Z', false },
434436
{ {"mic_avx512"}, CK_KNL, FEATURE_AVX512F, FeaturesKNL, 'Z', true },

0 commit comments

Comments
 (0)