r600/sfn: Work around dependency issue when splitting op to group

The instruction that is split may still be referenced as extra
dependency in other instructions, so add a handle to the instruction
that it can be set to be scheduled.

Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21357>
This commit is contained in:
Gert Wollny 2023-02-10 15:17:11 +01:00 committed by Marge Bot
parent 8b5d41cacb
commit ac6b95d40b
3 changed files with 6 additions and 0 deletions

View file

@ -809,6 +809,7 @@ AluInstr::split(ValueFactory& vf)
r->del_use(this); r->del_use(this);
} }
} }
group->set_origin(this);
return group; return group;
} }

View file

@ -314,6 +314,8 @@ AluGroup::set_scheduled()
if (m_slots[i]) if (m_slots[i])
m_slots[i]->set_scheduled(); m_slots[i]->set_scheduled();
} }
if (m_origin)
m_origin->set_scheduled();
} }
void void

View file

@ -91,6 +91,8 @@ public:
bool addr_for_src() const { return m_addr_for_src; } bool addr_for_src() const { return m_addr_for_src; }
bool has_kill_op() const { return m_has_kill_op; } bool has_kill_op() const { return m_has_kill_op; }
void set_origin(AluInstr *o) { m_origin = o;}
private: private:
void forward_set_blockid(int id, int index) override; void forward_set_blockid(int id, int index) override;
bool do_ready() const override; bool do_ready() const override;
@ -115,6 +117,7 @@ private:
bool m_addr_is_index{false}; bool m_addr_is_index{false};
bool m_addr_for_src{false}; bool m_addr_for_src{false};
bool m_has_kill_op{false}; bool m_has_kill_op{false};
AluInstr *m_origin{nullptr};
}; };
} // namespace r600 } // namespace r600