32 DeviceOp device = getOperation();
34 device.walk([&](DMABDOp op) {
35 if (op.getMixedSizes().empty())
38 for (OpFoldResult s : op.getMixedSizes())
39 if (!getConstantIntValue(s))
41 for (OpFoldResult s : op.getMixedStrides())
42 if (!getConstantIntValue(s))
45 if (op.getPadDimensions() && !op.getPadDimensions()->empty())
48 std::optional<SmallVector<BDDimLayoutAttr>> maybeDims =
49 op.getConstantDimensions();
50 if (!maybeDims || maybeDims->empty())
54 for (BDDimLayoutAttr dim : *maybeDims)
55 product *= dim.getSize();
57 if (!op.hasLen() && !op.getBuffer().getType().hasStaticShape())
59 std::optional<int32_t> lenVal = op.getConstantLen();
60 if (op.getLen() && !lenVal)
62 std::optional<SmallVector<BDDimLayoutAttr>> newDims =
67 if (newDims->empty()) {
68 int32_t len =
static_cast<int32_t
>(product);
69 op.getLenMutable().clear();
71 op.getSizesMutable().clear();
72 op.getStridesMutable().clear();
73 op.setStaticSizes(std::nullopt);
74 op.setStaticStrides(std::nullopt);
78 SmallVector<int64_t> sizes, strides;
79 sizes.reserve(newDims->size());
80 strides.reserve(newDims->size());
81 for (BDDimLayoutAttr dim : *newDims) {
82 sizes.push_back(
static_cast<int64_t
>(dim.getSize()));
83 strides.push_back(
static_cast<int64_t
>(dim.getStride()));
86 op.getSizesMutable().clear();
87 op.getStridesMutable().clear();
88 op.setStaticSizes(sizes);
89 op.setStaticStrides(strides);