diff --git a/src/intel/compiler/elk/elk_fs_reg_allocate.cpp b/src/intel/compiler/elk/elk_fs_reg_allocate.cpp index 229a0853cfe..ca31dbc43f8 100644 --- a/src/intel/compiler/elk/elk_fs_reg_allocate.cpp +++ b/src/intel/compiler/elk/elk_fs_reg_allocate.cpp @@ -387,6 +387,7 @@ private: int rsi; ra_graph *g; + bool interference_graph_supports_spilling; bool have_spill_costs; int payload_node_count; @@ -629,6 +630,8 @@ elk_fs_reg_alloc::setup_inst_interference(const elk_fs_inst *inst) void elk_fs_reg_alloc::build_interference_graph(bool allow_spilling) { + interference_graph_supports_spilling = allow_spilling; + /* Compute the RA node layout */ node_count = 0; first_payload_node = node_count; @@ -925,6 +928,15 @@ elk_fs_reg_alloc::set_spill_costs() int elk_fs_reg_alloc::choose_spill_reg() { + /* If we're going to spill but we've never spilled before, we need + * to re-build the interference graph with MRFs enabled to allow + * spilling. + */ + if (!interference_graph_supports_spilling) { + discard_interference_graph(); + build_interference_graph(true); + } + if (!have_spill_costs) set_spill_costs(); @@ -1158,15 +1170,6 @@ elk_fs_reg_alloc::assign_regs(bool allow_spilling, bool spill_all) break; } - /* If we're going to spill but we've never spilled before, we need - * to re-build the interference graph with MRFs enabled to allow - * spilling. - */ - if (!fs->spilled_any_registers) { - discard_interference_graph(); - build_interference_graph(true); - } - spill_reg(reg); spilled++; }