<feed xmlns='http://www.w3.org/2005/Atom'>
<title>llvm-project.git/llvm/lib/CodeGen/MachinePipeliner.cpp, branch users/fmayer/spr/compiler-rt-ubsan-leave-bufferedstacktrace-uninit</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>[MachinePipeliner] Fix instruction order with physical register (#99264)</title>
<updated>2024-08-06T04:46:10+00:00</updated>
<author>
<name>Ryotaro KASUGA</name>
<email>kasuga.ryotaro@fujitsu.com</email>
</author>
<published>2024-08-06T04:46:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=1745c8e08dde9f32d0f0b701d3a6a271697458eb'/>
<id>1745c8e08dde9f32d0f0b701d3a6a271697458eb</id>
<content type='text'>
dependencies in same cycle

Dependency checks were insufficient when reordering instructions with
physical register dependencies (i.e. Anti/Output dependencies). This
could result in generating incorrect code.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
dependencies in same cycle

Dependency checks were insufficient when reordering instructions with
physical register dependencies (i.e. Anti/Output dependencies). This
could result in generating incorrect code.</pre>
</div>
</content>
</entry>
<entry>
<title>[llvm][CodeGen] Added a new restriction for II by pragma in window scheduler (#99448)</title>
<updated>2024-07-24T04:11:58+00:00</updated>
<author>
<name>Kai Yan</name>
<email>aklkaiyan@tencent.com</email>
</author>
<published>2024-07-24T04:11:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=cd1a2ede2f6a741adf34fc5b57eb73aa149b515c'/>
<id>cd1a2ede2f6a741adf34fc5b57eb73aa149b515c</id>
<content type='text'>
Added a new restriction for window scheduling.
Window scheduling is disabled when llvm.loop.pipeline.initiationinterval
is set.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Added a new restriction for window scheduling.
Window scheduling is disabled when llvm.loop.pipeline.initiationinterval
is set.</pre>
</div>
</content>
</entry>
<entry>
<title>[CodeGen] Use range-based for loops (NFC) (#98706)</title>
<updated>2024-07-13T20:29:47+00:00</updated>
<author>
<name>Kazu Hirata</name>
<email>kazu@google.com</email>
</author>
<published>2024-07-13T20:29:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=66cd2e0f9a7ae3a966451d1868769947c72164d8'/>
<id>66cd2e0f9a7ae3a966451d1868769947c72164d8</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>[CodeGen][NewPM] Port `LiveIntervals` to new pass manager (#98118)</title>
<updated>2024-07-10T11:34:48+00:00</updated>
<author>
<name>paperchalice</name>
<email>liujunchang97@outlook.com</email>
</author>
<published>2024-07-10T11:34:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=abde52aa667118d18e9551ab87a15b95c267b3b6'/>
<id>abde52aa667118d18e9551ab87a15b95c267b3b6</id>
<content type='text'>
- Add `LiveIntervalsAnalysis`.
- Add `LiveIntervalsPrinterPass`.
- Use `LiveIntervalsWrapperPass` in legacy pass manager.
- Use `std::unique_ptr` instead of raw pointer for `LICalc`, so
destructor and default move constructor can handle it correctly.

This would be the last analysis required by `PHIElimination`.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- Add `LiveIntervalsAnalysis`.
- Add `LiveIntervalsPrinterPass`.
- Use `LiveIntervalsWrapperPass` in legacy pass manager.
- Use `std::unique_ptr` instead of raw pointer for `LICalc`, so
destructor and default move constructor can handle it correctly.

This would be the last analysis required by `PHIElimination`.</pre>
</div>
</content>
</entry>
<entry>
<title>[CodeGen][NewPM] Port `machine-loops` to new pass manager (#97793)</title>
<updated>2024-07-09T01:11:18+00:00</updated>
<author>
<name>paperchalice</name>
<email>liujunchang97@outlook.com</email>
</author>
<published>2024-07-09T01:11:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=79d0de2ac37b6b7d66720611935d1dd7fc4fbd43'/>
<id>79d0de2ac37b6b7d66720611935d1dd7fc4fbd43</id>
<content type='text'>
- Add `MachineLoopAnalysis`.
- Add `MachineLoopPrinterPass`.
- Convert to `MachineLoopInfoWrapperPass` in legacy pass manager.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- Add `MachineLoopAnalysis`.
- Add `MachineLoopPrinterPass`.
- Convert to `MachineLoopInfoWrapperPass` in legacy pass manager.</pre>
</div>
</content>
</entry>
<entry>
<title>Reapply "[MachinePipeliner] Fix constraints aren't considered in cert… (#97259)</title>
<updated>2024-07-03T00:15:41+00:00</updated>
<author>
<name>Ryotaro KASUGA</name>
<email>kasuga.ryotaro@fujitsu.com</email>
</author>
<published>2024-07-03T00:15:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=0a369b06e34495966c6c9db427ea52f77a82a0bf'/>
<id>0a369b06e34495966c6c9db427ea52f77a82a0bf</id>
<content type='text'>
…ain cases" (#97246)

This reverts commit e6a961dbef773b16bda2cebc4bf9f3d1e0da42fc.

There is no difference from the original change. I re-ran the failed
test and it passed. So the failure wasn't caused by this change.
test result: https://lab.llvm.org/buildbot/#/builders/176/builds/585</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
…ain cases" (#97246)

This reverts commit e6a961dbef773b16bda2cebc4bf9f3d1e0da42fc.

There is no difference from the original change. I re-ran the failed
test and it passed. So the failure wasn't caused by this change.
test result: https://lab.llvm.org/buildbot/#/builders/176/builds/585</pre>
</div>
</content>
</entry>
<entry>
<title>Revert "[MachinePipeliner] Fix constraints aren't considered in certain cases" (#97246)</title>
<updated>2024-07-01T01:32:58+00:00</updated>
<author>
<name>Ryotaro KASUGA</name>
<email>kasuga.ryotaro@fujitsu.com</email>
</author>
<published>2024-07-01T01:32:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=e6a961dbef773b16bda2cebc4bf9f3d1e0da42fc'/>
<id>e6a961dbef773b16bda2cebc4bf9f3d1e0da42fc</id>
<content type='text'>
Reverts llvm/llvm-project#95356

Due to ppc64le test failures caught by the LLVM Buildbot.
https://lab.llvm.org/buildbot/#/builders/176/builds/576</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Reverts llvm/llvm-project#95356

Due to ppc64le test failures caught by the LLVM Buildbot.
https://lab.llvm.org/buildbot/#/builders/176/builds/576</pre>
</div>
</content>
</entry>
<entry>
<title>[MachinePipeliner] Fix constraints aren't considered in certain cases (#95356)</title>
<updated>2024-07-01T00:07:32+00:00</updated>
<author>
<name>Ryotaro KASUGA</name>
<email>kasuga.ryotaro@fujitsu.com</email>
</author>
<published>2024-07-01T00:07:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=e19ac0dcfd7357161210f157ed0559836e88155f'/>
<id>e19ac0dcfd7357161210f157ed0559836e88155f</id>
<content type='text'>
when scheduling

When scheduling an instruction, if both any predecessors and any
successors of the instruction are already scheduled, `SchedStart` isn't
taken into account. It may result generating incorrect code. This patch
fixes the problem. Also, this patch merges `SchedStart` into
`EarlyStart` (same for `SchedEnd`).

Fixes https://github.com/llvm/llvm-project/issues/93936</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
when scheduling

When scheduling an instruction, if both any predecessors and any
successors of the instruction are already scheduled, `SchedStart` isn't
taken into account. It may result generating incorrect code. This patch
fixes the problem. Also, this patch merges `SchedStart` into
`EarlyStart` (same for `SchedEnd`).

Fixes https://github.com/llvm/llvm-project/issues/93936</pre>
</div>
</content>
</entry>
<entry>
<title>[llvm][CodeGen] Add a new software pipeliner 'Window Scheduler' (#84443)</title>
<updated>2024-06-13T09:51:09+00:00</updated>
<author>
<name>Hua Tian</name>
<email>akiratian@tencent.com</email>
</author>
<published>2024-06-13T09:51:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=b6bf4024a031a5e7b58aff1425d94841a88002d6'/>
<id>b6bf4024a031a5e7b58aff1425d94841a88002d6</id>
<content type='text'>
This commit implements the Window Scheduler as described in the RFC:

https://discourse.llvm.org/t/rfc-window-scheduling-algorithm-for-machinepipeliner-in-llvm/74718

This Window Scheduler implements the window algorithm designed by
Steven Muchnick in the book "Advanced Compiler Design And
Implementation",
with some improvements:

1. Copy 3 times of the loop kernel and construct the corresponding DAG
   to identify dependencies between MIs;
2. Use heuristic algorithm to obtain a set of window offsets.

The window algorithm is equivalent to modulo scheduling algorithm with a
stage of 2. It is mainly applied in targets where hardware resource
conflicts are severe, and the SMS algorithm often fails in such cases.
On our own DSA, this window algorithm typically can achieve a
performance
improvement of over 10%.

Co-authored-by: Kai Yan &lt;aklkaiyan@tencent.com&gt;
Co-authored-by: Ran Xiao &lt;lennyxiao@tencent.com&gt;

---------

Co-authored-by: Kai Yan &lt;aklkaiyan@tencent.com&gt;
Co-authored-by: Ran Xiao &lt;lennyxiao@tencent.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This commit implements the Window Scheduler as described in the RFC:

https://discourse.llvm.org/t/rfc-window-scheduling-algorithm-for-machinepipeliner-in-llvm/74718

This Window Scheduler implements the window algorithm designed by
Steven Muchnick in the book "Advanced Compiler Design And
Implementation",
with some improvements:

1. Copy 3 times of the loop kernel and construct the corresponding DAG
   to identify dependencies between MIs;
2. Use heuristic algorithm to obtain a set of window offsets.

The window algorithm is equivalent to modulo scheduling algorithm with a
stage of 2. It is mainly applied in targets where hardware resource
conflicts are severe, and the SMS algorithm often fails in such cases.
On our own DSA, this window algorithm typically can achieve a
performance
improvement of over 10%.

Co-authored-by: Kai Yan &lt;aklkaiyan@tencent.com&gt;
Co-authored-by: Ran Xiao &lt;lennyxiao@tencent.com&gt;

---------

Co-authored-by: Kai Yan &lt;aklkaiyan@tencent.com&gt;
Co-authored-by: Ran Xiao &lt;lennyxiao@tencent.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>[ModuloSchedule][AArch64] Implement modulo variable expansion for pipelining (#65609)</title>
<updated>2024-06-12T01:27:35+00:00</updated>
<author>
<name>Yuta Mukai</name>
<email>mukai.yuta@fujitsu.com</email>
</author>
<published>2024-06-12T01:27:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=0c5319e546321d7a766999e49e0ccf801ff2b3dc'/>
<id>0c5319e546321d7a766999e49e0ccf801ff2b3dc</id>
<content type='text'>
Modulo variable expansion is a technique that resolves overlap of
variable lifetimes by unrolling. The existing implementation solves it
by making a copy by move instruction for processors with ordinary
registers such as Arm and x86. This method may result in a very large
number of move instructions, which can cause performance problems.

Modulo variable expansion is enabled by specifying -pipeliner-mve-cg. A
backend must implement some newly defined interfaces in
PipelinerLoopInfo. They were implemented for AArch64.

Discourse thread:
https://discourse.llvm.org/t/implementing-modulo-variable-expansion-for-machinepipeliner</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Modulo variable expansion is a technique that resolves overlap of
variable lifetimes by unrolling. The existing implementation solves it
by making a copy by move instruction for processors with ordinary
registers such as Arm and x86. This method may result in a very large
number of move instructions, which can cause performance problems.

Modulo variable expansion is enabled by specifying -pipeliner-mve-cg. A
backend must implement some newly defined interfaces in
PipelinerLoopInfo. They were implemented for AArch64.

Discourse thread:
https://discourse.llvm.org/t/implementing-modulo-variable-expansion-for-machinepipeliner</pre>
</div>
</content>
</entry>
</feed>
