<html>
<head>
<base href="https://bugs.freedesktop.org/" />
</head>
<body>
<p>
<div>
<b><a class="bz_bug_link
bz_status_NEW "
title="NEW - Bad int(floatBitsToInt(vec4))"
href="https://bugs.freedesktop.org/show_bug.cgi?id=89508#c10">Comment # 10</a>
on <a class="bz_bug_link
bz_status_NEW "
title="NEW - Bad int(floatBitsToInt(vec4))"
href="https://bugs.freedesktop.org/show_bug.cgi?id=89508">bug 89508</a>
from <span class="vcard"><a class="email" href="mailto:itoral@igalia.com" title="Iago Toral <itoral@igalia.com>"> <span class="fn">Iago Toral</span></a>
</span></b>
<pre>Ok, I think I know what is happening. The problem is that in case that fails we
generate IR like this:
(assign (xyzw) (array_ref (var_ref temps) (constant int (1)) )
(expression vec4 +
(array_ref (var_ref temps) (constant int (1)) )
(array_ref (var_ref temps) (swiz x (expression ivec4 bitcast_f2i (swiz
xxxx (array_ref (var_ref temps) (constant int (2)) ) )) )) ) )
The second operand to '+' has a variable indexing into temps (so it will use a
reladdr access), but then the register holding the reladdr is also an access
into the same array (so it will also need a scratch load).
The code in move_grf_array_access_to_scratch() does not handle this scenario.
The reason why the other case passes is because it splits the bitcast and
assigns it to a temporary like this:
(declare (temporary ) int floatBitsToInt_retval)
(assign (x) (var_ref floatBitsToInt_retval)
(expression int bitcast_f2i (swiz x (array_ref (var_ref temps) (constant int
(2)) ) )) )
(assign (xyzw) (array_ref (var_ref temps) (constant int (1)) )
(expression vec4 +
(array_ref (var_ref temps) (constant int (1)) ) (array_ref (var_ref
temps)
(var_ref floatBitsToInt_retval) ) ) )
This way we resolve the reladdr to a temp variable (so the register holding the
reladdr value is no longer an array access that needs a scratch read), so we do
not hit the unsupported scenario.
I'll see if I can fix this.</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are the QA Contact for the bug.</li>
</ul>
</body>
</html>