| //===- 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 |