79 lines · cpp
1//===- OffloadYAML.cpp - Offload Binary YAMLIO implementation -------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file defines classes for handling the YAML representation of offload10// binaries.11//12//===----------------------------------------------------------------------===//13 14#include <llvm/ObjectYAML/OffloadYAML.h>15 16namespace llvm {17 18namespace yaml {19 20void ScalarEnumerationTraits<object::ImageKind>::enumeration(21 IO &IO, object::ImageKind &Value) {22#define ECase(X) IO.enumCase(Value, #X, object::X)23 ECase(IMG_None);24 ECase(IMG_Object);25 ECase(IMG_Bitcode);26 ECase(IMG_Cubin);27 ECase(IMG_Fatbinary);28 ECase(IMG_PTX);29 ECase(IMG_LAST);30#undef ECase31 IO.enumFallback<Hex16>(Value);32}33 34void ScalarEnumerationTraits<object::OffloadKind>::enumeration(35 IO &IO, object::OffloadKind &Value) {36#define ECase(X) IO.enumCase(Value, #X, object::X)37 ECase(OFK_None);38 ECase(OFK_OpenMP);39 ECase(OFK_Cuda);40 ECase(OFK_HIP);41 ECase(OFK_LAST);42#undef ECase43 IO.enumFallback<Hex16>(Value);44}45 46void MappingTraits<OffloadYAML::Binary>::mapping(IO &IO,47 OffloadYAML::Binary &O) {48 assert(!IO.getContext() && "The IO context is initialized already");49 IO.setContext(&O);50 IO.mapTag("!Offload", true);51 IO.mapOptional("Version", O.Version);52 IO.mapOptional("Size", O.Size);53 IO.mapOptional("EntryOffset", O.EntryOffset);54 IO.mapOptional("EntrySize", O.EntrySize);55 IO.mapRequired("Members", O.Members);56 IO.setContext(nullptr);57}58 59void MappingTraits<OffloadYAML::Binary::StringEntry>::mapping(60 IO &IO, OffloadYAML::Binary::StringEntry &SE) {61 assert(IO.getContext() && "The IO context is not initialized");62 IO.mapRequired("Key", SE.Key);63 IO.mapRequired("Value", SE.Value);64}65 66void MappingTraits<OffloadYAML::Binary::Member>::mapping(67 IO &IO, OffloadYAML::Binary::Member &M) {68 assert(IO.getContext() && "The IO context is not initialized");69 IO.mapOptional("ImageKind", M.ImageKind);70 IO.mapOptional("OffloadKind", M.OffloadKind);71 IO.mapOptional("Flags", M.Flags);72 IO.mapOptional("String", M.StringEntries);73 IO.mapOptional("Content", M.Content);74}75 76} // namespace yaml77 78} // namespace llvm79