pan/bi: Use nir_alu_src_as_uint
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Tue, 25 Apr 2023 18:50:01 +0000 (14:50 -0400)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Thu, 11 May 2023 13:23:04 +0000 (09:23 -0400)
Fixes some theoretical issues with swizzle handling. Unsure if this could cause
actual end-to-end miscompiles.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22695>

src/panfrost/compiler/bifrost_compile.c

index 5b9adc8..c679c71 100644 (file)
@@ -2522,7 +2522,7 @@ bi_emit_alu(bi_builder *b, nir_alu_instr *instr)
    case nir_op_extract_i8: {
       assert(comps == 1 && "should be scalarized");
       assert((src_sz == 16 || src_sz == 32) && "should be lowered");
-      unsigned byte = nir_src_as_uint(instr->src[1].src);
+      unsigned byte = nir_alu_src_as_uint(instr->src[1]);
 
       if (s0.swizzle == BI_SWIZZLE_H11) {
          assert(byte < 2);
@@ -2546,7 +2546,7 @@ bi_emit_alu(bi_builder *b, nir_alu_instr *instr)
    case nir_op_extract_i16: {
       assert(comps == 1 && "should be scalarized");
       assert(src_sz == 32 && "should be lowered");
-      unsigned half = nir_src_as_uint(instr->src[1].src);
+      unsigned half = nir_alu_src_as_uint(instr->src[1]);
       assert(half == 0 || half == 1);
 
       if (instr->op == nir_op_extract_i16)
@@ -2558,7 +2558,7 @@ bi_emit_alu(bi_builder *b, nir_alu_instr *instr)
 
    case nir_op_insert_u16: {
       assert(comps == 1 && "should be scalarized");
-      unsigned half = nir_src_as_uint(instr->src[1].src);
+      unsigned half = nir_alu_src_as_uint(instr->src[1]);
       assert(half == 0 || half == 1);
 
       if (half == 0)