Revert "i965/fs: Merge CMP and SEL into CSEL on Gen8+"
authorJason Ekstrand <jason@jlekstrand.net>
Fri, 1 Nov 2019 19:22:35 +0000 (14:22 -0500)
committerJason Ekstrand <jason@jlekstrand.net>
Wed, 20 Nov 2019 20:47:32 +0000 (20:47 +0000)
commit2fca325ea65f068043d4c18c9cd0fe7f25bde8f7
tree1b51cd4da061e2eaaeda6d23557068dc8351b6b4
parent8d7621a53f84b55d6f7fbcaab954df939dd47d50
Revert "i965/fs: Merge CMP and SEL into CSEL on Gen8+"

This reverts commit 52c7df1643ec9af119fd66f916f7fbdbcc798d2d.  The pass,
while clearly useful for some shaders, has at least three bugs that I
was able to find fairly quickly:

 1. It doesn't work for type-converting MOVs because f > 0 is not the
    same as f2i(f) > 0

 2. CSEL is a 3src instruction and only supports one source type; it
    doesn't take this into account and tries to create instructions
    which do a F compare and a D select.  This is especially nasty to
    debug because you don't see that in the dumped assembly because we
    don't properly assert that types are the same in codegen.

 3. While you can handle 2, in theory, by reinterpreting types, you
    can't do that in the presence of source modifiers.  This pass
    doesn't even attempt to detect that.

Those are just the ones I found with the one almost trival shader I was
debugging.  There very likely may be more and.  Best thing to do for now
is just shut it off until someone has the time to figure out how to do
this properly and write tests to ensure it's correct.

Fixes: 3cb085e6d61a "i965/fs: Merge CMP and SEL into CSEL on Gen8+"
Reviewed-by: Brian Paul <brianp@vmware.com>
src/intel/compiler/brw_fs.cpp
src/intel/compiler/brw_fs.h