<feed xmlns='http://www.w3.org/2005/Atom'>
<title>llvm-project.git/mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp, branch main</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/'/>
<entry>
<title>[mlir] Move vector.{to_elements,from_elements} unrolling to `VectorUnroll.cpp` (#159118)</title>
<updated>2025-09-18T16:03:54+00:00</updated>
<author>
<name>Erick Ochoa Lopez</name>
<email>erick.ochoalopez@amd.com</email>
</author>
<published>2025-09-18T16:03:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=8b9c70dcdbc80f01945c6560232717afd228d532'/>
<id>8b9c70dcdbc80f01945c6560232717afd228d532</id>
<content type='text'>
This PR moves the patterns that unroll vector.to_elements and
vector.from_elements into the file with other vector unrolling
operations. This PR also adds these unrolling patterns into the
`populateVectorUnrollPatterns`. And renames
`populateVectorToElementsLoweringPatterns`
`populateVectorFromElementsLoweringPatterns` to
`populateVectorToElementsUnrollPatterns`
`populateVectorFromElementsUnrollPatterns`.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This PR moves the patterns that unroll vector.to_elements and
vector.from_elements into the file with other vector unrolling
operations. This PR also adds these unrolling patterns into the
`populateVectorUnrollPatterns`. And renames
`populateVectorToElementsLoweringPatterns`
`populateVectorFromElementsLoweringPatterns` to
`populateVectorToElementsUnrollPatterns`
`populateVectorFromElementsUnrollPatterns`.</pre>
</div>
</content>
</entry>
<entry>
<title>[mlir][vector] Add a new TD op to wrap unit-dim collapsing patterns (#157507)</title>
<updated>2025-09-12T10:09:06+00:00</updated>
<author>
<name>Andrzej Warzyński</name>
<email>andrzej.warzynski@arm.com</email>
</author>
<published>2025-09-12T10:09:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=77596b78e5664fff8d272599c0420fc9b87e2c2d'/>
<id>77596b78e5664fff8d272599c0420fc9b87e2c2d</id>
<content type='text'>
Adds a new TD Op,
  * `apply_patterns.vector.drop_inner_most_unit_dims_from_xfer_ops`,

which wraps the following Vector patterns:

  * `DropInnerMostUnitDimsTransferRead`
  * `DropInnerMostUnitDimsTransferWrite`

This complements other existing unit-dimension–related patterns.

To reduce duplication, the
`TestVectorTransferCollapseInnerMostContiguousDims`
pass has been removed. That pass was only used for testing, and its
functionality is now covered by the newly added TD Op.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Adds a new TD Op,
  * `apply_patterns.vector.drop_inner_most_unit_dims_from_xfer_ops`,

which wraps the following Vector patterns:

  * `DropInnerMostUnitDimsTransferRead`
  * `DropInnerMostUnitDimsTransferWrite`

This complements other existing unit-dimension–related patterns.

To reduce duplication, the
`TestVectorTransferCollapseInnerMostContiguousDims`
pass has been removed. That pass was only used for testing, and its
functionality is now covered by the newly added TD Op.</pre>
</div>
</content>
</entry>
<entry>
<title>[mlir][vector] Add vector.to_elements unrolling (#157142)</title>
<updated>2025-09-11T17:56:57+00:00</updated>
<author>
<name>Erick Ochoa Lopez</name>
<email>erick.ochoalopez@amd.com</email>
</author>
<published>2025-09-11T17:56:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=9d19250610fdaa80600d32fc7f6e06dcefd6bbff'/>
<id>9d19250610fdaa80600d32fc7f6e06dcefd6bbff</id>
<content type='text'>
This PR adds support for unrolling `vector.to_element`'s source operand.

It transforms

```mlir
%0:8 = vector.to_elements %v : vector&lt;2x2x2xf32&gt;
```

to

```mlir
%v0 = vector.extract %v[0] : vector&lt;2x2xf32&gt; from vector&lt;2x2x2xf32&gt;
%v1 = vector.extract %v[1] : vector&lt;2x2xf32&gt; from vector&lt;2x2x2xf32&gt;
%0:4 = vector.to_elements %v0 : vector&lt;2x2xf32&gt;
%1:4 = vector.to_elements %v1 : vector&lt;2x2xf32&gt;
// %0:8 = %0:4 - %1:4
```

This pattern will be applied until there are only 1-D vectors left.

---------

Signed-off-by: hanhanW &lt;hanhan0912@gmail.com&gt;
Co-authored-by: hanhanW &lt;hanhan0912@gmail.com&gt;
Co-authored-by: Jakub Kuderski &lt;kubakuderski@gmail.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This PR adds support for unrolling `vector.to_element`'s source operand.

It transforms

```mlir
%0:8 = vector.to_elements %v : vector&lt;2x2x2xf32&gt;
```

to

```mlir
%v0 = vector.extract %v[0] : vector&lt;2x2xf32&gt; from vector&lt;2x2x2xf32&gt;
%v1 = vector.extract %v[1] : vector&lt;2x2xf32&gt; from vector&lt;2x2x2xf32&gt;
%0:4 = vector.to_elements %v0 : vector&lt;2x2xf32&gt;
%1:4 = vector.to_elements %v1 : vector&lt;2x2xf32&gt;
// %0:8 = %0:4 - %1:4
```

This pattern will be applied until there are only 1-D vectors left.

---------

Signed-off-by: hanhanW &lt;hanhan0912@gmail.com&gt;
Co-authored-by: hanhanW &lt;hanhan0912@gmail.com&gt;
Co-authored-by: Jakub Kuderski &lt;kubakuderski@gmail.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>[mlir][vector] Support multi-dimensional vectors in VectorFromElementsLowering (#151175)</title>
<updated>2025-08-18T17:09:12+00:00</updated>
<author>
<name>Yang Bai</name>
<email>baiyang0132@gmail.com</email>
</author>
<published>2025-08-18T17:09:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=4eb1a07d7d1a9722e84490b0ff79d3ae5e260f76'/>
<id>4eb1a07d7d1a9722e84490b0ff79d3ae5e260f76</id>
<content type='text'>
This patch introduces a new unrolling-based approach for lowering
multi-dimensional `vector.from_elements` operations.

**Implementation Details:**
1. **New Transform Pattern**: Added `UnrollFromElements` that unrolls a
N-D(N&gt;=2) from_elements op to a (N-1)-D from_elements op align the
outermost dimension.
2. **Utility Functions**: Added `unrollVectorOp` to reuse the unroll
algo of vector.gather for vector.from_elements.
3. **Integration**: Added the unrolling pattern to the
convert-vector-to-llvm pass as a temporal transformation.
4. Use direct LLVM dialect operations instead of intermediate
vector.insert operations for efficiency in `VectorFromElementsLowering`.

**Example:**
```mlir
// unroll
%v = vector.from_elements  %e0, %e1, %e2, %e3 : vector&lt;2x2xf32&gt;
=&gt;
%poison_2d = ub.poison : vector&lt;2x2xf32&gt;
%vec_1d_0 = vector.from_elements %e0, %e1 : vector&lt;2xf32&gt;
%vec_2d_0 = vector.insert %vec_1d_0, %poison_2d [0] : vector&lt;2xf32&gt; into vector&lt;2x2xf32&gt;
%vec_1d_1 = vector.from_elements %e2, %e3 : vector&lt;2xf32&gt;
%result = vector.insert %vec_1d_1, %vec_2d_0 [1] : vector&lt;2xf32&gt; into vector&lt;2x2xf32&gt;

// convert-vector-to-llvm
%v = vector.from_elements %e0, %e1, %e2, %e3 : vector&lt;2x2xf32&gt;
=&gt;
%poison_2d = ub.poison : vector&lt;2x2xf32&gt;
%poison_2d_cast = builtin.unrealized_conversion_cast %poison_2d : vector&lt;2x2xf32&gt; to !llvm.array&lt;2 x vector&lt;2xf32&gt;&gt;
%poison_1d_0 = llvm.mlir.poison : vector&lt;2xf32&gt;
%c0_0 = llvm.mlir.constant(0 : i64) : i64
%vec_1d_0_0 = llvm.insertelement %e0, %poison_1d_0[%c0_0 : i64] : vector&lt;2xf32&gt;
%c1_0 = llvm.mlir.constant(1 : i64) : i64
%vec_1d_0_1 = llvm.insertelement %e1, %vec_1d_0_0[%c1_0 : i64] : vector&lt;2xf32&gt;
%vec_2d_0 = llvm.insertvalue %vec_1d_0_1, %poison_2d_cast[0] : !llvm.array&lt;2 x vector&lt;2xf32&gt;&gt;
%poison_1d_1 = llvm.mlir.poison : vector&lt;2xf32&gt;
%c0_1 = llvm.mlir.constant(0 : i64) : i64
%vec_1d_1_0 = llvm.insertelement %e2, %poison_1d_1[%c0_1 : i64] : vector&lt;2xf32&gt;
%c1_1 = llvm.mlir.constant(1 : i64) : i64
%vec_1d_1_1 = llvm.insertelement %e3, %vec_1d_1_0[%c1_1 : i64] : vector&lt;2xf32&gt;
%vec_2d_1 = llvm.insertvalue %vec_1d_1_1, %vec_2d_0[1] : !llvm.array&lt;2 x vector&lt;2xf32&gt;&gt;
%result = builtin.unrealized_conversion_cast %vec_2d_1 : !llvm.array&lt;2 x vector&lt;2xf32&gt;&gt; to vector&lt;2x2xf32&gt;
```

---------

Co-authored-by: Nicolas Vasilache &lt;Nico.Vasilache@amd.com&gt;
Co-authored-by: Yang Bai &lt;yangb@nvidia.com&gt;
Co-authored-by: James Newling &lt;james.newling@gmail.com&gt;
Co-authored-by: Diego Caballero &lt;dieg0ca6aller0@gmail.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch introduces a new unrolling-based approach for lowering
multi-dimensional `vector.from_elements` operations.

**Implementation Details:**
1. **New Transform Pattern**: Added `UnrollFromElements` that unrolls a
N-D(N&gt;=2) from_elements op to a (N-1)-D from_elements op align the
outermost dimension.
2. **Utility Functions**: Added `unrollVectorOp` to reuse the unroll
algo of vector.gather for vector.from_elements.
3. **Integration**: Added the unrolling pattern to the
convert-vector-to-llvm pass as a temporal transformation.
4. Use direct LLVM dialect operations instead of intermediate
vector.insert operations for efficiency in `VectorFromElementsLowering`.

**Example:**
```mlir
// unroll
%v = vector.from_elements  %e0, %e1, %e2, %e3 : vector&lt;2x2xf32&gt;
=&gt;
%poison_2d = ub.poison : vector&lt;2x2xf32&gt;
%vec_1d_0 = vector.from_elements %e0, %e1 : vector&lt;2xf32&gt;
%vec_2d_0 = vector.insert %vec_1d_0, %poison_2d [0] : vector&lt;2xf32&gt; into vector&lt;2x2xf32&gt;
%vec_1d_1 = vector.from_elements %e2, %e3 : vector&lt;2xf32&gt;
%result = vector.insert %vec_1d_1, %vec_2d_0 [1] : vector&lt;2xf32&gt; into vector&lt;2x2xf32&gt;

// convert-vector-to-llvm
%v = vector.from_elements %e0, %e1, %e2, %e3 : vector&lt;2x2xf32&gt;
=&gt;
%poison_2d = ub.poison : vector&lt;2x2xf32&gt;
%poison_2d_cast = builtin.unrealized_conversion_cast %poison_2d : vector&lt;2x2xf32&gt; to !llvm.array&lt;2 x vector&lt;2xf32&gt;&gt;
%poison_1d_0 = llvm.mlir.poison : vector&lt;2xf32&gt;
%c0_0 = llvm.mlir.constant(0 : i64) : i64
%vec_1d_0_0 = llvm.insertelement %e0, %poison_1d_0[%c0_0 : i64] : vector&lt;2xf32&gt;
%c1_0 = llvm.mlir.constant(1 : i64) : i64
%vec_1d_0_1 = llvm.insertelement %e1, %vec_1d_0_0[%c1_0 : i64] : vector&lt;2xf32&gt;
%vec_2d_0 = llvm.insertvalue %vec_1d_0_1, %poison_2d_cast[0] : !llvm.array&lt;2 x vector&lt;2xf32&gt;&gt;
%poison_1d_1 = llvm.mlir.poison : vector&lt;2xf32&gt;
%c0_1 = llvm.mlir.constant(0 : i64) : i64
%vec_1d_1_0 = llvm.insertelement %e2, %poison_1d_1[%c0_1 : i64] : vector&lt;2xf32&gt;
%c1_1 = llvm.mlir.constant(1 : i64) : i64
%vec_1d_1_1 = llvm.insertelement %e3, %vec_1d_1_0[%c1_1 : i64] : vector&lt;2xf32&gt;
%vec_2d_1 = llvm.insertvalue %vec_1d_1_1, %vec_2d_0[1] : !llvm.array&lt;2 x vector&lt;2xf32&gt;&gt;
%result = builtin.unrealized_conversion_cast %vec_2d_1 : !llvm.array&lt;2 x vector&lt;2xf32&gt;&gt; to vector&lt;2x2xf32&gt;
```

---------

Co-authored-by: Nicolas Vasilache &lt;Nico.Vasilache@amd.com&gt;
Co-authored-by: Yang Bai &lt;yangb@nvidia.com&gt;
Co-authored-by: James Newling &lt;james.newling@gmail.com&gt;
Co-authored-by: Diego Caballero &lt;dieg0ca6aller0@gmail.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>[mlir] Remove unused includes (NFC) (#148769)</title>
<updated>2025-07-15T05:19:23+00:00</updated>
<author>
<name>Kazu Hirata</name>
<email>kazu@google.com</email>
</author>
<published>2025-07-15T05:19:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=c06d3a7b728293cbc53ff91239d6cd87c0982ffb'/>
<id>c06d3a7b728293cbc53ff91239d6cd87c0982ffb</id>
<content type='text'>
These are identified by misc-include-cleaner.  I've filtered out those
that break builds.  Also, I'm staying away from llvm-config.h,
config.h, and Compiler.h, which likely cause platform- or
compiler-specific build failures.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
These are identified by misc-include-cleaner.  I've filtered out those
that break builds.  Also, I'm staying away from llvm-config.h,
config.h, and Compiler.h, which likely cause platform- or
compiler-specific build failures.</pre>
</div>
</content>
</entry>
<entry>
<title>[mlir] Add use-vector-alignment flag to ConvertVectorToLLVMPass (#137389)</title>
<updated>2025-05-02T19:54:26+00:00</updated>
<author>
<name>Lily Orth-Smith</name>
<email>lilyorthsmith@gmail.com</email>
</author>
<published>2025-05-02T19:54:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=3715de976e41654db83a0aef5be50790024639ea'/>
<id>3715de976e41654db83a0aef5be50790024639ea</id>
<content type='text'>
In ConvertVectorToLLVM, the only option for setting alignment of
`vector.gather`, `vector.scatter`, and the `vector.load/store` ops was
to extract it from the datatype of the memref type. However, this is
insufficient for hardware backends requiring alignment of vector types.
This PR introduces the `use-vector-alignment` option to the
`ConvertVectorToLLVMPass`, which makes the pass use the alignment of the
vector type of these operations instead of the alignment of the memref
type.

---------

Co-authored-by: Lily Orth-Smith &lt;lorthsmith@microsoft.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In ConvertVectorToLLVM, the only option for setting alignment of
`vector.gather`, `vector.scatter`, and the `vector.load/store` ops was
to extract it from the datatype of the memref type. However, this is
insufficient for hardware backends requiring alignment of vector types.
This PR introduces the `use-vector-alignment` option to the
`ConvertVectorToLLVMPass`, which makes the pass use the alignment of the
vector type of these operations instead of the alignment of the memref
type.

---------

Co-authored-by: Lily Orth-Smith &lt;lorthsmith@microsoft.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>[mlir][vector] Update ApplyVectorReductionToContractPatternsOp (#136699)</title>
<updated>2025-04-22T19:22:32+00:00</updated>
<author>
<name>Andrzej Warzyński</name>
<email>andrzej.warzynski@arm.com</email>
</author>
<published>2025-04-22T19:22:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=e5128332dbb3bedfa30633fad30a52f5b1567d70'/>
<id>e5128332dbb3bedfa30633fad30a52f5b1567d70</id>
<content type='text'>
This PR removes the use of `populateSinkVectorOpsPatterns` from the
definition of:
  * `transform.apply_patterns.vector.reduction_to_contract`

As of #131462, there is now a dedicated transform op for this pattern:
  * `transform.apply_patterns.vector.sink_op`

Given that, we should now use the new TD op directly instead of relying
on unrelated TD ops to include it.

NOTE TO DOWNSTREAM USERS:
Please add the following to your TD scripts:
  * `transform.apply_patterns.vector.sink_op`

See the updated test for an example.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This PR removes the use of `populateSinkVectorOpsPatterns` from the
definition of:
  * `transform.apply_patterns.vector.reduction_to_contract`

As of #131462, there is now a dedicated transform op for this pattern:
  * `transform.apply_patterns.vector.sink_op`

Given that, we should now use the new TD op directly instead of relying
on unrelated TD ops to include it.

NOTE TO DOWNSTREAM USERS:
Please add the following to your TD scripts:
  * `transform.apply_patterns.vector.sink_op`

See the updated test for an example.</pre>
</div>
</content>
</entry>
<entry>
<title>[mlir][vector] Sink vector.extract/splat into load/store ops (#134389)</title>
<updated>2025-04-22T14:18:54+00:00</updated>
<author>
<name>Ivan Butygin</name>
<email>ivan.butygin@gmail.com</email>
</author>
<published>2025-04-22T14:18:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=e87aa0c6ab7b9d1abbf86e8df84053cd4de92656'/>
<id>e87aa0c6ab7b9d1abbf86e8df84053cd4de92656</id>
<content type='text'>
```
vector.load %arg0[%arg1] : memref&lt;?xf32&gt;, vector&lt;4xf32&gt;
vector.extract %0[1] : f32 from vector&lt;4xf32&gt;
```
Gets converted to:
```
%c1 = arith.constant 1 : index
%0 = arith.addi %arg1, %c1 overflow&lt;nsw&gt; : index
%1 = memref.load %arg0[%0] : memref&lt;?xf32&gt;
```

```
%0 = vector.splat %arg2 : vector&lt;1xf32&gt;
vector.store %0, %arg0[%arg1] : memref&lt;?xf32&gt;, vector&lt;1xf32&gt;
```
Gets converted to:
```
memref.store %arg2, %arg0[%arg1] : memref&lt;?xf32&gt;
```</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
```
vector.load %arg0[%arg1] : memref&lt;?xf32&gt;, vector&lt;4xf32&gt;
vector.extract %0[1] : f32 from vector&lt;4xf32&gt;
```
Gets converted to:
```
%c1 = arith.constant 1 : index
%0 = arith.addi %arg1, %c1 overflow&lt;nsw&gt; : index
%1 = memref.load %arg0[%0] : memref&lt;?xf32&gt;
```

```
%0 = vector.splat %arg2 : vector&lt;1xf32&gt;
vector.store %0, %arg0[%arg1] : memref&lt;?xf32&gt;, vector&lt;1xf32&gt;
```
Gets converted to:
```
memref.store %arg2, %arg0[%arg1] : memref&lt;?xf32&gt;
```</pre>
</div>
</content>
</entry>
<entry>
<title>[mlir][vector] Propagate `vector.extract` through elementwise ops (#131462)</title>
<updated>2025-03-25T11:07:48+00:00</updated>
<author>
<name>Ivan Butygin</name>
<email>ivan.butygin@gmail.com</email>
</author>
<published>2025-03-25T11:07:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=9b022220b7960946b5ab3be1e5ace32079b47c5c'/>
<id>9b022220b7960946b5ab3be1e5ace32079b47c5c</id>
<content type='text'>
Propagate `Extract(Elementwise(...))` -&gt; `Elemetwise(Extract...)`.

Currenly limited to the case when extract is the single use of
elementwise to avoid introducing additional elementwise ops.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Propagate `Extract(Elementwise(...))` -&gt; `Elemetwise(Extract...)`.

Currenly limited to the case when extract is the single use of
elementwise to avoid introducing additional elementwise ops.</pre>
</div>
</content>
</entry>
<entry>
<title>[mlir] Refactor ConvertVectorToLLVMPass options (#128219)</title>
<updated>2025-03-10T10:32:03+00:00</updated>
<author>
<name>Artemiy Bulavin</name>
<email>artemiyb@graphcore.ai</email>
</author>
<published>2025-03-10T10:32:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=f3dcc0fe228f6a1a69147ead0a76ce0fe02d316d'/>
<id>f3dcc0fe228f6a1a69147ead0a76ce0fe02d316d</id>
<content type='text'>
The `VectorTransformsOptions` on the `ConvertVectorToLLVMPass` is
currently represented as a struct, which makes it not serialisable. This
means a pass pipeline that contains this pass cannot be represented as
textual form, which breaks reproducer generation and options such as
`--dump-pass-pipeline`.

This PR expands the `VectorTransformsOptions` struct into the two
options that are actually used by the Pass' patterns:
`vector-contract-lowering` and `vector-transpose-lowering` . The other
options present in VectorTransformOptions are not used by any patterns
in this pass.

Additionally, I have changed some interfaces to only take these specific
options over the full options struct as, again, the vector contract and
transpose lowering patterns only need one of their respective options.

Finally, I have added a simple lit test that just prints the pass
pipeline using `--dump-pass-pipeline` to ensure the options on this pass
remain serialisable.

Fixes #129046</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The `VectorTransformsOptions` on the `ConvertVectorToLLVMPass` is
currently represented as a struct, which makes it not serialisable. This
means a pass pipeline that contains this pass cannot be represented as
textual form, which breaks reproducer generation and options such as
`--dump-pass-pipeline`.

This PR expands the `VectorTransformsOptions` struct into the two
options that are actually used by the Pass' patterns:
`vector-contract-lowering` and `vector-transpose-lowering` . The other
options present in VectorTransformOptions are not used by any patterns
in this pass.

Additionally, I have changed some interfaces to only take these specific
options over the full options struct as, again, the vector contract and
transpose lowering patterns only need one of their respective options.

Finally, I have added a simple lit test that just prints the pass
pipeline using `--dump-pass-pipeline` to ensure the options on this pass
remain serialisable.

Fixes #129046</pre>
</div>
</content>
</entry>
</feed>
