| //===- OffloadYAML.cpp - Offload Binary YAMLIO implementation -------------===// | 
 | // | 
 | // 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 defines classes for handling the YAML representation of offload | 
 | // binaries. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #include <llvm/ObjectYAML/OffloadYAML.h> | 
 |  | 
 | namespace llvm { | 
 |  | 
 | namespace yaml { | 
 |  | 
 | void ScalarEnumerationTraits<object::ImageKind>::enumeration( | 
 |     IO &IO, object::ImageKind &Value) { | 
 | #define ECase(X) IO.enumCase(Value, #X, object::X) | 
 |   ECase(IMG_None); | 
 |   ECase(IMG_Object); | 
 |   ECase(IMG_Bitcode); | 
 |   ECase(IMG_Cubin); | 
 |   ECase(IMG_Fatbinary); | 
 |   ECase(IMG_PTX); | 
 |   ECase(IMG_LAST); | 
 | #undef ECase | 
 |   IO.enumFallback<Hex16>(Value); | 
 | } | 
 |  | 
 | void ScalarEnumerationTraits<object::OffloadKind>::enumeration( | 
 |     IO &IO, object::OffloadKind &Value) { | 
 | #define ECase(X) IO.enumCase(Value, #X, object::X) | 
 |   ECase(OFK_None); | 
 |   ECase(OFK_OpenMP); | 
 |   ECase(OFK_Cuda); | 
 |   ECase(OFK_HIP); | 
 |   ECase(OFK_LAST); | 
 | #undef ECase | 
 |   IO.enumFallback<Hex16>(Value); | 
 | } | 
 |  | 
 | void MappingTraits<OffloadYAML::Binary>::mapping(IO &IO, | 
 |                                                  OffloadYAML::Binary &O) { | 
 |   assert(!IO.getContext() && "The IO context is initialized already"); | 
 |   IO.setContext(&O); | 
 |   IO.mapTag("!Offload", true); | 
 |   IO.mapOptional("Version", O.Version); | 
 |   IO.mapOptional("Size", O.Size); | 
 |   IO.mapOptional("EntryOffset", O.EntryOffset); | 
 |   IO.mapOptional("EntrySize", O.EntrySize); | 
 |   IO.mapRequired("Members", O.Members); | 
 |   IO.setContext(nullptr); | 
 | } | 
 |  | 
 | void MappingTraits<OffloadYAML::Binary::StringEntry>::mapping( | 
 |     IO &IO, OffloadYAML::Binary::StringEntry &SE) { | 
 |   assert(IO.getContext() && "The IO context is not initialized"); | 
 |   IO.mapRequired("Key", SE.Key); | 
 |   IO.mapRequired("Value", SE.Value); | 
 | } | 
 |  | 
 | void MappingTraits<OffloadYAML::Binary::Member>::mapping( | 
 |     IO &IO, OffloadYAML::Binary::Member &M) { | 
 |   assert(IO.getContext() && "The IO context is not initialized"); | 
 |   IO.mapOptional("ImageKind", M.ImageKind); | 
 |   IO.mapOptional("OffloadKind", M.OffloadKind); | 
 |   IO.mapOptional("Flags", M.Flags); | 
 |   IO.mapOptional("String", M.StringEntries); | 
 |   IO.mapOptional("Content", M.Content); | 
 | } | 
 |  | 
 | } // namespace yaml | 
 |  | 
 | } // namespace llvm |