Skip to content

Commit faceffd

Browse files
[clang][AArch64] Add LLVM_CPUINFO environment variable
Add LLVM_CPUINFO environment variable to test mock /proc/cpuinfo files for -mcpu=native
1 parent e46cbb0 commit faceffd

File tree

7 files changed

+184
-3
lines changed

7 files changed

+184
-3
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
processor : 0
2+
BogoMIPS : 200.00
3+
Features : fp asimd evtstrm crc32 cpuid
4+
CPU implementer : 0x41
5+
CPU architecture: 8
6+
CPU variant : 0x1
7+
CPU part : 0xd07
8+
CPU revision : 1
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
processor : 0
2+
BogoMIPS : 250.00
3+
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid asimdrdm
4+
CPU implementer : 0x41
5+
CPU architecture: 8
6+
CPU variant : 0x0
7+
CPU part : 0xd08
8+
CPU revision : 2
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
processor : 0
2+
BogoMIPS : 500.00
3+
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics cpuid asimdrdm ssbs jscvt fcma
4+
CPU implementer : 0x41
5+
CPU architecture: 8
6+
CPU variant : 0x1
7+
CPU part : 0xd0b
8+
CPU revision : 2
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
processor : 0
2+
BogoMIPS : 50.00
3+
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs
4+
CPU implementer : 0x41
5+
CPU architecture: 8
6+
CPU variant : 0x3
7+
CPU part : 0xd0c
8+
CPU revision : 1
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
processor : 0
2+
BogoMIPS : 2000.00
3+
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm ssbs sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh bti
4+
CPU implementer : 0x41
5+
CPU architecture: 8
6+
CPU variant : 0x0
7+
CPU part : 0xd4f
8+
CPU revision : 0
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
// RUN: export LLVM_CPUINFO=%S/Inputs/cpunative/neoverse-v2
2+
// RUN: %clang --target=aarch64 --print-enabled-extensions -mcpu=native | FileCheck --strict-whitespace --check-prefix=CHECK-FEAT-NV2 --implicit-check-not=FEAT_ %s
3+
4+
// CHECK-FEAT-NV2: Extensions enabled for the given AArch64 target
5+
// CHECK-FEAT-NV2-EMPTY:
6+
// CHECK-FEAT-NV2: Architecture Feature(s) Description
7+
// CHECK-FEAT-NV2: FEAT_AES, FEAT_PMULL Enable AES support
8+
// CHECK-FEAT-NV2: FEAT_AMUv1 Enable Armv8.4-A Activity Monitors extension
9+
// CHECK-FEAT-NV2: FEAT_AdvSIMD Enable Advanced SIMD instructions
10+
// CHECK-FEAT-NV2: FEAT_BF16 Enable BFloat16 Extension
11+
// CHECK-FEAT-NV2: FEAT_BTI Enable Branch Target Identification
12+
// CHECK-FEAT-NV2: FEAT_CCIDX Enable Armv8.3-A Extend of the CCSIDR number of sets
13+
// CHECK-FEAT-NV2: FEAT_CRC32 Enable Armv8.0-A CRC-32 checksum instructions
14+
// CHECK-FEAT-NV2: FEAT_CSV2_2 Enable architectural speculation restriction
15+
// CHECK-FEAT-NV2: FEAT_DIT Enable Armv8.4-A Data Independent Timing instructions
16+
// CHECK-FEAT-NV2: FEAT_DPB Enable Armv8.2-A data Cache Clean to Point of Persistence
17+
// CHECK-FEAT-NV2: FEAT_DPB2 Enable Armv8.5-A Cache Clean to Point of Deep Persistence
18+
// CHECK-FEAT-NV2: FEAT_DotProd Enable dot product support
19+
// CHECK-FEAT-NV2: FEAT_ETE Enable Embedded Trace Extension
20+
// CHECK-FEAT-NV2: FEAT_FCMA Enable Armv8.3-A Floating-point complex number support
21+
// CHECK-FEAT-NV2: FEAT_FHM Enable FP16 FML instructions
22+
// CHECK-FEAT-NV2: FEAT_FP Enable Armv8.0-A Floating Point Extensions
23+
// CHECK-FEAT-NV2: FEAT_FP16 Enable half-precision floating-point data processing
24+
// CHECK-FEAT-NV2: FEAT_FRINTTS Enable FRInt[32|64][Z|X] instructions that round a floating-point number to an integer (in FP format) forcing it to fit into a 32- or 64-bit int
25+
// CHECK-FEAT-NV2: FEAT_FlagM Enable Armv8.4-A Flag Manipulation instructions
26+
// CHECK-FEAT-NV2: FEAT_FlagM2 Enable alternative NZCV format for floating point comparisons
27+
// CHECK-FEAT-NV2: FEAT_I8MM Enable Matrix Multiply Int8 Extension
28+
// CHECK-FEAT-NV2: FEAT_JSCVT Enable Armv8.3-A JavaScript FP conversion instructions
29+
// CHECK-FEAT-NV2: FEAT_LOR Enable Armv8.1-A Limited Ordering Regions extension
30+
// CHECK-FEAT-NV2: FEAT_LRCPC Enable support for RCPC extension
31+
// CHECK-FEAT-NV2: FEAT_LRCPC2 Enable Armv8.4-A RCPC instructions with Immediate Offsets
32+
// CHECK-FEAT-NV2: FEAT_LSE Enable Armv8.1-A Large System Extension (LSE) atomic instructions
33+
// CHECK-FEAT-NV2: FEAT_LSE2 Enable Armv8.4-A Large System Extension 2 (LSE2) atomicity rules
34+
// CHECK-FEAT-NV2: FEAT_MPAM Enable Armv8.4-A Memory system Partitioning and Monitoring extension
35+
// CHECK-FEAT-NV2: FEAT_MTE, FEAT_MTE2 Enable Memory Tagging Extension
36+
// CHECK-FEAT-NV2: FEAT_NV, FEAT_NV2 Enable Armv8.4-A Nested Virtualization Enchancement
37+
// CHECK-FEAT-NV2: FEAT_PAN Enable Armv8.1-A Privileged Access-Never extension
38+
// CHECK-FEAT-NV2: FEAT_PAN2 Enable Armv8.2-A PAN s1e1R and s1e1W Variants
39+
// CHECK-FEAT-NV2: FEAT_PAuth Enable Armv8.3-A Pointer Authentication extension
40+
// CHECK-FEAT-NV2: FEAT_PMUv3 Enable Armv8.0-A PMUv3 Performance Monitors extension
41+
// CHECK-FEAT-NV2: FEAT_RAS, FEAT_RASv1p1 Enable Armv8.0-A Reliability, Availability and Serviceability Extensions
42+
// CHECK-FEAT-NV2: FEAT_RDM Enable Armv8.1-A Rounding Double Multiply Add/Subtract instructions
43+
// CHECK-FEAT-NV2: FEAT_RNG Enable Random Number generation instructions
44+
// CHECK-FEAT-NV2: FEAT_SB Enable Armv8.5-A Speculation Barrier
45+
// CHECK-FEAT-NV2: FEAT_SEL2 Enable Armv8.4-A Secure Exception Level 2 extension
46+
// CHECK-FEAT-NV2: FEAT_SHA1, FEAT_SHA256 Enable SHA1 and SHA256 support
47+
// CHECK-FEAT-NV2: FEAT_SPE Enable Statistical Profiling extension
48+
// CHECK-FEAT-NV2: FEAT_SPECRES Enable Armv8.5-A execution and data prediction invalidation instructions
49+
// CHECK-FEAT-NV2: FEAT_SSBS, FEAT_SSBS2 Enable Speculative Store Bypass Safe bit
50+
// CHECK-FEAT-NV2: FEAT_SVE Enable Scalable Vector Extension (SVE) instructions
51+
// CHECK-FEAT-NV2: FEAT_SVE2 Enable Scalable Vector Extension 2 (SVE2) instructions
52+
// CHECK-FEAT-NV2: FEAT_SVE_BitPerm Enable bit permutation SVE2 instructions
53+
// CHECK-FEAT-NV2: FEAT_TLBIOS, FEAT_TLBIRANGE Enable Armv8.4-A TLB Range and Maintenance instructions
54+
// CHECK-FEAT-NV2: FEAT_TRBE Enable Trace Buffer Extension
55+
// CHECK-FEAT-NV2: FEAT_TRF Enable Armv8.4-A Trace extension
56+
// CHECK-FEAT-NV2: FEAT_UAO Enable Armv8.2-A UAO PState
57+
// CHECK-FEAT-NV2: FEAT_VHE Enable Armv8.1-A Virtual Host extension
58+
59+
// RUN: export LLVM_CPUINFO=%S/Inputs/cpunative/neoverse-n1
60+
// RUN: %clang --target=aarch64 --print-enabled-extensions -mcpu=native | FileCheck --strict-whitespace --check-prefix=CHECK-FEAT-NN1 --implicit-check-not=FEAT_ %s
61+
62+
// CHECK-FEAT-NN1: Extensions enabled for the given AArch64 target
63+
// CHECK-FEAT-NN1-EMPTY:
64+
// CHECK-FEAT-NN1: Architecture Feature(s) Description
65+
// CHECK-FEAT-NN1: FEAT_AES, FEAT_PMULL Enable AES support
66+
// CHECK-FEAT-NN1: FEAT_AdvSIMD Enable Advanced SIMD instructions
67+
// CHECK-FEAT-NN1: FEAT_CRC32 Enable Armv8.0-A CRC-32 checksum instructions
68+
// CHECK-FEAT-NN1: FEAT_DPB Enable Armv8.2-A data Cache Clean to Point of Persistence
69+
// CHECK-FEAT-NN1: FEAT_DotProd Enable dot product support
70+
// CHECK-FEAT-NN1: FEAT_FP Enable Armv8.0-A Floating Point Extensions
71+
// CHECK-FEAT-NN1: FEAT_FP16 Enable half-precision floating-point data processing
72+
// CHECK-FEAT-NN1: FEAT_LOR Enable Armv8.1-A Limited Ordering Regions extension
73+
// CHECK-FEAT-NN1: FEAT_LRCPC Enable support for RCPC extension
74+
// CHECK-FEAT-NN1: FEAT_LSE Enable Armv8.1-A Large System Extension (LSE) atomic instructions
75+
// CHECK-FEAT-NN1: FEAT_PAN Enable Armv8.1-A Privileged Access-Never extension
76+
// CHECK-FEAT-NN1: FEAT_PAN2 Enable Armv8.2-A PAN s1e1R and s1e1W Variants
77+
// CHECK-FEAT-NN1: FEAT_PMUv3 Enable Armv8.0-A PMUv3 Performance Monitors extension
78+
// CHECK-FEAT-NN1: FEAT_RAS, FEAT_RASv1p1 Enable Armv8.0-A Reliability, Availability and Serviceability Extensions
79+
// CHECK-FEAT-NN1: FEAT_RDM Enable Armv8.1-A Rounding Double Multiply Add/Subtract instructions
80+
// CHECK-FEAT-NN1: FEAT_SHA1, FEAT_SHA256 Enable SHA1 and SHA256 support
81+
// CHECK-FEAT-NN1: FEAT_SPE Enable Statistical Profiling extension
82+
// CHECK-FEAT-NN1: FEAT_SSBS, FEAT_SSBS2 Enable Speculative Store Bypass Safe bit
83+
// CHECK-FEAT-NN1: FEAT_UAO Enable Armv8.2-A UAO PState
84+
// CHECK-FEAT-NN1: FEAT_VHE Enable Armv8.1-A Virtual Host extension
85+
86+
87+
// RUN: export LLVM_CPUINFO=%S/Inputs/cpunative/cortex-a57
88+
// RUN: %clang --target=aarch64 --print-enabled-extensions -mcpu=native | FileCheck --strict-whitespace --check-prefix=CHECK-FEAT-CA57 --implicit-check-not=FEAT_ %s
89+
90+
// CHECK-FEAT-CA57: Extensions enabled for the given AArch64 target
91+
// CHECK-FEAT-CA57-EMPTY:
92+
// CHECK-FEAT-CA57: Architecture Feature(s) Description
93+
// CHECK-FEAT-CA57: FEAT_AES, FEAT_PMULL Enable AES support
94+
// CHECK-FEAT-CA57: FEAT_AdvSIMD Enable Advanced SIMD instructions
95+
// CHECK-FEAT-CA57: FEAT_CRC32 Enable Armv8.0-A CRC-32 checksum instructions
96+
// CHECK-FEAT-CA57: FEAT_FP Enable Armv8.0-A Floating Point Extensions
97+
// CHECK-FEAT-CA57: FEAT_PMUv3 Enable Armv8.0-A PMUv3 Performance Monitors extension
98+
// CHECK-FEAT-CA57: FEAT_SHA1, FEAT_SHA256 Enable SHA1 and SHA256 support
99+
100+
// RUN: export LLVM_CPUINFO=%S/Inputs/cpunative/cortex-a72
101+
// RUN: %clang --target=aarch64 --print-enabled-extensions -mcpu=native | FileCheck --strict-whitespace --check-prefix=CHECK-FEAT-CA72 --implicit-check-not=FEAT_ %s
102+
103+
// CHECK-FEAT-CA72: Extensions enabled for the given AArch64 target
104+
// CHECK-EMPTY:
105+
// CHECK-FEAT-CA72: Architecture Feature(s) Description
106+
// CHECK-FEAT-CA72: FEAT_AES, FEAT_PMULL Enable AES support
107+
// CHECK-FEAT-CA72: FEAT_AdvSIMD Enable Advanced SIMD instructions
108+
// CHECK-FEAT-CA72: FEAT_CRC32 Enable Armv8.0-A CRC-32 checksum instructions
109+
// CHECK-FEAT-CA72: FEAT_FP Enable Armv8.0-A Floating Point Extensions
110+
// CHECK-FEAT-CA72: FEAT_PMUv3 Enable Armv8.0-A PMUv3 Performance Monitors extension
111+
// CHECK-FEAT-CA72: FEAT_SHA1, FEAT_SHA256 Enable SHA1 and SHA256 support
112+
113+
// RUN: export LLVM_CPUINFO=%S/Inputs/cpunative/cortex-a76
114+
// RUN: %clang --target=aarch64 --print-enabled-extensions -mcpu=native | FileCheck --strict-whitespace --check-prefix=CHECK-FEAT-CA76 --implicit-check-not=FEAT_ %s
115+
116+
// CHECK-FEAT-CA76: Extensions enabled for the given AArch64 target
117+
// CHECK-FEAT-CA76-EMPTY:
118+
// CHECK-FEAT-CA76: Architecture Feature(s) Description
119+
// CHECK-FEAT-CA76: FEAT_AES, FEAT_PMULL Enable AES support
120+
// CHECK-FEAT-CA76: FEAT_AdvSIMD Enable Advanced SIMD instructions
121+
// CHECK-FEAT-CA76: FEAT_CRC32 Enable Armv8.0-A CRC-32 checksum instructions
122+
// CHECK-FEAT-CA76: FEAT_DPB Enable Armv8.2-A data Cache Clean to Point of Persistence
123+
// CHECK-FEAT-CA76: FEAT_DotProd Enable dot product support
124+
// CHECK-FEAT-CA76: FEAT_FP Enable Armv8.0-A Floating Point Extensions
125+
// CHECK-FEAT-CA76: FEAT_FP16 Enable half-precision floating-point data processing
126+
// CHECK-FEAT-CA76: FEAT_LOR Enable Armv8.1-A Limited Ordering Regions extension
127+
// CHECK-FEAT-CA76: FEAT_LRCPC Enable support for RCPC extension
128+
// CHECK-FEAT-CA76: FEAT_LSE Enable Armv8.1-A Large System Extension (LSE) atomic instructions
129+
// CHECK-FEAT-CA76: FEAT_PAN Enable Armv8.1-A Privileged Access-Never extension
130+
// CHECK-FEAT-CA76: FEAT_PAN2 Enable Armv8.2-A PAN s1e1R and s1e1W Variants
131+
// CHECK-FEAT-CA76: FEAT_PMUv3 Enable Armv8.0-A PMUv3 Performance Monitors extension
132+
// CHECK-FEAT-CA76: FEAT_RAS, FEAT_RASv1p1 Enable Armv8.0-A Reliability, Availability and Serviceability Extensions
133+
// CHECK-FEAT-CA76: FEAT_RDM Enable Armv8.1-A Rounding Double Multiply Add/Subtract instructions
134+
// CHECK-FEAT-CA76: FEAT_SHA1, FEAT_SHA256 Enable SHA1 and SHA256 support
135+
// CHECK-FEAT-CA76: FEAT_SSBS, FEAT_SSBS2 Enable Speculative Store Bypass Safe bit
136+
// CHECK-FEAT-CA76: FEAT_UAO Enable Armv8.2-A UAO PState
137+
// CHECK-FEAT-CA76: FEAT_VHE Enable Armv8.1-A Virtual Host extension

llvm/lib/TargetParser/Host.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,15 @@ using namespace llvm;
6868

6969
static std::unique_ptr<llvm::MemoryBuffer>
7070
LLVM_ATTRIBUTE_UNUSED getProcCpuinfoContent() {
71+
const char *CPUInfoFile = "/proc/cpuinfo";
72+
if (const char *CpuinfoIntercept = std::getenv("LLVM_CPUINFO"))
73+
CPUInfoFile = CpuinfoIntercept;
7174
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> Text =
72-
llvm::MemoryBuffer::getFileAsStream("/proc/cpuinfo");
75+
llvm::MemoryBuffer::getFileAsStream(CPUInfoFile);
76+
7377
if (std::error_code EC = Text.getError()) {
74-
llvm::errs() << "Can't read "
75-
<< "/proc/cpuinfo: " << EC.message() << "\n";
78+
llvm::errs() << "Can't read " << CPUInfoFile << ": " << EC.message()
79+
<< "\n";
7680
return nullptr;
7781
}
7882
return std::move(*Text);

0 commit comments

Comments
 (0)