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 @@ -1693,8 +1693,13 @@ void PhaseChaitin::fixup_spills() {
1693
1693
// instructions which have "stackSlotX" parameter instead of "memory".
1694
1694
// For example, "MoveF2I_stack_reg". We always need a memory edge from
1695
1695
// src to cisc, else we might schedule cisc before src, loading from a
1696
- // spill location before storing the spill.
1697
- assert (cisc->memory_operand () == NULL , " no memory operand, only stack" );
1696
+ // spill location before storing the spill. On some platforms, we land
1697
+ // in this else case because mach->oper_input_base() > 1, i.e. we have
1698
+ // multiple inputs. In some rare cases there are even multiple memory
1699
+ // operands, before and after spilling.
1700
+ // (e.g. spilling "addFPR24_reg_mem" to "addFPR24_mem_cisc")
1701
+ // In either case, there is no space in the inputs for the memory edge
1702
+ // so we add an additional precedence / memory edge.
1698
1703
cisc->add_prec (src);
1699
1704
}
1700
1705
block->map_node (cisc, j); // Insert into basic block
You can’t perform that action at this time.
0 commit comments