freedreno/a2xx: ir2: fix saturate in cp
authorJonathan Marek <jonathan@marek.ca>
Thu, 5 Sep 2019 15:19:21 +0000 (11:19 -0400)
committerJonathan Marek <jonathan@marek.ca>
Fri, 6 Sep 2019 02:24:29 +0000 (02:24 +0000)
Signed-off-by: Jonathan Marek <jonathan@marek.ca>
Reviewed-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/gallium/drivers/freedreno/a2xx/ir2_cp.c

index fa155887f80e4edbc132af0935d78bdbfb39e204..0e16bdaa4c1ae0cbb8c9f15649b1311e12bf787e 100644 (file)
@@ -68,6 +68,9 @@ void cp_src(struct ir2_context *ctx)
                                if (!is_mov(p))
                                        break;
 
+                               if (p->alu.saturate)
+                                       break;
+
                                /* cant apply abs to const src, const src only for alu */
                                if (p->src[0].type == IR2_SRC_CONST &&
                                        (src->abs || instr->type != IR2_ALU))
@@ -200,6 +203,7 @@ void cp_export(struct ir2_context *ctx)
                        p->is_ssa = true;
                        p->ssa.ncomp = 0;
                        memset(p->ssa.comp, 0, sizeof(p->ssa.comp));
+                       p->alu.saturate |= instr->alu.saturate;
 
                        switch (instr->alu.vector_opc) {
                        case PRED_SETE_PUSHv ... PRED_SETGTE_PUSHv: