[Mlir-commits] [mlir] [mlir][IR] Generalize`DenseElementsAttr` to custom element types (PR #179122)
Matthias Springer
llvmlistbot at llvm.org
Fri Feb 6 09:51:05 PST 2026
================
@@ -85,6 +88,125 @@ IntegerType IntegerType::scaleElementBitwidth(unsigned scale) {
return IntegerType::get(getContext(), scale * getWidth(), getSignedness());
}
+size_t IntegerType::getDenseElementBitSize() const {
+ // Return the actual bit width. Storage alignment is handled separately.
+ // Note: i1 is bit-packed and should be special-cased by the caller.
+ return getWidth();
+}
+
+Attribute IntegerType::convertToAttribute(ArrayRef<char> rawData) const {
+ APInt value = detail::readBits(rawData.data(), /*bitPos=*/0, getWidth());
+ return IntegerAttr::get(*this, value);
+}
+
+LogicalResult
+IntegerType::convertFromAttribute(Attribute attr,
+ SmallVectorImpl<char> &result) const {
+ auto intAttr = dyn_cast<IntegerAttr>(attr);
+ if (!intAttr || intAttr.getType() != *this)
+ return failure();
+
+ size_t byteSize = llvm::divideCeil(getDenseElementBitSize(), CHAR_BIT);
+ size_t bitPos = result.size() * CHAR_BIT;
+ result.resize(result.size() + byteSize);
+ detail::writeBits(result.data(), bitPos, intAttr.getValue());
----------------
matthias-springer wrote:
I removed some of the duplication.
https://github.com/llvm/llvm-project/pull/179122
More information about the Mlir-commits
mailing list