diff --git a/.pick_status.json b/.pick_status.json index d1b36f064f9..503587313f9 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1604,7 +1604,7 @@ "description": "nir/opt_vectorize_io: Fix allow_holes option", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "6286c1c66fb0ed21e1dfd0aaf0db9e1a8360e82b", "notes": null diff --git a/src/compiler/nir/nir_opt_vectorize_io.c b/src/compiler/nir/nir_opt_vectorize_io.c index 8ab4e473113..2a5959dd266 100644 --- a/src/compiler/nir/nir_opt_vectorize_io.c +++ b/src/compiler/nir/nir_opt_vectorize_io.c @@ -414,16 +414,18 @@ vectorize_slot(nir_intrinsic_instr *chan[8], unsigned mask, bool allow_holes) scan_mask = mask & BITFIELD_RANGE(4, 4); mask &= ~scan_mask; - if (is_load && allow_holes) { + if (is_load && allow_holes && scan_mask) { unsigned num = util_last_bit(scan_mask); - scan_mask = BITFIELD_RANGE(4, num - 4); + unsigned start = ffs(scan_mask) - 1; + scan_mask = BITFIELD_RANGE(start, num - start); } } else { scan_mask = mask; - if (is_load && allow_holes) { + if (is_load && allow_holes && scan_mask) { unsigned num = util_last_bit(scan_mask); - scan_mask = BITFIELD_MASK(num); + unsigned start = ffs(scan_mask) - 1; + scan_mask = BITFIELD_RANGE(start, num - start); } }