diff options
author | Jose Maria Casanova Crespo <[email protected]> | 2018-06-09 11:46:01 +0200 |
---|---|---|
committer | Jose Maria Casanova Crespo <[email protected]> | 2018-06-16 22:39:08 +0200 |
commit | 152bffb69bdb13e63a9112ddab78dc86855d9687 (patch) | |
tree | b0a39c299e6f8d136a8ae66576f939cf2f123da6 /src/intel | |
parent | 8b26a2d96d5806d698f827d5521cf75504dc3a85 (diff) |
intel/fs: Use shuffle_from_32bit_read for 64-bit gs_input_load
This implementation avoids two unneeded MOVs for each 64-bit
component. One was done in the old shuffle, to avoid cases of
src/dst overlap but this is not the case. And the removed MOV
was already being being done in the shuffle.
Copy propagation wasn't able to remove them because shuffle
destination values are defined with partial writes because they
have stride == 2.
v2: Reword commit log summary (Jason Ekstrand)
Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/intel')
-rw-r--r-- | src/intel/compiler/brw_fs_nir.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp index 81c26321ed2..f45e123cc1b 100644 --- a/src/intel/compiler/brw_fs_nir.cpp +++ b/src/intel/compiler/brw_fs_nir.cpp @@ -2305,11 +2305,11 @@ fs_visitor::emit_gs_input_load(const fs_reg &dst, } if (type_sz(dst.type) == 8) { - shuffle_32bit_load_result_to_64bit_data( - bld, tmp_dst, retype(tmp_dst, BRW_REGISTER_TYPE_F), num_components); - - for (unsigned c = 0; c < num_components; c++) - bld.MOV(offset(dst, bld, iter * 2 + c), offset(tmp_dst, bld, c)); + shuffle_from_32bit_read(bld, + offset(dst, bld, iter * 2), + retype(tmp_dst, BRW_REGISTER_TYPE_D), + 0, + num_components); } if (num_iterations > 1) { |