[llvm] Revert "Reland "[llvm-profgen] Add support for ETM trace decoding"" (PR #194695)

via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 28 10:55:07 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-binary-utilities

Author: gulfemsavrun

<details>
<summary>Changes</summary>

Reverts llvm/llvm-project#<!-- -->194465

Caused tools/llvm-profgen/etm-opencsd.test to fail on some systems.

---

Patch is 46.28 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/194695.diff


14 Files Affected:

- (modified) llvm/docs/CommandGuide/llvm-profgen.rst (+1-11) 
- (modified) llvm/docs/ReleaseNotes.md (-2) 
- (removed) llvm/include/llvm/ProfileData/ETMTraceDecoder.h (-46) 
- (modified) llvm/lib/ProfileData/CMakeLists.txt (-21) 
- (removed) llvm/lib/ProfileData/ETMTraceDecoder.cpp (-251) 
- (removed) llvm/test/tools/llvm-profgen/Inputs/etm-opencsd.yaml (-48) 
- (removed) llvm/test/tools/llvm-profgen/etm-arch.test (-81) 
- (removed) llvm/test/tools/llvm-profgen/etm-opencsd.test (-19) 
- (modified) llvm/test/tools/llvm-profgen/lit.local.cfg (-10) 
- (modified) llvm/tools/llvm-profgen/PerfReader.cpp (+17-72) 
- (modified) llvm/tools/llvm-profgen/PerfReader.h (+9-24) 
- (modified) llvm/tools/llvm-profgen/ProfiledBinary.cpp (+4-6) 
- (modified) llvm/tools/llvm-profgen/ProfiledBinary.h (+5-10) 
- (modified) llvm/tools/llvm-profgen/llvm-profgen.cpp (+37-72) 


``````````diff
diff --git a/llvm/docs/CommandGuide/llvm-profgen.rst b/llvm/docs/CommandGuide/llvm-profgen.rst
index 7dc646cac8e81..90ad729ec10b2 100644
--- a/llvm/docs/CommandGuide/llvm-profgen.rst
+++ b/llvm/docs/CommandGuide/llvm-profgen.rst
@@ -24,11 +24,6 @@ At least one of the following commands are required:
   Path of perf-script trace created by Linux perf tool with `script`
   command(the raw perf.data should be profiled with -b).
 
-.. option:: --etm=<string>
-
-  Path of the ETM trace file created by ARM CoreSight trace tools.
-  Requires the OpenCSD library to be enabled during the build.
-
 .. option:: --perfdata=<perfdata>, --pd
 
    Path of raw perf data created by Linux perf tool (it should be profiled
@@ -46,7 +41,7 @@ At least one of the following commands are required:
 .. note::
 
    Only one of ``--perfscript``, ``--perfdata``, ``--unsymbolized-profile``,
-   ``--llvm-sample-profile``, or ``--etm`` may be specified at a time.
+   or ``--llvm-sample-profile`` may be specified at a time.  
 
 .. option:: --binary=<string[,string,...]>
 
@@ -84,11 +79,6 @@ OPTIONS
     
    Path of debug info binary. ``llvm-profgen`` will load the DWARF info from
    it instead of the executable binary.
-
-.. option:: --target-triple=<triple>
-
-   Override the target triple for the binary. This is useful for ETM trace
-   decoding to specify the correct Arm M-profile target.
   
 .. option:: --pid
 
diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md
index 7ee15d42b6837..5f9d6b93bf7d4 100644
--- a/llvm/docs/ReleaseNotes.md
+++ b/llvm/docs/ReleaseNotes.md
@@ -245,8 +245,6 @@ Changes to the Debug Info
 Changes to the LLVM tools
 -------------------------
 
-* `llvm-profgen` now supports ETM trace decoding using the OpenCSD library for Cortex-M targets.
-
 * `llvm-objcopy` no longer corrupts the symbol table when `--update-section` is called for ELF files.
 * `FileCheck` option `-check-prefix` now accepts a comma-separated list of
   prefixes, making it an alias of the existing `-check-prefixes` option.
diff --git a/llvm/include/llvm/ProfileData/ETMTraceDecoder.h b/llvm/include/llvm/ProfileData/ETMTraceDecoder.h
deleted file mode 100644
index 86599fa2fb6d2..0000000000000
--- a/llvm/include/llvm/ProfileData/ETMTraceDecoder.h
+++ /dev/null
@@ -1,46 +0,0 @@
-//===-- ETMTraceDecoder.h - ETM Trace Decoder -------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_PROFILEDATA_ETMTRACEDECODER_H
-#define LLVM_PROFILEDATA_ETMTRACEDECODER_H
-
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/StringRef.h"
-#include "llvm/Support/Error.h"
-
-#include <cstdint>
-#include <memory>
-
-namespace llvm {
-
-class Triple;
-namespace object {
-class Binary;
-}
-
-class ETMDecoder {
-public:
-  virtual ~ETMDecoder() = default;
-
-  class Callback {
-  public:
-    virtual ~Callback() = default;
-    virtual void processInstructionRange(uint64_t Start, uint64_t End) = 0;
-  };
-
-  static Expected<std::unique_ptr<ETMDecoder>>
-  create(const object::Binary &Binary, const Triple &TargetTriple,
-         uint8_t TraceID = 0x10);
-
-  virtual Error processTrace(ArrayRef<uint8_t> TraceData,
-                             Callback &TraceCallback) = 0;
-};
-
-} // namespace llvm
-
-#endif // LLVM_PROFILEDATA_ETMTRACEDECODER_H
diff --git a/llvm/lib/ProfileData/CMakeLists.txt b/llvm/lib/ProfileData/CMakeLists.txt
index 6259f5af897bf..c2366dc0ae03e 100644
--- a/llvm/lib/ProfileData/CMakeLists.txt
+++ b/llvm/lib/ProfileData/CMakeLists.txt
@@ -1,6 +1,5 @@
 add_llvm_component_library(LLVMProfileData
   DataAccessProf.cpp
-  ETMTraceDecoder.cpp
   GCOV.cpp
   IndexedMemProfData.cpp
   InstrProf.cpp
@@ -40,24 +39,4 @@ add_llvm_component_library(LLVMProfileData
   TargetParser
   )
 
-set(LLVM_ENABLE_OPENCSD "AUTO" CACHE STRING "Enable OpenCSD support in LLVMProfileData")
-
-if(NOT LLVM_ENABLE_OPENCSD STREQUAL "OFF")
-  find_library(OPENCSD_LIB NAMES opencsd_c_api opencsd)
-  find_path(OPENCSD_INCLUDE NAMES opencsd/ocsd_if_types.h)
-
-  if(OPENCSD_LIB AND OPENCSD_INCLUDE)
-    target_compile_definitions(LLVMProfileData PRIVATE HAVE_OPENCSD)
-    target_include_directories(LLVMProfileData PRIVATE ${OPENCSD_INCLUDE})
-    target_link_libraries(LLVMProfileData PRIVATE ${OPENCSD_LIB})
-    message(STATUS "LLVMProfileData: OpenCSD support enabled.")
-  else()
-    if(LLVM_ENABLE_OPENCSD STREQUAL "ON")
-      message(FATAL_ERROR "OpenCSD enabled but library or headers not found.")
-    else()
-      message(STATUS "LLVMProfileData: OpenCSD not found; ETM decoding support disabled.")
-    endif()
-  endif()
-endif()
-
 add_subdirectory(Coverage)
diff --git a/llvm/lib/ProfileData/ETMTraceDecoder.cpp b/llvm/lib/ProfileData/ETMTraceDecoder.cpp
deleted file mode 100644
index 3d6a9846ac25c..0000000000000
--- a/llvm/lib/ProfileData/ETMTraceDecoder.cpp
+++ /dev/null
@@ -1,251 +0,0 @@
-//===-- ETMTraceDecoder.cpp - ETM Trace Decoder -----------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/ProfileData/ETMTraceDecoder.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/Object/ELFObjectFile.h"
-#include "llvm/Object/ObjectFile.h"
-#include "llvm/Support/Error.h"
-#include "llvm/TargetParser/ARMTargetParser.h"
-
-#ifdef HAVE_OPENCSD
-#include "opencsd/c_api/opencsd_c_api.h"
-
-namespace llvm {
-
-namespace {
-
-class HardwareTraceConfig {
-public:
-  virtual ~HardwareTraceConfig() = default;
-};
-
-class ETMTraceConfig : public HardwareTraceConfig {
-public:
-  ocsd_etmv4_cfg Cfg{};
-  uint8_t TraceID;
-
-  ETMTraceConfig(const Triple &TargetTriple, uint8_t TraceID)
-      : TraceID(TraceID) {
-    ocsd_arch_version_t ArchVer = ARCH_UNKNOWN;
-    if (TargetTriple.isArmMClass()) {
-      unsigned ArchVersion = ARM::parseArchVersion(TargetTriple.getArchName());
-      if (ArchVersion >= 8)
-        ArchVer = ARCH_V8;
-      else if (ArchVersion == 7)
-        ArchVer = ARCH_V7;
-      else
-        // For version 6 (Cortex-M0) and others.
-        ArchVer = ARCH_UNKNOWN;
-    }
-    // Initialize the decoder for Arm M-profile targets.
-    Cfg.arch_ver = ArchVer;
-    Cfg.core_prof = profile_CortexM;
-
-    // The CoreSight Trace ID (CSID) is a hardware-assigned 7-bit identifier
-    // used to route trace data.
-    Cfg.reg_traceidr = TraceID;
-  }
-
-  Error validate() const {
-    if (Cfg.arch_ver == ARCH_UNKNOWN)
-      return createStringError(
-          inconvertibleErrorCode(),
-          "OpenCSD: Unsupported processor architecture. Only Arm M-profile "
-          "(Cortex-M) with ETM support is currently supported.");
-    return Error::success();
-  }
-};
-
-class ETMDecoderImpl : public ETMDecoder {
-  dcd_tree_handle_t DcdTree = 0;
-  const object::Binary &Binary;
-  const Triple &TargetTriple;
-
-  // Trace processing and Callback handling.
-  static ocsd_datapath_resp_t
-  processTrace(const void *PContext, const ocsd_trc_index_t /*IndexSOP*/,
-               const uint8_t /*TrcChanID*/,
-               const ocsd_generic_trace_elem *Element) {
-    auto *Decoder = static_cast<ETMDecoderImpl *>(const_cast<void *>(PContext));
-    if (!Decoder || !Element)
-      return OCSD_RESP_FATAL_SYS_ERR;
-
-    // Process instruction ranges reconstructed by the decoder.
-    if (Element->elem_type == OCSD_GEN_TRC_ELEM_INSTR_RANGE) {
-      uint64_t Start = Element->st_addr;
-      uint64_t End = Element->en_addr;
-      if (End > Start) {
-        // OpenCSD ranges are exclusive at the end [Start, End).
-        // llvm-profgen range counters expect inclusive bounds [Start, End].
-        // Adjust the exclusive end address provided by OpenCSD to include
-        // the last executed instruction within the reported range.
-        Decoder->CurrentCallback->processInstructionRange(Start, End - 1);
-      }
-    }
-    return OCSD_RESP_CONT;
-  }
-
-  Callback *CurrentCallback = nullptr;
-
-  // Iterate through the ELF program headers to collect all executable LOAD
-  // segments. These are registered as a single transaction to the OpenCSD
-  // memory manager to prevent overlap/collision errors between different
-  // memory regions.
-  Error mapELFSegments(dcd_tree_handle_t DcdTree,
-                       const object::Binary &SourceBin) {
-    SmallVector<ocsd_file_mem_region_t, 4> Regions;
-    auto ProcessHeaders = [&](const auto &ElfFile) {
-      auto ProgramHeaders = ElfFile.program_headers();
-      if (!ProgramHeaders)
-        return;
-
-      for (const auto &Phdr : *ProgramHeaders) {
-        if (Phdr.p_type == llvm::ELF::PT_LOAD &&
-            (Phdr.p_flags & llvm::ELF::PF_X)) {
-          ocsd_file_mem_region_t Region{};
-          Region.start_address = (uint64_t)Phdr.p_vaddr;
-          Region.file_offset = (uint64_t)Phdr.p_offset;
-          Region.region_size = (uint64_t)Phdr.p_filesz;
-          Regions.push_back(Region);
-        }
-      }
-    };
-
-    if (auto *O = dyn_cast<object::ELF32LEObjectFile>(&SourceBin))
-      ProcessHeaders(O->getELFFile());
-    else if (auto *O = dyn_cast<object::ELF64LEObjectFile>(&SourceBin))
-      ProcessHeaders(O->getELFFile());
-    else if (auto *O = dyn_cast<object::ELF32BEObjectFile>(&SourceBin))
-      ProcessHeaders(O->getELFFile());
-    else if (auto *O = dyn_cast<object::ELF64BEObjectFile>(&SourceBin))
-      ProcessHeaders(O->getELFFile());
-
-    if (!Regions.empty()) {
-      std::string Path = SourceBin.getFileName().str();
-      if (ocsd_dt_add_binfile_region_mem_acc(
-              DcdTree, Regions.data(), (uint32_t)Regions.size(),
-              OCSD_MEM_SPACE_ANY, Path.c_str()) != 0) {
-        return createStringError(
-            inconvertibleErrorCode(),
-            "OpenCSD: Failed to map ELF executable segments.");
-      }
-    }
-    return Error::success();
-  }
-
-public:
-  uint8_t TraceID;
-
-  ETMDecoderImpl(const object::Binary &Binary, const Triple &Triple,
-                 uint8_t TraceID)
-      : Binary(Binary), TargetTriple(Triple), TraceID(TraceID) {}
-
-  ~ETMDecoderImpl() override {
-    if (DcdTree)
-      // Deallocate the decoder tree resources.
-      ocsd_destroy_dcd_tree(DcdTree);
-  }
-
-  // Initialize the decoder by auto-detecting the target architecture and
-  // configuring the OpenCSD decoder.
-  Error initialize() {
-    DcdTree = ocsd_create_dcd_tree(OCSD_TRC_SRC_SINGLE, 0);
-    if (!DcdTree)
-      return createStringError(inconvertibleErrorCode(),
-                               "Failed to create OpenCSD decoder tree.");
-
-    // Configure and initialize the instruction-level decoder.
-    ETMTraceConfig Config(TargetTriple, TraceID);
-    if (Error E = Config.validate())
-      return E;
-
-    uint32_t Flags =
-        OCSD_CREATE_FLG_FULL_DECODER | OCSD_OPFLG_CHK_RANGE_CONTINUE;
-    if (ocsd_dt_create_decoder(DcdTree, OCSD_BUILTIN_DCD_ETMV4I, Flags,
-                               (void *)&Config.Cfg, &Config.TraceID) != 0)
-      return createStringError(
-          inconvertibleErrorCode(),
-          "OpenCSD: Failed to initialize the instruction decoder.");
-
-    // Extract and map executable segments from the ELF binary.
-    if (Error E = mapELFSegments(DcdTree, Binary))
-      return E;
-
-    // Register the high-level packet callback. The 'processTrace' function
-    // will be invoked for every decoded instruction range.
-    ocsd_dt_set_gen_elem_outfn(DcdTree, processTrace, this);
-    return Error::success();
-  }
-
-  Error processTrace(ArrayRef<uint8_t> TraceData,
-                     Callback &TraceCallback) override {
-    CurrentCallback = &TraceCallback;
-    // Initial reset to prime the decoder.
-    ocsd_dt_process_data(DcdTree, OCSD_OP_RESET, 0, 0, nullptr, nullptr);
-
-    const uint8_t *DataPtr = TraceData.data();
-    uint32_t TotalSize = TraceData.size();
-    uint32_t Processed = 0;
-
-    // Core Decoding Loop.
-    while (Processed < TotalSize) {
-      uint32_t Consumed = 0;
-      uint32_t Remaining = TotalSize - Processed;
-      ocsd_datapath_resp_t Response =
-          ocsd_dt_process_data(DcdTree, OCSD_OP_DATA, Processed, Remaining,
-                               DataPtr + Processed, &Consumed);
-
-      if (Response == OCSD_RESP_WAIT) {
-        // Decoder buffers are full; flush to drain internal states.
-        ocsd_dt_process_data(DcdTree, OCSD_OP_FLUSH, 0, 0, nullptr, nullptr);
-      } else if (Consumed == 0 && Processed < TotalSize) {
-        // Decoder stalled; skip byte and reset to find next sync point.
-        Processed++;
-        ocsd_dt_process_data(DcdTree, OCSD_OP_RESET, 0, 0, nullptr, nullptr);
-      } else {
-        // Successfully consumed bytes of the bitstream.
-        Processed += Consumed;
-      }
-
-      if (Response >= OCSD_RESP_FATAL_INVALID_DATA)
-        return createStringError(inconvertibleErrorCode(),
-                                 "OpenCSD: Fatal decoding error.");
-    }
-
-    // Finalize the decoding session by flushing the EOT (End of Trace) marker.
-    ocsd_dt_process_data(DcdTree, OCSD_OP_EOT, 0, 0, nullptr, nullptr);
-    return Error::success();
-  }
-};
-} // namespace
-
-Expected<std::unique_ptr<ETMDecoder>>
-ETMDecoder::create(const object::Binary &Binary, const Triple &Triple,
-                   uint8_t TraceID) {
-  auto Decoder = std::make_unique<ETMDecoderImpl>(Binary, Triple, TraceID);
-  if (Error E = Decoder->initialize())
-    return std::move(E);
-  return std::unique_ptr<ETMDecoder>(std::move(Decoder));
-}
-
-} // namespace llvm
-
-#else // !HAVE_OPENCSD
-
-namespace llvm {
-
-Expected<std::unique_ptr<ETMDecoder>>
-ETMDecoder::create(const object::Binary & /*Binary*/, const Triple & /*Triple*/,
-                   uint8_t /*TraceID*/) {
-  return createStringError(inconvertibleErrorCode(), "OpenCSD not enabled.");
-}
-
-} // namespace llvm
-
-#endif // HAVE_OPENCSD
diff --git a/llvm/test/tools/llvm-profgen/Inputs/etm-opencsd.yaml b/llvm/test/tools/llvm-profgen/Inputs/etm-opencsd.yaml
deleted file mode 100644
index 6824b4a9c108b..0000000000000
--- a/llvm/test/tools/llvm-profgen/Inputs/etm-opencsd.yaml
+++ /dev/null
@@ -1,48 +0,0 @@
-# This file contains binary data extracted from the OpenCSD repository sample tests
-# (specifically from decoder/tests/snapshots/armv8_1m_branches/).
-# It is used to verify ETM trace decoding in llvm-profgen.
---- !ELF
-FileHeader:
-  Class:           ELFCLASS32
-  Data:            ELFDATA2LSB
-  Type:            ET_DYN
-  Machine:         EM_ARM
-  Flags:           [ EF_ARM_EABI_VER5 ]
-ProgramHeaders:
-  - Type:            PT_LOAD
-    Flags:           [ PF_X, PF_R ]
-    VAddr:           0x1E008
-    FirstSec:        .text1
-    LastSec:         .text1
-  - Type:            PT_LOAD
-    Flags:           [ PF_X, PF_R ]
-    VAddr:           0x4F9A02
-    FirstSec:        .text2
-    LastSec:         .text2
-Sections:
-  - Name:            .text1
-    Type:            SHT_PROGBITS
-    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
-    Address:         0x1E008
-    AddressAlign:    0x4
-    Content:         2de9f04f8db08142984651eab08706922ab147ea0002b2f1ff3f40f3bf80002fcde9020100f1af8000f08b8016984ff0000a4fea88093a4600f1040b202000eb4810059704900698043008900de000bf079a0af1080a059f0bf1200b0498083a0899ba45014408916bda012a10460792d8bf012008284ff00802a7eb0a0150eab28c082951eab28001293bdb06990024089e01eb8a02169901eb8a03ffe704eb0a0707fb08f193ed002a02eb810191ed001a1a9921ee021a91ed000a44f003c011e000bf19990134644507fb01f1189f4e4407eb810191ed002aa0ee012a81ed002a0fd0dbe73546594600bfb5ec012ab1ec013a22ee032a31ee021a0ff00bc0e0e700bfbaf1000fa2d00afb08f1069a09ab199e02eb8101169acde90b180afb06f10992189a02eb81071a990baa91ed000a1799cde900760a915146dff09cf186e7dde902318b421add08fb01f0069a199e02eb8002581a169bcde90b2806fb01f20993189b03eb82071a9a09ab92ed000a179acde900760a920baadff07cf10db0bde8f08f4ef669304ef6fc12c0f27700a621c0f2770251f218f64ef669304ef20772c0f27700b221c0f2770251f20df6d4d4
-  - Name:            .text2
-    Type:            SHT_PROGBITS
-    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
-    Address:         0x4F9A02
-    AddressAlign:    0x4
-    Content:         002851d096f85c00002864d030462a46234606f5956800f0f2f996ed080a96f82c0020ee009a01286ed1b7eec80a06f594792a464846234602f067f8d8e906104a1e70f100020fdbd8e9083253ea020708d0eb1a64eb0202c91a904104da484602f079f9c8e9085496f8541096f8a40401293ad1002847d098ed000bb5ee400bf1ee10fa40d098ed041b21ee011b81ee000b98ed021b31ee400bb7eec91a80fe010bb7eec09b2fe006f5a4602a4623460af038fe002800f0a080b7eec80a4ef622214ff46d70c2f6942121228ded000b92f18dfb91e0d6ed010a30462a462346b0ee480a00f0e3f887e098ed020b9fed6b1b002801fe000bb7eec91a80fe010bb7eec00b09fe009ad6e928324ff07e5096ed1a0a0390012078ee400a8df80a00002153ea020040f2011706f1680004910591adf8087015d0eb1a64eb020283eae27382eae277b3ebe27367ebe27245f60107cff64707db1b72f10d0228bf8df80a1001e08df80a1003a902aab0ee490a00f029fa96f8e804002804bf96f8f8045feac0703fd030462a46234600f039fe98bb002706f264404121c6f8a874c6e9b077c6f8ac74c6f8b074c6f8b474c6f8b874c6f8bc74c6f85874c6f85c74a6f8607438f7ebf506f1c800faf7c3fed6f808052a46234686f85c70016b0131016306f5aa600af09efd38b142f6491140f6c440caf62f2100226ae706b0bdec048b01b0bde8f0832846214670f75efd41ec180bd8e9120170f758fd96ed120a41ec110bb7eec00a9fed1f2ba0ee021bb4ee481bf1ee10faa6d896f84400012186f8f81401280bd100204df2e111c9e90000c8f2762140f6aa60002292f1c8fa96f8450001280ed1306f40f6f931c3f249010022c8f85800012086f8040540f6ea6092f1b5fa44f6976140f65260c8f26911002292f1acfa76e700bf00bf00bf00000000000000000000000065cdcd412de9f04397b080ed1a0a20eea00a0646d0f8d0048ded090a96ed020a96ed031a00216f4620ee000a21ee011ac6e91b1038462421984691468ded0a0a8ded0b1a38f755f54ff0030e09a800bf50f8041b47f8101b0ff007c0002069468df858000ca809f0a1fb9df85800002865d09df85900f8b906f174042421204638f737f5002001210caa00bf0130134640f001e0274600bf53f80c5b47f8045b0ff007c00131032804f10c0402f10402ecd1012086f8980001204a4686f85c0030464346c6e9189800f046fda0bb002406f264404121c6f8a844c6e9b044c6f8ac44c6f8b044c6f8b444c6f8b844c6f8bc44c6f85844c6f85c44a6f8604438f7f8f406f1c800faf7d0fdd6f808054a46434686f85c40016b0131016306f5aa600af0abfc40b142f6491140f6c440caf62f21002292f106fa17b0bde8f0834ef6fb304ef6bf22c0f27700c121c0f2770275f1eaff2de9f0412ded048b96b00446d0e9181016461d468a1a70eb030223dab6eb010865eb00074ef20140c5f20b40b8eb000077f10200c4e918652ddb04f5a26032462b460af070fc002800f0a98045f6ca2140f64b10c9f283311122cde9008792f1c7f99ce004f5a26032462b460af05bfc002800f09480d4e9180342f6ab71c2f604215222029040f6f200cde90065039392f1aef983e0204600f0f6fa204620ee008a00f06dfb204632462b4620ee009a00f0e2fb20ee000a8ded108a8ded119a8ded120a4ff0030e39a107ad80ef500000202a4687ef504f91ed003f40f6ff7123fe400f35fe016fedee101a71fe4d0fa2ec037f01300ff00dc84046394670f7e5fb41ec100b9fed2e1b40f6ff7110aa20ee010b05f10c0704f16808b7eec00b8ded0a0aedee101aa16a10ee100a71fe4d0f92ed001f31ee600e0b9104a904f17402284671fe4d0f81ed001f19f732f694ed1a0a6c340021022313aa05eb81003e4690ed001a43f001e0204620ee011ab0ec013a96ed002a0c3622ee032a31ee021a0ff00bc802eb810001310437032980ed001ae2d113aa07ca88e8070016b0bdec048bbde8f08100bf00bf00bf00bf0000000001000000020000000300000095d626e80b2e113e2de9f0472ded068b9cb0b1eec0aab0ee409a15460f46b0ee608a04464ff0000a012600f10c08cdf808a08df80c60b4ee4aaaf1ee10fab0ee4a0a5ad60df11c098df820608df86c600df1080c04ae1aab404639464a468ded070a8ded1a0acde9006c01f091ffb4ee4aaaf1ee10fa8df864a043d6012004ae8df86c001aaa304639464346cdf800908ded1aaa07f0b6fb4ff0030e30469fed1d0a00bf15f8011bb0ee401a012908bf90ed001aa0ec011a0ff00dc040f6ff71edee101a18ee100a71fe4d0f96ed001f31ee600e31fe4d8f89ed001f99ed001f94ed003f00ef420d71fe4d0f84ed001f1cb0bdec068bbde8f087b0ee490a70f785fb9fe7b0ee490a70f780fbb0ee40aab4e700bf000000002de9f04381b02ded088b88b0b0ee608ab0ee409a9846154606460af0efff002848d0b0ee480a0af0ffff002842d096f8d80406f59c69199f012802bfc9e90058002086f8d80496f8e8043946189c012802bfc9e90458002086f8e80420460af0fdff00281cbfc6e92858c6e92a4796f85c00d0b330462a464346fff755fe96ed1a0a96ed1c1a96f82e10002030ee410a9fedad1a06f16807012981ee001a0690b1ee412a8ded071a8ded052a29d128ee08aa40e006f5a6602a4643460af0c7fa002800f0ec80b7eec90ab7eec81a49f2f47140f2fc408ded000bc3...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/194695


More information about the llvm-commits mailing list