File tree Expand file tree Collapse file tree 1 file changed +7
-2
lines changed Expand file tree Collapse file tree 1 file changed +7
-2
lines changed Original file line number Diff line number Diff line change @@ -1705,8 +1705,13 @@ void PhaseChaitin::fixup_spills() {
1705
1705
// instructions which have "stackSlotX" parameter instead of "memory".
1706
1706
// For example, "MoveF2I_stack_reg". We always need a memory edge from
1707
1707
// src to cisc, else we might schedule cisc before src, loading from a
1708
- // spill location before storing the spill.
1709
- assert (cisc->memory_operand () == nullptr , " no memory operand, only stack" );
1708
+ // spill location before storing the spill. On some platforms, we land
1709
+ // in this else case because mach->oper_input_base() > 1, i.e. we have
1710
+ // multiple inputs. In some rare cases there are even multiple memory
1711
+ // operands, before and after spilling.
1712
+ // (e.g. spilling "addFPR24_reg_mem" to "addFPR24_mem_cisc")
1713
+ // In either case, there is no space in the inputs for the memory edge
1714
+ // so we add an additional precedence / memory edge.
1710
1715
cisc->add_prec (src);
1711
1716
}
1712
1717
block->map_node (cisc, j); // Insert into basic block
You can’t perform that action at this time.
0 commit comments