intel/fs/gen11+: Handle ROR/ROL in lower_simd_width().
authorFrancisco Jerez <currojerez@riseup.net>
Mon, 25 Nov 2019 00:12:12 +0000 (16:12 -0800)
committerFrancisco Jerez <currojerez@riseup.net>
Fri, 10 Jan 2020 19:00:24 +0000 (11:00 -0800)
Prevents invalid code from being emitted for ROR/ROL instructions in
SIMD32 shaders.

The problem can be reproduced with the following tests while forcing
SIMD32 to be used for fragment shaders:

 piglit.shaders.glsl-rotate-left
 piglit.shaders.glsl-rotate-right

However the issue could occur in production already with compute
shaders and a workgroup size large enough to trigger SIMD32 dispatch.

Fixes: 83fdec0f0de "intel/compiler: Enable the emission of ROR/ROL instructions"
Cc: Sagar Ghuge <sagar.ghuge@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/intel/compiler/brw_fs.cpp

index beeac84e43d3ef4f29ea4478cbb883838177e562..f78c953f0f325a9aacade123d2095b4f1c21b131 100644 (file)
@@ -6237,6 +6237,8 @@ get_lowered_simd_width(const struct gen_device_info *devinfo,
    case BRW_OPCODE_SHR:
    case BRW_OPCODE_SHL:
    case BRW_OPCODE_ASR:
+   case BRW_OPCODE_ROR:
+   case BRW_OPCODE_ROL:
    case BRW_OPCODE_CMPN:
    case BRW_OPCODE_CSEL:
    case BRW_OPCODE_F32TO16: