aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/llvm12/include/llvm/MC/MCLinkerOptimizationHint.h
diff options
context:
space:
mode:
authororivej <orivej@yandex-team.ru>2022-02-10 16:44:49 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:44:49 +0300
commit718c552901d703c502ccbefdfc3c9028d608b947 (patch)
tree46534a98bbefcd7b1f3faa5b52c138ab27db75b7 /contrib/libs/llvm12/include/llvm/MC/MCLinkerOptimizationHint.h
parente9656aae26e0358d5378e5b63dcac5c8dbe0e4d0 (diff)
downloadydb-718c552901d703c502ccbefdfc3c9028d608b947.tar.gz
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/llvm12/include/llvm/MC/MCLinkerOptimizationHint.h')
-rw-r--r--contrib/libs/llvm12/include/llvm/MC/MCLinkerOptimizationHint.h398
1 files changed, 199 insertions, 199 deletions
diff --git a/contrib/libs/llvm12/include/llvm/MC/MCLinkerOptimizationHint.h b/contrib/libs/llvm12/include/llvm/MC/MCLinkerOptimizationHint.h
index 6d48e64d30..9a1b204ee5 100644
--- a/contrib/libs/llvm12/include/llvm/MC/MCLinkerOptimizationHint.h
+++ b/contrib/libs/llvm12/include/llvm/MC/MCLinkerOptimizationHint.h
@@ -1,199 +1,199 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-//===- MCLinkerOptimizationHint.h - LOH interface ---------------*- 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
-//
-//===----------------------------------------------------------------------===//
-//
-// This file declares some helpers classes to handle Linker Optimization Hint
-// (LOH).
-//
-// FIXME: LOH interface supports only MachO format at the moment.
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_MC_MCLINKEROPTIMIZATIONHINT_H
-#define LLVM_MC_MCLINKEROPTIMIZATIONHINT_H
-
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/StringRef.h"
-#include "llvm/ADT/StringSwitch.h"
-#include "llvm/Support/raw_ostream.h"
-#include <cassert>
-#include <cstdint>
-
-namespace llvm {
-
-class MachObjectWriter;
-class MCAsmLayout;
-class MCSymbol;
-
-/// Linker Optimization Hint Type.
-enum MCLOHType {
- MCLOH_AdrpAdrp = 0x1u, ///< Adrp xY, _v1@PAGE -> Adrp xY, _v2@PAGE.
- MCLOH_AdrpLdr = 0x2u, ///< Adrp _v@PAGE -> Ldr _v@PAGEOFF.
- MCLOH_AdrpAddLdr = 0x3u, ///< Adrp _v@PAGE -> Add _v@PAGEOFF -> Ldr.
- MCLOH_AdrpLdrGotLdr = 0x4u, ///< Adrp _v@GOTPAGE -> Ldr _v@GOTPAGEOFF -> Ldr.
- MCLOH_AdrpAddStr = 0x5u, ///< Adrp _v@PAGE -> Add _v@PAGEOFF -> Str.
- MCLOH_AdrpLdrGotStr = 0x6u, ///< Adrp _v@GOTPAGE -> Ldr _v@GOTPAGEOFF -> Str.
- MCLOH_AdrpAdd = 0x7u, ///< Adrp _v@PAGE -> Add _v@PAGEOFF.
- MCLOH_AdrpLdrGot = 0x8u ///< Adrp _v@GOTPAGE -> Ldr _v@GOTPAGEOFF.
-};
-
-static inline StringRef MCLOHDirectiveName() {
- return StringRef(".loh");
-}
-
-static inline bool isValidMCLOHType(unsigned Kind) {
- return Kind >= MCLOH_AdrpAdrp && Kind <= MCLOH_AdrpLdrGot;
-}
-
-static inline int MCLOHNameToId(StringRef Name) {
-#define MCLOHCaseNameToId(Name) .Case(#Name, MCLOH_ ## Name)
- return StringSwitch<int>(Name)
- MCLOHCaseNameToId(AdrpAdrp)
- MCLOHCaseNameToId(AdrpLdr)
- MCLOHCaseNameToId(AdrpAddLdr)
- MCLOHCaseNameToId(AdrpLdrGotLdr)
- MCLOHCaseNameToId(AdrpAddStr)
- MCLOHCaseNameToId(AdrpLdrGotStr)
- MCLOHCaseNameToId(AdrpAdd)
- MCLOHCaseNameToId(AdrpLdrGot)
- .Default(-1);
-#undef MCLOHCaseNameToId
-}
-
-static inline StringRef MCLOHIdToName(MCLOHType Kind) {
-#define MCLOHCaseIdToName(Name) case MCLOH_ ## Name: return StringRef(#Name);
- switch (Kind) {
- MCLOHCaseIdToName(AdrpAdrp);
- MCLOHCaseIdToName(AdrpLdr);
- MCLOHCaseIdToName(AdrpAddLdr);
- MCLOHCaseIdToName(AdrpLdrGotLdr);
- MCLOHCaseIdToName(AdrpAddStr);
- MCLOHCaseIdToName(AdrpLdrGotStr);
- MCLOHCaseIdToName(AdrpAdd);
- MCLOHCaseIdToName(AdrpLdrGot);
- }
- return StringRef();
-#undef MCLOHCaseIdToName
-}
-
-static inline int MCLOHIdToNbArgs(MCLOHType Kind) {
- switch (Kind) {
- // LOH with two arguments
- case MCLOH_AdrpAdrp:
- case MCLOH_AdrpLdr:
- case MCLOH_AdrpAdd:
- case MCLOH_AdrpLdrGot:
- return 2;
- // LOH with three arguments
- case MCLOH_AdrpAddLdr:
- case MCLOH_AdrpLdrGotLdr:
- case MCLOH_AdrpAddStr:
- case MCLOH_AdrpLdrGotStr:
- return 3;
- }
- return -1;
-}
-
-/// Store Linker Optimization Hint information (LOH).
-class MCLOHDirective {
- MCLOHType Kind;
-
- /// Arguments of this directive. Order matters.
- SmallVector<MCSymbol *, 3> Args;
-
- /// Emit this directive in \p OutStream using the information available
- /// in the given \p ObjWriter and \p Layout to get the address of the
- /// arguments within the object file.
- void emit_impl(raw_ostream &OutStream, const MachObjectWriter &ObjWriter,
- const MCAsmLayout &Layout) const;
-
-public:
- using LOHArgs = SmallVectorImpl<MCSymbol *>;
-
- MCLOHDirective(MCLOHType Kind, const LOHArgs &Args)
- : Kind(Kind), Args(Args.begin(), Args.end()) {
- assert(isValidMCLOHType(Kind) && "Invalid LOH directive type!");
- }
-
- MCLOHType getKind() const { return Kind; }
-
- const LOHArgs &getArgs() const { return Args; }
-
- /// Emit this directive as:
- /// <kind, numArgs, addr1, ..., addrN>
- void emit(MachObjectWriter &ObjWriter, const MCAsmLayout &Layout) const;
-
- /// Get the size in bytes of this directive if emitted in \p ObjWriter with
- /// the given \p Layout.
- uint64_t getEmitSize(const MachObjectWriter &ObjWriter,
- const MCAsmLayout &Layout) const;
-};
-
-class MCLOHContainer {
- /// Keep track of the emit size of all the LOHs.
- mutable uint64_t EmitSize = 0;
-
- /// Keep track of all LOH directives.
- SmallVector<MCLOHDirective, 32> Directives;
-
-public:
- using LOHDirectives = SmallVectorImpl<MCLOHDirective>;
-
- MCLOHContainer() = default;
-
- /// Const accessor to the directives.
- const LOHDirectives &getDirectives() const {
- return Directives;
- }
-
- /// Add the directive of the given kind \p Kind with the given arguments
- /// \p Args to the container.
- void addDirective(MCLOHType Kind, const MCLOHDirective::LOHArgs &Args) {
- Directives.push_back(MCLOHDirective(Kind, Args));
- }
-
- /// Get the size of the directives if emitted.
- uint64_t getEmitSize(const MachObjectWriter &ObjWriter,
- const MCAsmLayout &Layout) const {
- if (!EmitSize) {
- for (const MCLOHDirective &D : Directives)
- EmitSize += D.getEmitSize(ObjWriter, Layout);
- }
- return EmitSize;
- }
-
- /// Emit all Linker Optimization Hint in one big table.
- /// Each line of the table is emitted by LOHDirective::emit.
- void emit(MachObjectWriter &ObjWriter, const MCAsmLayout &Layout) const {
- for (const MCLOHDirective &D : Directives)
- D.emit(ObjWriter, Layout);
- }
-
- void reset() {
- Directives.clear();
- EmitSize = 0;
- }
-};
-
-// Add types for specialized template using MCSymbol.
-using MCLOHArgs = MCLOHDirective::LOHArgs;
-using MCLOHDirectives = MCLOHContainer::LOHDirectives;
-
-} // end namespace llvm
-
-#endif // LLVM_MC_MCLINKEROPTIMIZATIONHINT_H
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+//===- MCLinkerOptimizationHint.h - LOH interface ---------------*- 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
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares some helpers classes to handle Linker Optimization Hint
+// (LOH).
+//
+// FIXME: LOH interface supports only MachO format at the moment.
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_MC_MCLINKEROPTIMIZATIONHINT_H
+#define LLVM_MC_MCLINKEROPTIMIZATIONHINT_H
+
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/StringSwitch.h"
+#include "llvm/Support/raw_ostream.h"
+#include <cassert>
+#include <cstdint>
+
+namespace llvm {
+
+class MachObjectWriter;
+class MCAsmLayout;
+class MCSymbol;
+
+/// Linker Optimization Hint Type.
+enum MCLOHType {
+ MCLOH_AdrpAdrp = 0x1u, ///< Adrp xY, _v1@PAGE -> Adrp xY, _v2@PAGE.
+ MCLOH_AdrpLdr = 0x2u, ///< Adrp _v@PAGE -> Ldr _v@PAGEOFF.
+ MCLOH_AdrpAddLdr = 0x3u, ///< Adrp _v@PAGE -> Add _v@PAGEOFF -> Ldr.
+ MCLOH_AdrpLdrGotLdr = 0x4u, ///< Adrp _v@GOTPAGE -> Ldr _v@GOTPAGEOFF -> Ldr.
+ MCLOH_AdrpAddStr = 0x5u, ///< Adrp _v@PAGE -> Add _v@PAGEOFF -> Str.
+ MCLOH_AdrpLdrGotStr = 0x6u, ///< Adrp _v@GOTPAGE -> Ldr _v@GOTPAGEOFF -> Str.
+ MCLOH_AdrpAdd = 0x7u, ///< Adrp _v@PAGE -> Add _v@PAGEOFF.
+ MCLOH_AdrpLdrGot = 0x8u ///< Adrp _v@GOTPAGE -> Ldr _v@GOTPAGEOFF.
+};
+
+static inline StringRef MCLOHDirectiveName() {
+ return StringRef(".loh");
+}
+
+static inline bool isValidMCLOHType(unsigned Kind) {
+ return Kind >= MCLOH_AdrpAdrp && Kind <= MCLOH_AdrpLdrGot;
+}
+
+static inline int MCLOHNameToId(StringRef Name) {
+#define MCLOHCaseNameToId(Name) .Case(#Name, MCLOH_ ## Name)
+ return StringSwitch<int>(Name)
+ MCLOHCaseNameToId(AdrpAdrp)
+ MCLOHCaseNameToId(AdrpLdr)
+ MCLOHCaseNameToId(AdrpAddLdr)
+ MCLOHCaseNameToId(AdrpLdrGotLdr)
+ MCLOHCaseNameToId(AdrpAddStr)
+ MCLOHCaseNameToId(AdrpLdrGotStr)
+ MCLOHCaseNameToId(AdrpAdd)
+ MCLOHCaseNameToId(AdrpLdrGot)
+ .Default(-1);
+#undef MCLOHCaseNameToId
+}
+
+static inline StringRef MCLOHIdToName(MCLOHType Kind) {
+#define MCLOHCaseIdToName(Name) case MCLOH_ ## Name: return StringRef(#Name);
+ switch (Kind) {
+ MCLOHCaseIdToName(AdrpAdrp);
+ MCLOHCaseIdToName(AdrpLdr);
+ MCLOHCaseIdToName(AdrpAddLdr);
+ MCLOHCaseIdToName(AdrpLdrGotLdr);
+ MCLOHCaseIdToName(AdrpAddStr);
+ MCLOHCaseIdToName(AdrpLdrGotStr);
+ MCLOHCaseIdToName(AdrpAdd);
+ MCLOHCaseIdToName(AdrpLdrGot);
+ }
+ return StringRef();
+#undef MCLOHCaseIdToName
+}
+
+static inline int MCLOHIdToNbArgs(MCLOHType Kind) {
+ switch (Kind) {
+ // LOH with two arguments
+ case MCLOH_AdrpAdrp:
+ case MCLOH_AdrpLdr:
+ case MCLOH_AdrpAdd:
+ case MCLOH_AdrpLdrGot:
+ return 2;
+ // LOH with three arguments
+ case MCLOH_AdrpAddLdr:
+ case MCLOH_AdrpLdrGotLdr:
+ case MCLOH_AdrpAddStr:
+ case MCLOH_AdrpLdrGotStr:
+ return 3;
+ }
+ return -1;
+}
+
+/// Store Linker Optimization Hint information (LOH).
+class MCLOHDirective {
+ MCLOHType Kind;
+
+ /// Arguments of this directive. Order matters.
+ SmallVector<MCSymbol *, 3> Args;
+
+ /// Emit this directive in \p OutStream using the information available
+ /// in the given \p ObjWriter and \p Layout to get the address of the
+ /// arguments within the object file.
+ void emit_impl(raw_ostream &OutStream, const MachObjectWriter &ObjWriter,
+ const MCAsmLayout &Layout) const;
+
+public:
+ using LOHArgs = SmallVectorImpl<MCSymbol *>;
+
+ MCLOHDirective(MCLOHType Kind, const LOHArgs &Args)
+ : Kind(Kind), Args(Args.begin(), Args.end()) {
+ assert(isValidMCLOHType(Kind) && "Invalid LOH directive type!");
+ }
+
+ MCLOHType getKind() const { return Kind; }
+
+ const LOHArgs &getArgs() const { return Args; }
+
+ /// Emit this directive as:
+ /// <kind, numArgs, addr1, ..., addrN>
+ void emit(MachObjectWriter &ObjWriter, const MCAsmLayout &Layout) const;
+
+ /// Get the size in bytes of this directive if emitted in \p ObjWriter with
+ /// the given \p Layout.
+ uint64_t getEmitSize(const MachObjectWriter &ObjWriter,
+ const MCAsmLayout &Layout) const;
+};
+
+class MCLOHContainer {
+ /// Keep track of the emit size of all the LOHs.
+ mutable uint64_t EmitSize = 0;
+
+ /// Keep track of all LOH directives.
+ SmallVector<MCLOHDirective, 32> Directives;
+
+public:
+ using LOHDirectives = SmallVectorImpl<MCLOHDirective>;
+
+ MCLOHContainer() = default;
+
+ /// Const accessor to the directives.
+ const LOHDirectives &getDirectives() const {
+ return Directives;
+ }
+
+ /// Add the directive of the given kind \p Kind with the given arguments
+ /// \p Args to the container.
+ void addDirective(MCLOHType Kind, const MCLOHDirective::LOHArgs &Args) {
+ Directives.push_back(MCLOHDirective(Kind, Args));
+ }
+
+ /// Get the size of the directives if emitted.
+ uint64_t getEmitSize(const MachObjectWriter &ObjWriter,
+ const MCAsmLayout &Layout) const {
+ if (!EmitSize) {
+ for (const MCLOHDirective &D : Directives)
+ EmitSize += D.getEmitSize(ObjWriter, Layout);
+ }
+ return EmitSize;
+ }
+
+ /// Emit all Linker Optimization Hint in one big table.
+ /// Each line of the table is emitted by LOHDirective::emit.
+ void emit(MachObjectWriter &ObjWriter, const MCAsmLayout &Layout) const {
+ for (const MCLOHDirective &D : Directives)
+ D.emit(ObjWriter, Layout);
+ }
+
+ void reset() {
+ Directives.clear();
+ EmitSize = 0;
+ }
+};
+
+// Add types for specialized template using MCSymbol.
+using MCLOHArgs = MCLOHDirective::LOHArgs;
+using MCLOHDirectives = MCLOHContainer::LOHDirectives;
+
+} // end namespace llvm
+
+#endif // LLVM_MC_MCLINKEROPTIMIZATIONHINT_H
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif