Skip to content

Commit a15532d

Browse files
[X86] Add CPU detection for more znver2 CPUs (#74955)
This patch adds proper detection support for more znver2 CPUs. Specifically, this adds in support for CPUs codenamed Renoir, Lucienne, and Mendocino. This was originally proposedfor Renoir in https://reviews.llvm.org/D96220 and got approved, but slipped through the cracks. However, there is still a demand for this feature. In addition to adding support for more znver2 CPUs, this patch also includes some additional refactoring and comments related to cpu model information for zen CPUs. Fixes #74934.
1 parent e2d0f50 commit a15532d

File tree

2 files changed

+74
-28
lines changed
  • compiler-rt/lib/builtins/cpu_model
  • llvm/lib/TargetParser

2 files changed

+74
-28
lines changed

compiler-rt/lib/builtins/cpu_model/x86.c

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -647,35 +647,59 @@ static const char *getAMDProcessorTypeAndSubtype(unsigned Family,
647647
case 23:
648648
CPU = "znver1";
649649
*Type = AMDFAM17H;
650-
if ((Model >= 0x30 && Model <= 0x3f) || Model == 0x71) {
650+
if ((Model >= 0x30 && Model <= 0x3f) || (Model == 0x47) ||
651+
(Model >= 0x60 && Model <= 0x67) || (Model >= 0x68 && Model <= 0x6f) ||
652+
(Model >= 0x70 && Model <= 0x7f) || (Model >= 0x84 && Model <= 0x87) ||
653+
(Model >= 0x90 && Model <= 0x97) || (Model >= 0x98 && Model <= 0x9f) ||
654+
(Model >= 0xa0 && Model <= 0xaf)) {
655+
// Family 17h Models 30h-3Fh (Starship) Zen 2
656+
// Family 17h Models 47h (Cardinal) Zen 2
657+
// Family 17h Models 60h-67h (Renoir) Zen 2
658+
// Family 17h Models 68h-6Fh (Lucienne) Zen 2
659+
// Family 17h Models 70h-7Fh (Matisse) Zen 2
660+
// Family 17h Models 84h-87h (ProjectX) Zen 2
661+
// Family 17h Models 90h-97h (VanGogh) Zen 2
662+
// Family 17h Models 98h-9Fh (Mero) Zen 2
663+
// Family 17h Models A0h-AFh (Mendocino) Zen 2
651664
CPU = "znver2";
652665
*Subtype = AMDFAM17H_ZNVER2;
653-
break; // 30h-3fh, 71h: Zen2
666+
break;
654667
}
655-
if (Model <= 0x0f) {
668+
if ((Model >= 0x10 && Model <= 0x1f) || (Model >= 0x20 && Model <= 0x2f)) {
669+
// Family 17h Models 10h-1Fh (Raven1) Zen
670+
// Family 17h Models 10h-1Fh (Picasso) Zen+
671+
// Family 17h Models 20h-2Fh (Raven2 x86) Zen
656672
*Subtype = AMDFAM17H_ZNVER1;
657-
break; // 00h-0Fh: Zen1
673+
break;
658674
}
659675
break;
660676
case 25:
661677
CPU = "znver3";
662678
*Type = AMDFAM19H;
663-
if (Model <= 0x0f || (Model >= 0x20 && Model <= 0x5f)) {
664-
// Family 19h Models 00h-0Fh - Zen3
665-
// Family 19h Models 20h-2Fh - Zen3
666-
// Family 19h Models 30h-3Fh - Zen3
667-
// Family 19h Models 40h-4Fh - Zen3+
668-
// Family 19h Models 50h-5Fh - Zen3+
679+
if ((Model >= 0x00 && Model <= 0x0f) || (Model >= 0x20 && Model <= 0x2f) ||
680+
(Model >= 0x30 && Model <= 0x3f) || (Model >= 0x40 && Model <= 0x4f) ||
681+
(Model >= 0x50 && Model <= 0x5f)) {
682+
// Family 19h Models 00h-0Fh (Genesis, Chagall) Zen 3
683+
// Family 19h Models 20h-2Fh (Vermeer) Zen 3
684+
// Family 19h Models 30h-3Fh (Badami) Zen 3
685+
// Family 19h Models 40h-4Fh (Rembrandt) Zen 3+
686+
// Family 19h Models 50h-5Fh (Cezanne) Zen 3
669687
*Subtype = AMDFAM19H_ZNVER3;
670688
break;
671689
}
672-
if ((Model >= 0x10 && Model <= 0x1f) || (Model >= 0x60 && Model <= 0x74) ||
673-
(Model >= 0x78 && Model <= 0x7b) || (Model >= 0xA0 && Model <= 0xAf)) {
690+
if ((Model >= 0x10 && Model <= 0x1f) || (Model >= 0x60 && Model <= 0x6f) ||
691+
(Model >= 0x70 && Model <= 0x77) || (Model >= 0x78 && Model <= 0x7f) ||
692+
(Model >= 0xa0 && Model <= 0xaf)) {
693+
// Family 19h Models 10h-1Fh (Stones; Storm Peak) Zen 4
694+
// Family 19h Models 60h-6Fh (Raphael) Zen 4
695+
// Family 19h Models 70h-77h (Phoenix, Hawkpoint1) Zen 4
696+
// Family 19h Models 78h-7Fh (Phoenix 2, Hawkpoint2) Zen 4
697+
// Family 19h Models A0h-AFh (Stones-Dense) Zen 4
674698
CPU = "znver4";
675699
*Subtype = AMDFAM19H_ZNVER4;
676700
break; // "znver4"
677701
}
678-
break;
702+
break; // family 19h
679703
default:
680704
break; // Unknown AMD CPU.
681705
}

llvm/lib/TargetParser/Host.cpp

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1131,37 +1131,59 @@ getAMDProcessorTypeAndSubtype(unsigned Family, unsigned Model,
11311131
case 23:
11321132
CPU = "znver1";
11331133
*Type = X86::AMDFAM17H;
1134-
if ((Model >= 0x30 && Model <= 0x3f) || Model == 0x71) {
1134+
if ((Model >= 0x30 && Model <= 0x3f) || (Model == 0x47) ||
1135+
(Model >= 0x60 && Model <= 0x67) || (Model >= 0x68 && Model <= 0x6f) ||
1136+
(Model >= 0x70 && Model <= 0x7f) || (Model >= 0x84 && Model <= 0x87) ||
1137+
(Model >= 0x90 && Model <= 0x97) || (Model >= 0x98 && Model <= 0x9f) ||
1138+
(Model >= 0xa0 && Model <= 0xaf)) {
1139+
// Family 17h Models 30h-3Fh (Starship) Zen 2
1140+
// Family 17h Models 47h (Cardinal) Zen 2
1141+
// Family 17h Models 60h-67h (Renoir) Zen 2
1142+
// Family 17h Models 68h-6Fh (Lucienne) Zen 2
1143+
// Family 17h Models 70h-7Fh (Matisse) Zen 2
1144+
// Family 17h Models 84h-87h (ProjectX) Zen 2
1145+
// Family 17h Models 90h-97h (VanGogh) Zen 2
1146+
// Family 17h Models 98h-9Fh (Mero) Zen 2
1147+
// Family 17h Models A0h-AFh (Mendocino) Zen 2
11351148
CPU = "znver2";
11361149
*Subtype = X86::AMDFAM17H_ZNVER2;
1137-
break; // 30h-3fh, 71h: Zen2
1150+
break;
11381151
}
1139-
if (Model <= 0x0f) {
1152+
if ((Model >= 0x10 && Model <= 0x1f) || (Model >= 0x20 && Model <= 0x2f)) {
1153+
// Family 17h Models 10h-1Fh (Raven1) Zen
1154+
// Family 17h Models 10h-1Fh (Picasso) Zen+
1155+
// Family 17h Models 20h-2Fh (Raven2 x86) Zen
11401156
*Subtype = X86::AMDFAM17H_ZNVER1;
1141-
break; // 00h-0Fh: Zen1
1157+
break;
11421158
}
11431159
break;
11441160
case 25:
11451161
CPU = "znver3";
11461162
*Type = X86::AMDFAM19H;
1147-
if (Model <= 0x0f || (Model >= 0x20 && Model <= 0x5f)) {
1148-
// Family 19h Models 00h-0Fh - Zen3
1149-
// Family 19h Models 20h-2Fh - Zen3
1150-
// Family 19h Models 30h-3Fh - Zen3
1151-
// Family 19h Models 40h-4Fh - Zen3+
1152-
// Family 19h Models 50h-5Fh - Zen3+
1163+
if ((Model >= 0x00 && Model <= 0x0f) || (Model >= 0x20 && Model <= 0x2f) ||
1164+
(Model >= 0x30 && Model <= 0x3f) || (Model >= 0x40 && Model <= 0x4f) ||
1165+
(Model >= 0x50 && Model <= 0x5f)) {
1166+
// Family 19h Models 00h-0Fh (Genesis, Chagall) Zen 3
1167+
// Family 19h Models 20h-2Fh (Vermeer) Zen 3
1168+
// Family 19h Models 30h-3Fh (Badami) Zen 3
1169+
// Family 19h Models 40h-4Fh (Rembrandt) Zen 3+
1170+
// Family 19h Models 50h-5Fh (Cezanne) Zen 3
11531171
*Subtype = X86::AMDFAM19H_ZNVER3;
11541172
break;
11551173
}
1156-
if ((Model >= 0x10 && Model <= 0x1f) ||
1157-
(Model >= 0x60 && Model <= 0x74) ||
1158-
(Model >= 0x78 && Model <= 0x7b) ||
1159-
(Model >= 0xA0 && Model <= 0xAf)) {
1174+
if ((Model >= 0x10 && Model <= 0x1f) || (Model >= 0x60 && Model <= 0x6f) ||
1175+
(Model >= 0x70 && Model <= 0x77) || (Model >= 0x78 && Model <= 0x7f) ||
1176+
(Model >= 0xa0 && Model <= 0xaf)) {
1177+
// Family 19h Models 10h-1Fh (Stones; Storm Peak) Zen 4
1178+
// Family 19h Models 60h-6Fh (Raphael) Zen 4
1179+
// Family 19h Models 70h-77h (Phoenix, Hawkpoint1) Zen 4
1180+
// Family 19h Models 78h-7Fh (Phoenix 2, Hawkpoint2) Zen 4
1181+
// Family 19h Models A0h-AFh (Stones-Dense) Zen 4
11601182
CPU = "znver4";
11611183
*Subtype = X86::AMDFAM19H_ZNVER4;
11621184
break; // "znver4"
11631185
}
1164-
break; // family 19h
1186+
break;
11651187
default:
11661188
break; // Unknown AMD CPU.
11671189
}

0 commit comments

Comments
 (0)