[PATCH] D148037: [BPF] Make sure ALU32 feature is set in MCSubtargetInfo for mcpu=v3

Eduard Zingerman via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 11 12:32:09 PDT 2023


eddyz87 created this revision.
Herald added a subscriber: hiraditya.
Herald added a project: All.
eddyz87 requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

`BPF.td` is used to generate (among other things) `MCSubtargetInfo`
setup function for BPF target.
Specifically, the `BPFGenSubtargetInfo.inc` file:

  enum {
    ALU32 = 0,
    ...
  };
  ...
  extern const llvm::SubtargetSubTypeKV BPFSubTypeKV[] = {
    { "generic", { { { 0x0ULL, ... } } }, ... },
    { "probe",   { { { 0x0ULL, ... } } }, ... },
    { "v1",      { { { 0x0ULL, ... } } }, ... },
    { "v2",      { { { 0x0ULL, ... } } }, ... },
    { "v3",      { { { 0x1ULL, ... } } }, ... },
  };
  ...
  static inline MCSubtargetInfo *createBPFMCSubtargetInfoImpl(...) {
    return new BPFGenMCSubtargetInfo(..., BPFSubTypeKV, ...);
  }

The `SubtargetSubTypeKV` is defined in `MCSubtargetInfo.h` as:

  /// Used to provide key value pairs for feature and CPU bit flags.
  struct SubtargetSubTypeKV {
    const char *Key;                      ///< K-V key string
    FeatureBitArray Implies;              ///< K-V bit mask
    FeatureBitArray TuneImplies;          ///< K-V bit mask
    const MCSchedModel *SchedModel;
    ...
  }

The first bit array specifies features enabled by default for a
specific CPU. This commit makes sure that this information is
communicated to `tablegen` and correct `BPFSubTypeKV` table is
generated. This allows tools like `objdump` to detect available
features when `--mcpu` flag is specified.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D148037

Files:
  llvm/lib/Target/BPF/BPF.td
  llvm/test/CodeGen/BPF/disassemble-mcpu-v3.s


Index: llvm/test/CodeGen/BPF/disassemble-mcpu-v3.s
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/BPF/disassemble-mcpu-v3.s
@@ -0,0 +1,18 @@
+// Make sure that llvm-objdump --mcpu=v3 enables ALU32 feature.
+//
+// Only test a few instructions here, assembler-disassembler.s is more
+// comprehensive but uses --mattr=+alu32 option.
+//
+// RUN: llvm-mc -triple bpfel --mcpu=v3 --assemble --filetype=obj %s -o %t
+// RUN: llvm-objdump -d --mcpu=v2 %t | FileCheck %s --check-prefix=V2
+// RUN: llvm-objdump -d --mcpu=v3 %t | FileCheck %s --check-prefix=V3
+
+w0 = *(u32 *)(r1 + 0)
+lock *(u32 *)(r1 + 0x1) &= w2
+
+
+// V2: 61 10 00 00 00 00 00 00  r0 = *(u32 *)(r1 + 0x0)
+// V2: c3 21 01 00 50 00 00 00  <unknown>
+
+// V3: 61 10 00 00 00 00 00 00  w0 = *(u32 *)(r1 + 0x0)
+// V3: c3 21 01 00 50 00 00 00  lock *(u32 *)(r1 + 0x1) &= w2
Index: llvm/lib/Target/BPF/BPF.td
===================================================================
--- llvm/lib/Target/BPF/BPF.td
+++ llvm/lib/Target/BPF/BPF.td
@@ -17,12 +17,6 @@
 class Proc<string Name, list<SubtargetFeature> Features>
  : Processor<Name, NoItineraries, Features>;
 
-def : Proc<"generic", []>;
-def : Proc<"v1", []>;
-def : Proc<"v2", []>;
-def : Proc<"v3", []>;
-def : Proc<"probe", []>;
-
 def DummyFeature : SubtargetFeature<"dummy", "isDummyMode",
                                     "true", "unused feature">;
 
@@ -32,6 +26,12 @@
 def DwarfRIS: SubtargetFeature<"dwarfris", "UseDwarfRIS", "true",
                                "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections">;
 
+def : Proc<"generic", []>;
+def : Proc<"v1", []>;
+def : Proc<"v2", []>;
+def : Proc<"v3", [ALU32]>;
+def : Proc<"probe", []>;
+
 def BPFInstPrinter : AsmWriter {
   string AsmWriterClassName  = "InstPrinter";
   bit isMCAsmWriter = 1;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D148037.512550.patch
Type: text/x-patch
Size: 1848 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230411/6377da85/attachment.bin>


More information about the llvm-commits mailing list