<html>
<head>
<base href="http://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 --- - The register allocator allocates unnecessarily many registers"
href="http://llvm.org/bugs/show_bug.cgi?id=18604">18604</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>The register allocator allocates unnecessarily many registers
</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>Linux
</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: X86
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>jn@sirrida.de
</td>
</tr>
<tr>
<th>CC</th>
<td>llvmbugs@cs.uiuc.edu
</td>
</tr>
<tr>
<th>Classification</th>
<td>Unclassified
</td>
</tr></table>
<p>
<div>
<pre>The register allocator allocates unnecessarily many registers.
Trying to minimize the number of involved registers allows for
more freely usable registers in the callers, assuming inlining is too costly.
int test(int x) {
int y;
x ^= (x >> 2);
x = (x >> 3) ^ x;
x = x ^ (x >> 4);
y = x; x >>= 5; x ^= y; // almost the same but explicit
return x;
}
=>
movl %edi, %eax
sarl $2, %eax
xorl %edi, %eax
movl %eax, %ecx // %ecx => %edi
sarl $3, %ecx
xorl %eax, %ecx
movl %ecx, %edx // %ecx => %edi; %edx => %eax
sarl $4, %edx
xorl %ecx, %edx
movl %edx, %eax // %eax => %edi; %edx => %eax
sarl $5, %eax
xorl %edx, %eax // reverse operands
retq</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>