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>(Val&: 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>(Val&: 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(Tag: "!Offload" , Default: true); |
51 | IO.mapOptional(Key: "Version" , Val&: O.Version); |
52 | IO.mapOptional(Key: "Size" , Val&: O.Size); |
53 | IO.mapOptional(Key: "EntryOffset" , Val&: O.EntryOffset); |
54 | IO.mapOptional(Key: "EntrySize" , Val&: O.EntrySize); |
55 | IO.mapRequired(Key: "Members" , Val&: 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: "Key" , Val&: SE.Key); |
63 | IO.mapRequired(Key: "Value" , Val&: 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(Key: "ImageKind" , Val&: M.ImageKind); |
70 | IO.mapOptional(Key: "OffloadKind" , Val&: M.OffloadKind); |
71 | IO.mapOptional(Key: "Flags" , Val&: M.Flags); |
72 | IO.mapOptional(Key: "String" , Val&: M.StringEntries); |
73 | IO.mapOptional(Key: "Content" , Val&: M.Content); |
74 | } |
75 | |
76 | } // namespace yaml |
77 | |
78 | } // namespace llvm |
79 | |