From 6ffe9e53658409f212834330e13564e4952558f6 Mon Sep 17 00:00:00 2001
From: vitalyisaev <vitalyisaev@yandex-team.com>
Date: Thu, 29 Jun 2023 10:00:50 +0300
Subject: YQ Connector: support managed ClickHouse
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Со стороны dqrun можно обратиться к инстансу коннектора, который работает на streaming стенде, и извлечь данные из облачного CH.
---
 contrib/libs/llvm16/lib/IR/ValueSymbolTable.cpp | 130 ++++++++++++++++++++++++
 1 file changed, 130 insertions(+)
 create mode 100644 contrib/libs/llvm16/lib/IR/ValueSymbolTable.cpp

(limited to 'contrib/libs/llvm16/lib/IR/ValueSymbolTable.cpp')

diff --git a/contrib/libs/llvm16/lib/IR/ValueSymbolTable.cpp b/contrib/libs/llvm16/lib/IR/ValueSymbolTable.cpp
new file mode 100644
index 0000000000..cf85a571f9
--- /dev/null
+++ b/contrib/libs/llvm16/lib/IR/ValueSymbolTable.cpp
@@ -0,0 +1,130 @@
+//===- ValueSymbolTable.cpp - Implement the ValueSymbolTable class --------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements the ValueSymbolTable class for the IR library.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/IR/ValueSymbolTable.h"
+#include "llvm/ADT/SmallString.h"
+#include "llvm/ADT/Triple.h"
+#include "llvm/Config/llvm-config.h"
+#include "llvm/IR/GlobalValue.h"
+#include "llvm/IR/Module.h"
+#include "llvm/IR/Type.h"
+#include "llvm/IR/Value.h"
+#include "llvm/Support/Casting.h"
+#include "llvm/Support/Compiler.h"
+#include "llvm/Support/Debug.h"
+#include "llvm/Support/raw_ostream.h"
+#include <cassert>
+#include <utility>
+
+using namespace llvm;
+
+#define DEBUG_TYPE "valuesymtab"
+
+// Class destructor
+ValueSymbolTable::~ValueSymbolTable() {
+#ifndef NDEBUG // Only do this in -g mode...
+  for (const auto &VI : vmap)
+    dbgs() << "Value still in symbol table! Type = '"
+           << *VI.getValue()->getType() << "' Name = '" << VI.getKeyData()
+           << "'\n";
+  assert(vmap.empty() && "Values remain in symbol table!");
+#endif
+}
+
+ValueName *ValueSymbolTable::makeUniqueName(Value *V,
+                                            SmallString<256> &UniqueName) {
+  unsigned BaseSize = UniqueName.size();
+  while (true) {
+    // Trim any suffix off and append the next number.
+    UniqueName.resize(BaseSize);
+    raw_svector_ostream S(UniqueName);
+    if (auto *GV = dyn_cast<GlobalValue>(V)) {
+      // A dot is appended to mark it as clone during ABI demangling so that
+      // for example "_Z1fv" and "_Z1fv.1" both demangle to "f()", the second
+      // one being a clone.
+      // On NVPTX we cannot use a dot because PTX only allows [A-Za-z0-9_$] for
+      // identifiers. This breaks ABI demangling but at least ptxas accepts and
+      // compiles the program.
+      const Module *M = GV->getParent();
+      if (!(M && Triple(M->getTargetTriple()).isNVPTX()))
+        S << ".";
+    }
+    S << ++LastUnique;
+
+    // Try insert the vmap entry with this suffix.
+    auto IterBool = vmap.insert(std::make_pair(UniqueName.str(), V));
+    if (IterBool.second)
+      return &*IterBool.first;
+  }
+}
+
+// Insert a value into the symbol table with the specified name...
+//
+void ValueSymbolTable::reinsertValue(Value *V) {
+  assert(V->hasName() && "Can't insert nameless Value into symbol table");
+
+  // Try inserting the name, assuming it won't conflict.
+  if (vmap.insert(V->getValueName())) {
+    // LLVM_DEBUG(dbgs() << " Inserted value: " << V->getValueName() << ": " <<
+    // *V << "\n");
+    return;
+  }
+
+  // Otherwise, there is a naming conflict.  Rename this value.
+  SmallString<256> UniqueName(V->getName().begin(), V->getName().end());
+
+  // The name is too already used, just free it so we can allocate a new name.
+  MallocAllocator Allocator;
+  V->getValueName()->Destroy(Allocator);
+
+  ValueName *VN = makeUniqueName(V, UniqueName);
+  V->setValueName(VN);
+}
+
+void ValueSymbolTable::removeValueName(ValueName *V) {
+  // LLVM_DEBUG(dbgs() << " Removing Value: " << V->getKeyData() << "\n");
+  // Remove the value from the symbol table.
+  vmap.remove(V);
+}
+
+/// createValueName - This method attempts to create a value name and insert
+/// it into the symbol table with the specified name.  If it conflicts, it
+/// auto-renames the name and returns that instead.
+ValueName *ValueSymbolTable::createValueName(StringRef Name, Value *V) {
+  if (MaxNameSize > -1 && Name.size() > (unsigned)MaxNameSize)
+    Name = Name.substr(0, std::max(1u, (unsigned)MaxNameSize));
+
+  // In the common case, the name is not already in the symbol table.
+  auto IterBool = vmap.insert(std::make_pair(Name, V));
+  if (IterBool.second) {
+    // LLVM_DEBUG(dbgs() << " Inserted value: " << Entry.getKeyData() << ": "
+    //           << *V << "\n");
+    return &*IterBool.first;
+  }
+
+  // Otherwise, there is a naming conflict.  Rename this value.
+  SmallString<256> UniqueName(Name.begin(), Name.end());
+  return makeUniqueName(V, UniqueName);
+}
+
+#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
+// dump - print out the symbol table
+//
+LLVM_DUMP_METHOD void ValueSymbolTable::dump() const {
+  // dbgs() << "ValueSymbolTable:\n";
+  for (const auto &I : *this) {
+    // dbgs() << "  '" << I->getKeyData() << "' = ";
+    I.getValue()->dump();
+    // dbgs() << "\n";
+  }
+}
+#endif
-- 
cgit v1.2.3