<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 17, 2017 at 2:18 PM, Matt Turner <span dir="ltr"><<a href="mailto:mattst88@gmail.com" target="_blank">mattst88@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 10/12, Jason Ekstrand wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
For some reason, the any/all predicates don't work properly with SIMD32.<br>
In particular, it appears that a SEL with a QtrCtrl of 2H doesn't read<br>
the correct subset of the flag register and you end up getting garbage<br>
in the second half.  Work around this by using a pair of 1-wide MOVs and<br>
scattering the result.  This fixes the any/all instructions for SIMD32.<br>
</blockquote>
<br></span>
Huh. I can see a lot of potential for hardware misbehavior here...<br>
<br>
Making things 1-wide makes a lot of sense, regardless of the bug you're<br>
seeing. I'm in favor of that change.<br>
<br>
I picked a SEL instead of a predicated MOV instruction since the latter<br>
is considered by our optimizer to be a partial write, and as such isn't<br>
subject to CSE, etc. The difference is probably trivial, but I'd rather<br>
just commit a patch to change things to be 1-wide, not s/SEL/MOV/, and<br>
drop the added comments from the code.<br>
</blockquote></div></div><div class="gmail_extra"><br></div><div class="gmail_extra">I'm pretty sure a 1-wide SEL is also going to be considered a partial write.<br></div></div>