[PATCH] D82414: [X86] Replace PROC macros with an enum and a lookup table of processor information.

Craig Topper via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Jun 23 15:05:15 PDT 2020


craig.topper created this revision.
craig.topper added reviewers: echristo, erichkeane, LuoYuanke.
Herald added a subscriber: hiraditya.
Herald added projects: clang, LLVM.
craig.topper added reviewers: RKSimon, spatel.
craig.topper marked an inline comment as done.
craig.topper added inline comments.


================
Comment at: llvm/lib/Support/X86TargetParser.cpp:36
+  // i386-generation processors.
+  { "i386", CK_i386, ~0U, PROC_32_BIT },
+  // i486-generation processors.
----------------
Once we have feature bits in the table the PROC_32_BIT/PROC_64_BIT can just check FEATURE_EM64T.


This patch removes the PROC macro in favor of CPUKind enum and a
table contains information about CPUs.

The current information in the table is the CPU name, CPUKind enum
value, key feature for target multiversioning, and Is64Bit capable.
For the strings that are aliases, I've duplicated the information
in the table. This means there are more rows in the table than
CPUKind enums.

This replaces multiple StringSwitch's with loops through the table.
They are linear searches due to the table being more logically
ordered than alphabetical. The StringSwitch's would have also been
linear. I've used StringLiteral on the strings in the table so we
can quickly check the length while searching.

I contemplated having a CPUKind for each string so there was a 1:1
mapping, but didn't want to spread more names to the places that
use the enum.

My ultimate goal here is to store the features for each CPU as a
bitset within the table. Hoping to use constexpr to make this
composable so we can group features and inherit them. After the
table lookup we can turn the bitset into a list of strings for the
frontend. The current switch we have for selecting features for
CPUs has become difficult to maintain while trying to express
inheritance relationships.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82414

Files:
  clang/lib/Basic/Targets/X86.cpp
  llvm/include/llvm/Support/X86TargetParser.def
  llvm/include/llvm/Support/X86TargetParser.h
  llvm/lib/Support/X86TargetParser.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D82414.272837.patch
Type: text/x-patch
Size: 18431 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200623/e15590de/attachment-0001.bin>


More information about the cfe-commits mailing list