diff --git a/.pick_status.json b/.pick_status.json index edd075a2bfc..dcabebcd06d 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2734,7 +2734,7 @@ "description": "ir3/legalize: don't drop sync flags on removed predt/predf", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "39088571f08ae0b8dee1cf51bf590df5c23962bf", "notes": null diff --git a/src/freedreno/ir3/ir3_legalize.c b/src/freedreno/ir3/ir3_legalize.c index 8e29697d478..cfb65615d46 100644 --- a/src/freedreno/ir3/ir3_legalize.c +++ b/src/freedreno/ir3/ir3_legalize.c @@ -1456,6 +1456,11 @@ prede_sched(struct ir3 *ir) list_delinit(&succ0_terminator->node); struct ir3_builder build = ir3_builder_at(ir3_before_terminator(succ0)); struct ir3_instruction *prede = ir3_PREDE(&build); + + /* legalize_block might have set sync flags on the terminator that we just + * removed; set them on prede instead. + */ + prede->flags |= succ0_terminator->flags; add_predication_workaround(ir->compiler, NULL, prede); remove_unused_block(succ1); block->successors[1] = succ0->successors[0];