pub struct ExpandShapeOperation<'c> { /* private fields */ }
Expand description
An expand_shape
operation. Operation to produce a memref with a higher rank..
The memref.expand_shape
op produces a new view with a higher rank whose
sizes are a reassociation of the original view
. The operation is limited
to such reassociations, where a dimension is expanded into one or multiple
contiguous dimensions. Such reassociations never require additional allocs
or copies.
A reassociation is defined as a grouping of dimensions and is represented with an array of DenseI64ArrayAttr attributes.
Example:
%r = memref.expand_shape %0 [[0, 1], [2]]
: memref<?x?xf32> into memref<?x5x?xf32>
At most one dimension of a reassociation group (e.g., [0, 1] above) may be dynamic in the result type. Otherwise, the op would be ambiguous, as it would not be clear how the source dimension is extended.
If an op can be statically proven to be invalid (e.g, an expansion from
memref<10xf32>
to memref<2x6xf32>
), it is rejected by the verifier. If
it cannot statically be proven invalid (e.g., the full example above; it is
unclear whether the first source dimension is divisible by 5), the op is
accepted by the verifier. However, if the op is in fact invalid at runtime,
the behavior is undefined.
The source memref can be zero-ranked. In that case, the reassociation indices must be empty and the result shape may only consist of unit dimensions.
For simplicity, this op may not be used to cast dynamicity of dimension sizes and/or strides. I.e., if and only if a source dimension is dynamic, there must be a dynamic result dimension in the corresponding reassociation group. Same for strides.
Note: This op currently assumes that the inner strides are of the source/result layout map are the faster-varying ones.
Implementations§
source§impl<'c> ExpandShapeOperation<'c>
impl<'c> ExpandShapeOperation<'c>
sourcepub fn as_operation(&self) -> &Operation<'c>
pub fn as_operation(&self) -> &Operation<'c>
Returns a generic operation.
sourcepub fn builder(
context: &'c Context,
location: Location<'c>
) -> ExpandShapeOperationBuilder<'c, Unset, Unset, Unset>
pub fn builder( context: &'c Context, location: Location<'c> ) -> ExpandShapeOperationBuilder<'c, Unset, Unset, Unset>
Creates a builder.