aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/llvm16/lib/MC/SPIRVObjectWriter.cpp
diff options
context:
space:
mode:
authorvitalyisaev <vitalyisaev@yandex-team.com>2023-06-29 10:00:50 +0300
committervitalyisaev <vitalyisaev@yandex-team.com>2023-06-29 10:00:50 +0300
commit6ffe9e53658409f212834330e13564e4952558f6 (patch)
tree85b1e00183517648b228aafa7c8fb07f5276f419 /contrib/libs/llvm16/lib/MC/SPIRVObjectWriter.cpp
parent726057070f9c5a91fc10fde0d5024913d10f1ab9 (diff)
downloadydb-6ffe9e53658409f212834330e13564e4952558f6.tar.gz
YQ Connector: support managed ClickHouse
Со стороны dqrun можно обратиться к инстансу коннектора, который работает на streaming стенде, и извлечь данные из облачного CH.
Diffstat (limited to 'contrib/libs/llvm16/lib/MC/SPIRVObjectWriter.cpp')
-rw-r--r--contrib/libs/llvm16/lib/MC/SPIRVObjectWriter.cpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/contrib/libs/llvm16/lib/MC/SPIRVObjectWriter.cpp b/contrib/libs/llvm16/lib/MC/SPIRVObjectWriter.cpp
new file mode 100644
index 0000000000..cb49f5eeca
--- /dev/null
+++ b/contrib/libs/llvm16/lib/MC/SPIRVObjectWriter.cpp
@@ -0,0 +1,78 @@
+//===- llvm/MC/MCSPIRVObjectWriter.cpp - SPIR-V Object Writer ----*- 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/MC/MCAssembler.h"
+#include "llvm/MC/MCSPIRVObjectWriter.h"
+#include "llvm/MC/MCSection.h"
+#include "llvm/MC/MCValue.h"
+#include "llvm/Support/EndianStream.h"
+
+using namespace llvm;
+
+namespace {
+class SPIRVObjectWriter : public MCObjectWriter {
+ ::support::endian::Writer W;
+
+ /// The target specific SPIR-V writer instance.
+ std::unique_ptr<MCSPIRVObjectTargetWriter> TargetObjectWriter;
+
+public:
+ SPIRVObjectWriter(std::unique_ptr<MCSPIRVObjectTargetWriter> MOTW,
+ raw_pwrite_stream &OS)
+ : W(OS, support::little), TargetObjectWriter(std::move(MOTW)) {}
+
+ ~SPIRVObjectWriter() override {}
+
+private:
+ void recordRelocation(MCAssembler &Asm, const MCAsmLayout &Layout,
+ const MCFragment *Fragment, const MCFixup &Fixup,
+ MCValue Target, uint64_t &FixedValue) override {}
+
+ void executePostLayoutBinding(MCAssembler &Asm,
+ const MCAsmLayout &Layout) override {}
+
+ uint64_t writeObject(MCAssembler &Asm, const MCAsmLayout &Layout) override;
+ void writeHeader(const MCAssembler &Asm);
+};
+} // namespace
+
+void SPIRVObjectWriter::writeHeader(const MCAssembler &Asm) {
+ constexpr uint32_t MagicNumber = 0x07230203;
+
+ // TODO: set the version on a min-necessary basis (just like the translator
+ // does) requires some refactoring of MCAssembler::VersionInfoType.
+ constexpr uint32_t Major = 1;
+ constexpr uint32_t Minor = 0;
+ constexpr uint32_t VersionNumber = 0 | (Major << 16) | (Minor << 8);
+ // TODO: check if we could use anything other than 0 (spec allows).
+ constexpr uint32_t GeneratorMagicNumber = 0;
+ // TODO: do not hardcode this as well.
+ constexpr uint32_t Bound = 900;
+ constexpr uint32_t Schema = 0;
+
+ W.write<uint32_t>(MagicNumber);
+ W.write<uint32_t>(VersionNumber);
+ W.write<uint32_t>(GeneratorMagicNumber);
+ W.write<uint32_t>(Bound);
+ W.write<uint32_t>(Schema);
+}
+
+uint64_t SPIRVObjectWriter::writeObject(MCAssembler &Asm,
+ const MCAsmLayout &Layout) {
+ uint64_t StartOffset = W.OS.tell();
+ writeHeader(Asm);
+ for (const MCSection &S : Asm)
+ Asm.writeSectionData(W.OS, &S, Layout);
+ return W.OS.tell() - StartOffset;
+}
+
+std::unique_ptr<MCObjectWriter>
+llvm::createSPIRVObjectWriter(std::unique_ptr<MCSPIRVObjectTargetWriter> MOTW,
+ raw_pwrite_stream &OS) {
+ return std::make_unique<SPIRVObjectWriter>(std::move(MOTW), OS);
+}