<feed xmlns='http://www.w3.org/2005/Atom'>
<title>llvm-project.git, branch users/tmatheson-arm/multiple_output_patterns</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>clang-format</title>
<updated>2025-01-22T10:27:26+00:00</updated>
<author>
<name>Tomas Matheson</name>
<email>tomas.matheson@arm.com</email>
</author>
<published>2025-01-22T10:27:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=9b76a7ea0fc731b8998e22b92dc1ae9c7da868c8'/>
<id>9b76a7ea0fc731b8998e22b92dc1ae9c7da868c8</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>fixup merge conflict resolution errors</title>
<updated>2025-01-21T14:18:47+00:00</updated>
<author>
<name>Tomas Matheson</name>
<email>tomas.matheson@arm.com</email>
</author>
<published>2025-01-21T14:12:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=7e7ba17845cd66e3fcbbe19097f4a60407e13ef4'/>
<id>7e7ba17845cd66e3fcbbe19097f4a60407e13ef4</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Implement multiple output patterns</title>
<updated>2025-01-21T14:18:47+00:00</updated>
<author>
<name>Tomas Matheson</name>
<email>tomas.matheson@arm.com</email>
</author>
<published>2024-02-10T11:21:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=0d2594fac0c3eb8b3bd3e43d62cd58ad4afb7c8c'/>
<id>0d2594fac0c3eb8b3bd3e43d62cd58ad4afb7c8c</id>
<content type='text'>
See also D154945. It took me a while to track down the source of the
problems with the existing patterns.

Tablegen patterns for instrucion selection can generate multiple
instructions, but only if there is a data dependency between them so
that they can be expressed as a DAG. For example, something like:

(store (load %src), %dst)
For some patterns, we might want to generate a sequence of instructions
which do not have a data dependency. For example on AArch64 some atomic
instructions are implemented like this:

LDP %ptr
DMB ISH
Currently, sequences like this can not be selected with tablegen
patterns. To work around this we need to do custom selection, which has
several disadvantages compared to using patterns, such as needing
separate implementations for SelectionDAG and GlobalISel.

This patch adds basic support for tablegen Patterns which have a list
of output instructions. Pattern already has the ability to express this
but it looks like it was never implemented.

Multiple result instructions in an output pattern will be chained
together.

The GlobalISel pattern importer will skip these patterns for now. I
intend to implement this soon.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
See also D154945. It took me a while to track down the source of the
problems with the existing patterns.

Tablegen patterns for instrucion selection can generate multiple
instructions, but only if there is a data dependency between them so
that they can be expressed as a DAG. For example, something like:

(store (load %src), %dst)
For some patterns, we might want to generate a sequence of instructions
which do not have a data dependency. For example on AArch64 some atomic
instructions are implemented like this:

LDP %ptr
DMB ISH
Currently, sequences like this can not be selected with tablegen
patterns. To work around this we need to do custom selection, which has
several disadvantages compared to using patterns, such as needing
separate implementations for SelectionDAG and GlobalISel.

This patch adds basic support for tablegen Patterns which have a list
of output instructions. Pattern already has the ability to express this
but it looks like it was never implemented.

Multiple result instructions in an output pattern will be chained
together.

The GlobalISel pattern importer will skip these patterns for now. I
intend to implement this soon.
</pre>
</div>
</content>
</entry>
<entry>
<title>Add TreePattern::hasProperTypeByHwMode</title>
<updated>2025-01-21T14:18:47+00:00</updated>
<author>
<name>Tomas Matheson</name>
<email>tomas.matheson@arm.com</email>
</author>
<published>2024-02-09T15:57:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=daf6bcf1af8600eff9876e366c4c9334f30df100'/>
<id>daf6bcf1af8600eff9876e366c4c9334f30df100</id>
<content type='text'>
Change-Id: I3ac2e64b86233dd4c8b4f7f6effa50ed29759f25
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Change-Id: I3ac2e64b86233dd4c8b4f7f6effa50ed29759f25
</pre>
</div>
</content>
</entry>
<entry>
<title>Add TreePattern constructor that takes multiple patterns</title>
<updated>2025-01-21T14:18:46+00:00</updated>
<author>
<name>Tomas Matheson</name>
<email>tomas.matheson@arm.com</email>
</author>
<published>2024-02-09T15:56:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=85c7ec7fee92ba634f3d2bec502eab94d4fbf18e'/>
<id>85c7ec7fee92ba634f3d2bec502eab94d4fbf18e</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>make getInstructionsInTree const</title>
<updated>2025-01-21T14:18:46+00:00</updated>
<author>
<name>Tomas Matheson</name>
<email>tomas.matheson@arm.com</email>
</author>
<published>2024-02-09T15:58:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=3fa2cf6b1a6a4509635c2c90bed2876beb748110'/>
<id>3fa2cf6b1a6a4509635c2c90bed2876beb748110</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>[NFC] replace GetPatFromTreePatternNode with llvm::to_string</title>
<updated>2025-01-21T13:34:15+00:00</updated>
<author>
<name>Tomas Matheson</name>
<email>tomas.matheson@arm.com</email>
</author>
<published>2024-02-09T15:11:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=6d10a23346c06334c2ef4e1dbab81d017cf5d445'/>
<id>6d10a23346c06334c2ef4e1dbab81d017cf5d445</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>[mlir][spirv] Add GpuToLLVM cconv suited to Vulkan, migrate last tests (#123384)</title>
<updated>2025-01-21T12:27:45+00:00</updated>
<author>
<name>Andrea Faulds</name>
<email>andrea.faulds@amd.com</email>
</author>
<published>2025-01-21T12:27:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=733be4ed7dcf976719f424c0cb81b77a14f91f5a'/>
<id>733be4ed7dcf976719f424c0cb81b77a14f91f5a</id>
<content type='text'>
This commit is a follow-up to 99a562b3cb17e89273ba0fe77129f2fb17a19381,
which migrated some of the mlir-vulkan-runner tests to mlir-cpu-runner
using a new pipeline and set of wrappers. That commit could not migrate
all the tests, because the existing calling conventions/ABIs for kernel
arguments generated by GPUToLLVMConversionPass were not a good fit for
the Vulkan runtime. This commit fixes this and migrates the remaining
tests. With this commit, mlir-vulkan-runner and many related components
are now unused, and they will be removed in a later commit (see #73457).

The old calling conventions require both the caller (host LLVM code) and
callee (device code) to have compile-time knowledge of the precise
argument types. This works for CUDA, ROCm and SYCL, where there is a
C-like calling convention agreed between the host and device code, and
the runtime passes through arguments as raw data without comprehension.
For Vulkan, however, the interface declared by the shader/kernel is in a
more abstract form, so the device code has indirect access to the
argument data, and the runtime must process the arguments to set up and
bind appropriately-sized buffer descriptors.

This commit introduces a new calling convention option to meet the
Vulkan runtime's needs. It lowers memref arguments to {void*, size_t}
pairs, which can be trivially interpreted by the runtime without it
needing to know the original argument types. Unlike the stopgap measure
in the previous commit, this system can support memrefs of various ranks
and element types, which unblocked migrating the remaining tests.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This commit is a follow-up to 99a562b3cb17e89273ba0fe77129f2fb17a19381,
which migrated some of the mlir-vulkan-runner tests to mlir-cpu-runner
using a new pipeline and set of wrappers. That commit could not migrate
all the tests, because the existing calling conventions/ABIs for kernel
arguments generated by GPUToLLVMConversionPass were not a good fit for
the Vulkan runtime. This commit fixes this and migrates the remaining
tests. With this commit, mlir-vulkan-runner and many related components
are now unused, and they will be removed in a later commit (see #73457).

The old calling conventions require both the caller (host LLVM code) and
callee (device code) to have compile-time knowledge of the precise
argument types. This works for CUDA, ROCm and SYCL, where there is a
C-like calling convention agreed between the host and device code, and
the runtime passes through arguments as raw data without comprehension.
For Vulkan, however, the interface declared by the shader/kernel is in a
more abstract form, so the device code has indirect access to the
argument data, and the runtime must process the arguments to set up and
bind appropriately-sized buffer descriptors.

This commit introduces a new calling convention option to meet the
Vulkan runtime's needs. It lowers memref arguments to {void*, size_t}
pairs, which can be trivially interpreted by the runtime without it
needing to know the original argument types. Unlike the stopgap measure
in the previous commit, this system can support memrefs of various ranks
and element types, which unblocked migrating the remaining tests.</pre>
</div>
</content>
</entry>
<entry>
<title>[X86][AVX10.2-MINMAX][NFC] Remove NE[P] from intrinsic and instruction (#123272)</title>
<updated>2025-01-21T11:55:09+00:00</updated>
<author>
<name>Phoebe Wang</name>
<email>phoebe.wang@intel.com</email>
</author>
<published>2025-01-21T11:55:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=13c6abfac84fca4bc55c0721d1853ce86a385678'/>
<id>13c6abfac84fca4bc55c0721d1853ce86a385678</id>
<content type='text'>
Ref.: https://cdrdv2.intel.com/v1/dl/getContent/828965</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Ref.: https://cdrdv2.intel.com/v1/dl/getContent/828965</pre>
</div>
</content>
</entry>
<entry>
<title>[AArch64] Generate zeroing forms of certain SVE2.2 instructions (5/11) (#116831)</title>
<updated>2025-01-21T11:43:05+00:00</updated>
<author>
<name>Momchil Velikov</name>
<email>momchil.velikov@arm.com</email>
</author>
<published>2025-01-21T11:43:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=c7de642ece5745b5ade04e910ba4ff54728a1cd1'/>
<id>c7de642ece5745b5ade04e910ba4ff54728a1cd1</id>
<content type='text'>
SVE2.2 introduces instructions with predicated forms with zeroing of
the inactive lanes. This allows in some cases to save a `movprfx` or
a `mov` instruction when emitting code for `_x` or `_z` variants of
intrinsics.

This patch adds support for emitting the zeroing forms of certain
`SCVTF`, and `UCVTF` instructions.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
SVE2.2 introduces instructions with predicated forms with zeroing of
the inactive lanes. This allows in some cases to save a `movprfx` or
a `mov` instruction when emitting code for `_x` or `_z` variants of
intrinsics.

This patch adds support for emitting the zeroing forms of certain
`SCVTF`, and `UCVTF` instructions.</pre>
</div>
</content>
</entry>
</feed>
