[PATCH] D151901: [BOLT] Instrumentation: Add support for MacOS counters

Elvina Yakubova via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 1 09:45:01 PDT 2023


Elvina created this revision.
Elvina added reviewers: maksfb, Amir, rafauler, yota9.
Herald added subscribers: treapster, ayermolo, kristof.beyls.
Herald added a project: All.
Elvina requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

This patch adds support for generation of getter counters for AArch64 MacOS

continuation of work https://reviews.llvm.org/D151899

Elvina Yakubova,
Advanced Software Technology Lab, Huawei


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D151901

Files:
  bolt/include/bolt/Core/MCPlusBuilder.h
  bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp


Index: bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp
===================================================================
--- bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp
+++ bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp
@@ -1327,6 +1327,35 @@
     return createInstrumentedIndCallHandlerExitBB();
   }
 
+  InstructionListType createGetter(MCContext *Ctx,
+                                   const char *name) const override {
+    const MCPhysReg TempReg = getIntArgRegister(0);
+    InstructionListType Insts(4);
+    MCSymbol *Locs = Ctx->getOrCreateSymbol(name);
+    InstructionListType Addr = materializeAddress(Locs, Ctx, TempReg);
+    std::copy(Addr.begin(), Addr.end(), Insts.begin());
+    loadReg(Insts[2], TempReg, false);
+    createReturn(Insts[3]);
+    return Insts;
+  }
+
+  InstructionListType createNumCountersGetter(MCContext *Ctx) const override {
+    return createGetter(Ctx, "__bolt_num_counters");
+  }
+
+  InstructionListType
+  createInstrLocationsGetter(MCContext *Ctx) const override {
+    return createGetter(Ctx, "__bolt_instr_locations");
+  }
+
+  InstructionListType createInstrTablesGetter(MCContext *Ctx) const override {
+    return createGetter(Ctx, "__bolt_instr_tables");
+  }
+
+  InstructionListType createInstrNumFuncsGetter(MCContext *Ctx) const override {
+    return createGetter(Ctx, "__bolt_instr_num_funcs");
+  }
+
   void convertIndirectCallToLoad(MCInst &Inst, MCPhysReg Reg) override {
     if (Inst.getOpcode() == AArch64::BL || Inst.getOpcode() == AArch64::BLR ||
         Inst.getOpcode() == AArch64::BR || Inst.getOpcode() == AArch64::B) {
Index: bolt/include/bolt/Core/MCPlusBuilder.h
===================================================================
--- bolt/include/bolt/Core/MCPlusBuilder.h
+++ bolt/include/bolt/Core/MCPlusBuilder.h
@@ -1977,6 +1977,12 @@
     return InstructionListType();
   }
 
+  virtual InstructionListType createGetter(MCContext *Ctx,
+                                           const char *name) const {
+    llvm_unreachable("not implemented");
+    return {};
+  }
+
   virtual InstructionListType createNumCountersGetter(MCContext *Ctx) const {
     llvm_unreachable("not implemented");
     return {};


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D151901.527463.patch
Type: text/x-patch
Size: 2208 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230601/31e0c8e8/attachment.bin>


More information about the llvm-commits mailing list