Commit f341871
authored
Tweak enum serialization to generate better LLVM IR and more compact code (#77)
Change enum serialization form
match self {
Enum::Variant1(field1, field2, ...) => {
// serialize variant idx
let variant_idx: u8 = 0;
writer.write_all(&variant_idx.to_le_bytes())?;
// serialize variant fields
BorshSerialize::serialize(field1, writer)?;
BorshSerialize::serialize(field2, writer)?;
...
}
Enum::Variant2(field1, field2, ...) => {
let variant_idx: u8 = 1;
writer.write_all(&variant_idx.to_le_bytes())?;
// serialize variant fields
BorshSerialize::serialize(field1, writer)?;
BorshSerialize::serialize(field2, writer)?;
...
}
...
}
To:
let variant_idx: u8 = match self {
Enum::Variant1(..) => 0,
Enum::Variant2(..) => 1,
...
};
// serialize variant_idx
writer.write_all(&variant_idx.to_le_bytes())?;
match self {
Enum::Variant1(field1, field2, ...) => {
// serialize variant fields
BorshSerialize::serialize(field1, writer)?;
BorshSerialize::serialize(field2, writer)?;
...
}
Enum::Variant2(field1, field2, ...) => {
// serialize variant fields
BorshSerialize::serialize(field1, writer)?;
BorshSerialize::serialize(field2, writer)?;
...
}
...
}
The latter generates better LLVM IR, and avoids
writer.write_all(&variant_idx.to_le_bytes())?; from being inlined into each
match branch.1 parent 36e63e7 commit f341871
1 file changed
Lines changed: 20 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
| 19 | + | |
| 20 | + | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
| |||
44 | 45 | | |
45 | 46 | | |
46 | 47 | | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
47 | 51 | | |
48 | 52 | | |
49 | 53 | | |
| |||
72 | 76 | | |
73 | 77 | | |
74 | 78 | | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
75 | 87 | | |
76 | | - | |
77 | 88 | | |
78 | | - | |
| 89 | + | |
79 | 90 | | |
80 | | - | |
81 | | - | |
82 | 91 | | |
83 | 92 | | |
84 | 93 | | |
85 | 94 | | |
86 | 95 | | |
87 | 96 | | |
88 | 97 | | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
89 | 103 | | |
90 | | - | |
| 104 | + | |
91 | 105 | | |
92 | 106 | | |
93 | 107 | | |
| |||
0 commit comments