nir/lower_bit_size: lower uadd_carry
authorRhys Perry <pendingchaos02@gmail.com>
Wed, 2 Nov 2022 16:45:08 +0000 (16:45 +0000)
committerEric Engestrom <eric@engestrom.ch>
Wed, 23 Nov 2022 19:11:58 +0000 (19:11 +0000)
8/16-bit uadd_carry can exist in SPIR-V.

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Georg Lehmann <dadschoorse@gmail.com>
Gitlab: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7615
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19473>
(cherry picked from commit da30fb5df705d38e6d3aefadf769ec4517b9b20e)

.pick_status.json
src/compiler/nir/nir_lower_bit_size.c

index f9a8943..772ef6a 100644 (file)
         "description": "nir/lower_bit_size: lower uadd_carry",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": null
     },
index 79653be..7740992 100644 (file)
@@ -79,6 +79,8 @@ lower_alu_instr(nir_builder *bld, nir_alu_instr *alu, unsigned bit_size)
          lowered_dst = nir_ushr_imm(bld, lowered_dst, dst_bit_size);
       else
          lowered_dst = nir_ishr_imm(bld, lowered_dst, dst_bit_size);
+   } else if (op == nir_op_uadd_carry) {
+      lowered_dst = nir_ushr_imm(bld, nir_iadd(bld, srcs[0], srcs[1]), dst_bit_size);
    } else {
       lowered_dst = nir_build_alu_src_arr(bld, op, srcs);