<feed xmlns='http://www.w3.org/2005/Atom'>
<title>llvm-project.git/llvm/lib/Target/SystemZ/SystemZPatterns.td, branch users/nico/python-2</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>[SystemZ] Don't lower ATOMIC_LOAD/STORE to LOAD/STORE (#75879)</title>
<updated>2024-03-18T21:21:50+00:00</updated>
<author>
<name>Jonas Paulsson</name>
<email>paulson1@linux.ibm.com</email>
</author>
<published>2024-03-18T21:21:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=8b8e1adbdecd5f37ebcaa8d4fdf333962f7a0eb7'/>
<id>8b8e1adbdecd5f37ebcaa8d4fdf333962f7a0eb7</id>
<content type='text'>
- Instead of lowering float/double ISD::ATOMIC_LOAD / ISD::ATOMIC_STORE
nodes to regular LOAD/STORE nodes, make them legal and select those nodes
properly instead. This avoids exposing them to the DAGCombiner.

- AtomicExpand pass no longer casts float/double atomic load/stores to integer
  (FP128 is still casted).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- Instead of lowering float/double ISD::ATOMIC_LOAD / ISD::ATOMIC_STORE
nodes to regular LOAD/STORE nodes, make them legal and select those nodes
properly instead. This avoids exposing them to the DAGCombiner.

- AtomicExpand pass no longer casts float/double atomic load/stores to integer
  (FP128 is still casted).
</pre>
</div>
</content>
</entry>
<entry>
<title>[SystemZ] Don't use FP Load and Test as comparisons to same reg (#78074)</title>
<updated>2024-01-15T18:36:40+00:00</updated>
<author>
<name>Jonas Paulsson</name>
<email>paulson1@linux.ibm.com</email>
</author>
<published>2024-01-15T18:36:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=1d1893097a6319a6402331a54a588b1a5d961808'/>
<id>1d1893097a6319a6402331a54a588b1a5d961808</id>
<content type='text'>
The usage of FP Load and Test instructions as a comparison against zero
with the assumption that the dest reg will always reflect the source reg is
actually incorrect: Unfortunately, a SNaN will be converted to a QNaN, so the
instruction may actually change the value as opposed to being a pure register
move with a test.

This patch
- changes instruction selection to always emit FP LT with a scratch def
  reg, which will typically be allocated to the same reg if dead.
- Removes the conversions into FP LT in SystemZElimcompare.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The usage of FP Load and Test instructions as a comparison against zero
with the assumption that the dest reg will always reflect the source reg is
actually incorrect: Unfortunately, a SNaN will be converted to a QNaN, so the
instruction may actually change the value as opposed to being a pure register
move with a test.

This patch
- changes instruction selection to always emit FP LT with a scratch def
  reg, which will typically be allocated to the same reg if dead.
- Removes the conversions into FP LT in SystemZElimcompare.
</pre>
</div>
</content>
</entry>
<entry>
<title>[TableGen] Drop deprecated leading # operation (NOP) and replace ## with #</title>
<updated>2020-04-25T23:26:45+00:00</updated>
<author>
<name>Fangrui Song</name>
<email>maskray@google.com</email>
</author>
<published>2020-04-25T22:58:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=2cb48d620ff3e56f4a4179186055a802c34a4bfd'/>
<id>2cb48d620ff3e56f4a4179186055a802c34a4bfd</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>[llvm] NFC: Fix trivial typo in rst and td files</title>
<updated>2020-04-23T05:26:32+00:00</updated>
<author>
<name>Kazuaki Ishizaki</name>
<email>ishizaki@jp.ibm.com</email>
</author>
<published>2020-04-23T05:26:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=0312b9f55077021141808e6d3e5ccc6f4f7b6ae6'/>
<id>0312b9f55077021141808e6d3e5ccc6f4f7b6ae6</id>
<content type='text'>
Differential Revision: https://reviews.llvm.org/D77469
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Differential Revision: https://reviews.llvm.org/D77469
</pre>
</div>
</content>
</entry>
<entry>
<title>[FPEnv] Constrained FCmp intrinsics</title>
<updated>2019-12-07T10:28:39+00:00</updated>
<author>
<name>Ulrich Weigand</name>
<email>ulrich.weigand@de.ibm.com</email>
</author>
<published>2019-12-06T10:30:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=9db13b5a7d43096a9ab5f7cef6e1b7e2dc9c9c63'/>
<id>9db13b5a7d43096a9ab5f7cef6e1b7e2dc9c9c63</id>
<content type='text'>
This adds support for constrained floating-point comparison intrinsics.

Specifically, we add:

      declare &lt;ty2&gt;
      @llvm.experimental.constrained.fcmp(&lt;type&gt; &lt;op1&gt;, &lt;type&gt; &lt;op2&gt;,
                                          metadata &lt;condition code&gt;,
                                          metadata &lt;exception behavior&gt;)
      declare &lt;ty2&gt;
      @llvm.experimental.constrained.fcmps(&lt;type&gt; &lt;op1&gt;, &lt;type&gt; &lt;op2&gt;,
                                           metadata &lt;condition code&gt;,
                                           metadata &lt;exception behavior&gt;)

The first variant implements an IEEE "quiet" comparison (i.e. we only
get an invalid FP exception if either argument is a SNaN), while the
second variant implements an IEEE "signaling" comparison (i.e. we get
an invalid FP exception if either argument is any NaN).

The condition code is implemented as a metadata string.  The same set
of predicates as for the fcmp instruction is supported (except for the
"true" and "false" predicates).

These new intrinsics are mapped by SelectionDAG codegen onto two new
ISD opcodes, ISD::STRICT_FSETCC and ISD::STRICT_FSETCCS, again
representing quiet vs. signaling comparison operations.  Otherwise
those nodes look like SETCC nodes, with an additional chain argument
and result as usual for strict FP nodes.  The patch includes support
for the common legalization operations for those nodes.

The patch also includes full SystemZ back-end support for the new
ISD nodes, mapping them to all available SystemZ instruction to
fully implement strict semantics (scalar and vector).

Differential Revision: https://reviews.llvm.org/D69281
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This adds support for constrained floating-point comparison intrinsics.

Specifically, we add:

      declare &lt;ty2&gt;
      @llvm.experimental.constrained.fcmp(&lt;type&gt; &lt;op1&gt;, &lt;type&gt; &lt;op2&gt;,
                                          metadata &lt;condition code&gt;,
                                          metadata &lt;exception behavior&gt;)
      declare &lt;ty2&gt;
      @llvm.experimental.constrained.fcmps(&lt;type&gt; &lt;op1&gt;, &lt;type&gt; &lt;op2&gt;,
                                           metadata &lt;condition code&gt;,
                                           metadata &lt;exception behavior&gt;)

The first variant implements an IEEE "quiet" comparison (i.e. we only
get an invalid FP exception if either argument is a SNaN), while the
second variant implements an IEEE "signaling" comparison (i.e. we get
an invalid FP exception if either argument is any NaN).

The condition code is implemented as a metadata string.  The same set
of predicates as for the fcmp instruction is supported (except for the
"true" and "false" predicates).

These new intrinsics are mapped by SelectionDAG codegen onto two new
ISD opcodes, ISD::STRICT_FSETCC and ISD::STRICT_FSETCCS, again
representing quiet vs. signaling comparison operations.  Otherwise
those nodes look like SETCC nodes, with an additional chain argument
and result as usual for strict FP nodes.  The patch includes support
for the common legalization operations for those nodes.

The patch also includes full SystemZ back-end support for the new
ISD nodes, mapping them to all available SystemZ instruction to
fully implement strict semantics (scalar and vector).

Differential Revision: https://reviews.llvm.org/D69281
</pre>
</div>
</content>
</entry>
<entry>
<title>Reapply r372285 "GlobalISel: Don't materialize immarg arguments to intrinsics"</title>
<updated>2019-09-19T16:26:14+00:00</updated>
<author>
<name>Matt Arsenault</name>
<email>Matthew.Arsenault@amd.com</email>
</author>
<published>2019-09-19T16:26:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=3ecab8e4555aee0b4aa10c413696a67f55948c39'/>
<id>3ecab8e4555aee0b4aa10c413696a67f55948c39</id>
<content type='text'>
This reverts r372314, reapplying r372285 and the commits which depend
on it (r372286-r372293, and r372296-r372297)

This was missing one switch to getTargetConstant in an untested case.

llvm-svn: 372338
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This reverts r372314, reapplying r372285 and the commits which depend
on it (r372286-r372293, and r372296-r372297)

This was missing one switch to getTargetConstant in an untested case.

llvm-svn: 372338
</pre>
</div>
</content>
</entry>
<entry>
<title>Revert r372285 "GlobalISel: Don't materialize immarg arguments to intrinsics"</title>
<updated>2019-09-19T12:33:07+00:00</updated>
<author>
<name>Hans Wennborg</name>
<email>hans@hanshq.net</email>
</author>
<published>2019-09-19T12:33:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=13bdae8541c3fc5acf6ee7de78ec5ab8446848e4'/>
<id>13bdae8541c3fc5acf6ee7de78ec5ab8446848e4</id>
<content type='text'>
This broke the Chromium build, causing it to fail with e.g.

  fatal error: error in backend: Cannot select: t362: v4i32 = X86ISD::VSHLI t392, Constant:i8&lt;15&gt;

See llvm-commits thread of r372285 for details.

This also reverts r372286, r372287, r372288, r372289, r372290, r372291,
r372292, r372293, r372296, and r372297, which seemed to depend on the
main commit.

&gt; Encode them directly as an imm argument to G_INTRINSIC*.
&gt;
&gt; Since now intrinsics can now define what parameters are required to be
&gt; immediates, avoid using registers for them. Intrinsics could
&gt; potentially want a constant that isn't a legal register type. Also,
&gt; since G_CONSTANT is subject to CSE and legalization, transforms could
&gt; potentially obscure the value (and create extra work for the
&gt; selector). The register bank of a G_CONSTANT is also meaningful, so
&gt; this could throw off future folding and legalization logic for AMDGPU.
&gt;
&gt; This will be much more convenient to work with than needing to call
&gt; getConstantVRegVal and checking if it may have failed for every
&gt; constant intrinsic parameter. AMDGPU has quite a lot of intrinsics wth
&gt; immarg operands, many of which need inspection during lowering. Having
&gt; to find the value in a register is going to add a lot of boilerplate
&gt; and waste compile time.
&gt;
&gt; SelectionDAG has always provided TargetConstant for constants which
&gt; should not be legalized or materialized in a register. The distinction
&gt; between Constant and TargetConstant was somewhat fuzzy, and there was
&gt; no automatic way to force usage of TargetConstant for certain
&gt; intrinsic parameters. They were both ultimately ConstantSDNode, and it
&gt; was inconsistently used. It was quite easy to mis-select an
&gt; instruction requiring an immediate. For SelectionDAG, start emitting
&gt; TargetConstant for these arguments, and using timm to match them.
&gt;
&gt; Most of the work here is to cleanup target handling of constants. Some
&gt; targets process intrinsics through intermediate custom nodes, which
&gt; need to preserve TargetConstant usage to match the intrinsic
&gt; expectation. Pattern inputs now need to distinguish whether a constant
&gt; is merely compatible with an operand or whether it is mandatory.
&gt;
&gt; The GlobalISelEmitter needs to treat timm as a special case of a leaf
&gt; node, simlar to MachineBasicBlock operands. This should also enable
&gt; handling of patterns for some G_* instructions with immediates, like
&gt; G_FENCE or G_EXTRACT.
&gt;
&gt; This does include a workaround for a crash in GlobalISelEmitter when
&gt; ARM tries to uses "imm" in an output with a "timm" pattern source.

llvm-svn: 372314
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This broke the Chromium build, causing it to fail with e.g.

  fatal error: error in backend: Cannot select: t362: v4i32 = X86ISD::VSHLI t392, Constant:i8&lt;15&gt;

See llvm-commits thread of r372285 for details.

This also reverts r372286, r372287, r372288, r372289, r372290, r372291,
r372292, r372293, r372296, and r372297, which seemed to depend on the
main commit.

&gt; Encode them directly as an imm argument to G_INTRINSIC*.
&gt;
&gt; Since now intrinsics can now define what parameters are required to be
&gt; immediates, avoid using registers for them. Intrinsics could
&gt; potentially want a constant that isn't a legal register type. Also,
&gt; since G_CONSTANT is subject to CSE and legalization, transforms could
&gt; potentially obscure the value (and create extra work for the
&gt; selector). The register bank of a G_CONSTANT is also meaningful, so
&gt; this could throw off future folding and legalization logic for AMDGPU.
&gt;
&gt; This will be much more convenient to work with than needing to call
&gt; getConstantVRegVal and checking if it may have failed for every
&gt; constant intrinsic parameter. AMDGPU has quite a lot of intrinsics wth
&gt; immarg operands, many of which need inspection during lowering. Having
&gt; to find the value in a register is going to add a lot of boilerplate
&gt; and waste compile time.
&gt;
&gt; SelectionDAG has always provided TargetConstant for constants which
&gt; should not be legalized or materialized in a register. The distinction
&gt; between Constant and TargetConstant was somewhat fuzzy, and there was
&gt; no automatic way to force usage of TargetConstant for certain
&gt; intrinsic parameters. They were both ultimately ConstantSDNode, and it
&gt; was inconsistently used. It was quite easy to mis-select an
&gt; instruction requiring an immediate. For SelectionDAG, start emitting
&gt; TargetConstant for these arguments, and using timm to match them.
&gt;
&gt; Most of the work here is to cleanup target handling of constants. Some
&gt; targets process intrinsics through intermediate custom nodes, which
&gt; need to preserve TargetConstant usage to match the intrinsic
&gt; expectation. Pattern inputs now need to distinguish whether a constant
&gt; is merely compatible with an operand or whether it is mandatory.
&gt;
&gt; The GlobalISelEmitter needs to treat timm as a special case of a leaf
&gt; node, simlar to MachineBasicBlock operands. This should also enable
&gt; handling of patterns for some G_* instructions with immediates, like
&gt; G_FENCE or G_EXTRACT.
&gt;
&gt; This does include a workaround for a crash in GlobalISelEmitter when
&gt; ARM tries to uses "imm" in an output with a "timm" pattern source.

llvm-svn: 372314
</pre>
</div>
</content>
</entry>
<entry>
<title>GlobalISel: Don't materialize immarg arguments to intrinsics</title>
<updated>2019-09-19T01:33:14+00:00</updated>
<author>
<name>Matt Arsenault</name>
<email>Matthew.Arsenault@amd.com</email>
</author>
<published>2019-09-19T01:33:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=d8399d12cd851dacd8f3e1be8b7ca79372626f38'/>
<id>d8399d12cd851dacd8f3e1be8b7ca79372626f38</id>
<content type='text'>
Encode them directly as an imm argument to G_INTRINSIC*.

Since now intrinsics can now define what parameters are required to be
immediates, avoid using registers for them. Intrinsics could
potentially want a constant that isn't a legal register type. Also,
since G_CONSTANT is subject to CSE and legalization, transforms could
potentially obscure the value (and create extra work for the
selector). The register bank of a G_CONSTANT is also meaningful, so
this could throw off future folding and legalization logic for AMDGPU.

This will be much more convenient to work with than needing to call
getConstantVRegVal and checking if it may have failed for every
constant intrinsic parameter. AMDGPU has quite a lot of intrinsics wth
immarg operands, many of which need inspection during lowering. Having
to find the value in a register is going to add a lot of boilerplate
and waste compile time.

SelectionDAG has always provided TargetConstant for constants which
should not be legalized or materialized in a register. The distinction
between Constant and TargetConstant was somewhat fuzzy, and there was
no automatic way to force usage of TargetConstant for certain
intrinsic parameters. They were both ultimately ConstantSDNode, and it
was inconsistently used. It was quite easy to mis-select an
instruction requiring an immediate. For SelectionDAG, start emitting
TargetConstant for these arguments, and using timm to match them.

Most of the work here is to cleanup target handling of constants. Some
targets process intrinsics through intermediate custom nodes, which
need to preserve TargetConstant usage to match the intrinsic
expectation. Pattern inputs now need to distinguish whether a constant
is merely compatible with an operand or whether it is mandatory.

The GlobalISelEmitter needs to treat timm as a special case of a leaf
node, simlar to MachineBasicBlock operands. This should also enable
handling of patterns for some G_* instructions with immediates, like
G_FENCE or G_EXTRACT.

This does include a workaround for a crash in GlobalISelEmitter when
ARM tries to uses "imm" in an output with a "timm" pattern source.

llvm-svn: 372285
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Encode them directly as an imm argument to G_INTRINSIC*.

Since now intrinsics can now define what parameters are required to be
immediates, avoid using registers for them. Intrinsics could
potentially want a constant that isn't a legal register type. Also,
since G_CONSTANT is subject to CSE and legalization, transforms could
potentially obscure the value (and create extra work for the
selector). The register bank of a G_CONSTANT is also meaningful, so
this could throw off future folding and legalization logic for AMDGPU.

This will be much more convenient to work with than needing to call
getConstantVRegVal and checking if it may have failed for every
constant intrinsic parameter. AMDGPU has quite a lot of intrinsics wth
immarg operands, many of which need inspection during lowering. Having
to find the value in a register is going to add a lot of boilerplate
and waste compile time.

SelectionDAG has always provided TargetConstant for constants which
should not be legalized or materialized in a register. The distinction
between Constant and TargetConstant was somewhat fuzzy, and there was
no automatic way to force usage of TargetConstant for certain
intrinsic parameters. They were both ultimately ConstantSDNode, and it
was inconsistently used. It was quite easy to mis-select an
instruction requiring an immediate. For SelectionDAG, start emitting
TargetConstant for these arguments, and using timm to match them.

Most of the work here is to cleanup target handling of constants. Some
targets process intrinsics through intermediate custom nodes, which
need to preserve TargetConstant usage to match the intrinsic
expectation. Pattern inputs now need to distinguish whether a constant
is merely compatible with an operand or whether it is mandatory.

The GlobalISelEmitter needs to treat timm as a special case of a leaf
node, simlar to MachineBasicBlock operands. This should also enable
handling of patterns for some G_* instructions with immediates, like
G_FENCE or G_EXTRACT.

This does include a workaround for a crash in GlobalISelEmitter when
ARM tries to uses "imm" in an output with a "timm" pattern source.

llvm-svn: 372285
</pre>
</div>
</content>
</entry>
<entry>
<title>Update the file headers across all of the LLVM projects in the monorepo</title>
<updated>2019-01-19T08:50:56+00:00</updated>
<author>
<name>Chandler Carruth</name>
<email>chandlerc@gmail.com</email>
</author>
<published>2019-01-19T08:50:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=2946cd701067404b99c39fb29dc9c74bd7193eb3'/>
<id>2946cd701067404b99c39fb29dc9c74bd7193eb3</id>
<content type='text'>
to reflect the new license.

We understand that people may be surprised that we're moving the header
entirely to discuss the new license. We checked this carefully with the
Foundation's lawyer and we believe this is the correct approach.

Essentially, all code in the project is now made available by the LLVM
project under our new license, so you will see that the license headers
include that license only. Some of our contributors have contributed
code under our old license, and accordingly, we have retained a copy of
our old license notice in the top-level files in each project and
repository.

llvm-svn: 351636
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
to reflect the new license.

We understand that people may be surprised that we're moving the header
entirely to discuss the new license. We checked this carefully with the
Foundation's lawyer and we believe this is the correct approach.

Essentially, all code in the project is now made available by the LLVM
project under our new license, so you will see that the license headers
include that license only. Some of our contributors have contributed
code under our old license, and accordingly, we have retained a copy of
our old license notice in the top-level files in each project and
repository.

llvm-svn: 351636
</pre>
</div>
</content>
</entry>
<entry>
<title>[SystemZ] Add support for IBM z14 processor (1/3)</title>
<updated>2017-07-17T17:41:11+00:00</updated>
<author>
<name>Ulrich Weigand</name>
<email>ulrich.weigand@de.ibm.com</email>
</author>
<published>2017-07-17T17:41:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=2b3482fe8576f8e5de0d296baae5dfb290b9948a'/>
<id>2b3482fe8576f8e5de0d296baae5dfb290b9948a</id>
<content type='text'>
This patch series adds support for the IBM z14 processor.  This part includes:
- Basic support for the new processor and its features.
- Support for new instructions (except vector 32-bit float and 128-bit float).
- CodeGen for new instructions, including new LLVM intrinsics.
- Scheduler description for the new processor.
- Detection of z14 as host processor.

Support for the new 32-bit vector float and 128-bit vector float
instructions is provided by separate patches.

llvm-svn: 308194
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch series adds support for the IBM z14 processor.  This part includes:
- Basic support for the new processor and its features.
- Support for new instructions (except vector 32-bit float and 128-bit float).
- CodeGen for new instructions, including new LLVM intrinsics.
- Scheduler description for the new processor.
- Detection of z14 as host processor.

Support for the new 32-bit vector float and 128-bit vector float
instructions is provided by separate patches.

llvm-svn: 308194
</pre>
</div>
</content>
</entry>
</feed>
