size_t GetAlignmentPaddingSize()

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));
}