in lib/core_runtime/op_attrs.cc [187:258]
size_t GetAlignmentPaddingSize(const void *data, OpAttrType type,
unsigned offset) {
size_t peak_alignment;
size_t prefix_size = 0;
switch (type) {
case OpAttrType::DTYPE:
peak_alignment = alignof(OpAttrType);
break;
case OpAttrType::AGGREGATE: {
AggregateAttr attr(data);
prefix_size = attr.GetPrefixSize();
peak_alignment = attr.Alignment();
break;
}
case OpAttrType::DENSE: {
DenseAttr attr(data);
prefix_size = attr.GetPrefixSize();
peak_alignment = attr.Alignment();
break;
}
case OpAttrType::SHAPE: {
ShapeAttr attr(data);
prefix_size = attr.GetPrefixSize();
peak_alignment = attr.Alignment();
break;
}
case OpAttrType::FUNC:
peak_alignment = alignof(char);
break;
case OpAttrType::BF16:
peak_alignment = alignof(bf16);
break;
case OpAttrType::F16:
peak_alignment = alignof(fp16);
break;
case OpAttrType::I1:
peak_alignment = alignof(bool);
break;
case OpAttrType::COMPLEX64:
peak_alignment = alignof(std::complex<float>);
break;
case OpAttrType::COMPLEX128:
peak_alignment = alignof(std::complex<double>);
break;
case OpAttrType::UNSUPPORTED_RESOURCE:
case OpAttrType::UNSUPPORTED_VARIANT:
case OpAttrType::UNSUPPORTED_QUI8:
case OpAttrType::UNSUPPORTED_QUI16:
case OpAttrType::UNSUPPORTED_QI8:
case OpAttrType::UNSUPPORTED_QI16:
case OpAttrType::UNSUPPORTED_QI32:
llvm_unreachable("unsupported attribute type");
#define OP_ATTR_TYPE(ENUM, CPP_TYPE) \
case OpAttrType::ENUM: \
peak_alignment = alignof(CPP_TYPE); \
break;
#include "tfrt/core_runtime/op_attr_type.def"
}
return llvm::offsetToAlignment(offset + prefix_size,
llvm::Align(peak_alignment));
}