From: Rob Clark Date: Mon, 16 Mar 2020 21:50:32 +0000 (-0700) Subject: freedreno/ir3/cf: skip array load/store X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=67dbe8088fd97e944ea9adbf7080d63f8343f475;p=mesa.git freedreno/ir3/cf: skip array load/store Don't fold conversions into array (incl phi lowered to regs/array). These aren't SSA. Avoids crashes in particular in frag shaders with flow control, which would leave a dangling array write disconnect from the original cov src. Possibly this could be slightly relaxed, if there is no other consumer of the src, and it were in the same block. But it would require updating block->keeps, and taking care of barrier state. Which isn't a thing the cf pass does currently. Signed-off-by: Rob Clark Part-of: --- diff --git a/src/freedreno/ir3/ir3_cf.c b/src/freedreno/ir3/ir3_cf.c index 636ed384d79..b9035706131 100644 --- a/src/freedreno/ir3/ir3_cf.c +++ b/src/freedreno/ir3/ir3_cf.c @@ -38,6 +38,11 @@ is_fp16_conv(struct ir3_instruction *instr) if (dst->flags & (IR3_REG_EVEN | IR3_REG_POS_INF)) return false; + if (dst->flags & (IR3_REG_RELATIV | IR3_REG_ARRAY)) + return false; + if (src->flags & (IR3_REG_RELATIV | IR3_REG_ARRAY)) + return false; + if (instr->cat1.src_type == TYPE_F32 && instr->cat1.dst_type == TYPE_F16) return true;