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