From 7e38f49a8f6a1ee765613e581844f8e9af414b10 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 27 Mar 2018 16:27:20 -0700 Subject: [PATCH] intel/fs: Don't emit a des copy for image ops with has_dest == false This was causing us to walk dest_components times over a thing with no destination. This happened to work because all of the image intrinsics without a destination also happened to have dest_components == 0. We shouldn't be reading dest_components if has_dest == false. Reviewed-by: Matt Turner Reviewed-by: Ian Romanick --- src/intel/compiler/brw_fs_nir.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp index f5d53992598..197d41062e3 100644 --- a/src/intel/compiler/brw_fs_nir.cpp +++ b/src/intel/compiler/brw_fs_nir.cpp @@ -3848,9 +3848,12 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr get_image_atomic_op(instr->intrinsic, type)); /* Assign the result. */ - for (unsigned c = 0; c < info->dest_components; ++c) - bld.MOV(offset(retype(dest, base_type), bld, c), - offset(tmp, bld, c)); + if (nir_intrinsic_infos[instr->intrinsic].has_dest) { + for (unsigned c = 0; c < info->dest_components; ++c) { + bld.MOV(offset(retype(dest, base_type), bld, c), + offset(tmp, bld, c)); + } + } break; } -- 2.30.2