<html>
<head>
<base href="https://llvm.org/bugs/" />
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW --- - [AArch64][PeepholeOptimizer] Look through PHIs to find additional register sources"
href="https://llvm.org/bugs/show_bug.cgi?id=24505">24505</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>[AArch64][PeepholeOptimizer] Look through PHIs to find additional register sources
</td>
</tr>
<tr>
<th>Product</th>
<td>libraries
</td>
</tr>
<tr>
<th>Version</th>
<td>trunk
</td>
</tr>
<tr>
<th>Hardware</th>
<td>PC
</td>
</tr>
<tr>
<th>OS</th>
<td>Windows NT
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>normal
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>Backend: AArch64
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>mcrosier@codeaurora.org
</td>
</tr>
<tr>
<th>CC</th>
<td>bmakam@codeaurora.org, bruno.cardoso@gmail.com, gberry@codeaurora.org, junbuml@codeaurora.org, llvm-bugs@lists.llvm.org, mssimpso@codeaurora.org
</td>
</tr>
<tr>
<th>Classification</th>
<td>Unclassified
</td>
</tr></table>
<p>
<div>
<pre>Bruno recently committed a change to improve the peephole optimizer. He was
specifically targeting x86, but this can be easily extended to other
architectures by marking target-specific instructions in the form "one source +
one destination bitcast" with "isBitcast."
The specific commit is r245442
<a href="http://llvm.org/viewvc/llvm-project?view=revision&revision=245442">http://llvm.org/viewvc/llvm-project?view=revision&revision=245442</a>
[PeepholeOptimizer] Look through PHIs to find additional register sources
Reapply r243486.
- Teaches the ValueTracker in the PeepholeOptimizer to look through PHI
instructions.
- Add findNextSourceAndRewritePHI method to lookup into multiple sources
returnted by the ValueTracker and rewrite PHIs with new sources.
With these changes we can find more register sources and rewrite more
copies to allow coaslescing of bitcast instructions. Hence, we eliminate
unnecessary VR64 <-> GR64 copies in x86, but it could be extended to
other archs by marking "isBitcast" on target specific instructions. The
x86 example follows:
A:
psllq %mm1, %mm0
movd %mm0, %r9
jmp C
B:
por %mm1, %mm0
movd %mm0, %r9
jmp C
C:
movd %r9, %mm0
pshufw $238, %mm0, %mm0
Becomes:
A:
psllq %mm1, %mm0
jmp C
B:
por %mm1, %mm0
jmp C
C:
pshufw $238, %mm0, %mm0
Differential Revision: <a href="http://reviews.llvm.org/D11197">http://reviews.llvm.org/D11197</a>
rdar://problem/20404526
Bruno did later revert the commit in r245446. Regardless, once the final patch
lands we should consider investigating.</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>