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-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file defines classes for handling the YAML representation of offload
10 // binaries.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include <llvm/ObjectYAML/OffloadYAML.h>
15 
16 namespace llvm {
17 
18 namespace yaml {
19 
20 void 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 ECase
31   IO.enumFallback<Hex16>(Value);
32 }
33 
34 void 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 ECase
43   IO.enumFallback<Hex16>(Value);
44 }
45 
46 void 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 
59 void 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 
66 void 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 yaml
77 
78 } // namespace llvm
79