@@ -1436,6 +1436,7 @@ mono_local_regalloc (MonoCompile *cfg, MonoBasicBlock *bb)
1436
1436
continue ;
1437
1437
}
1438
1438
1439
+ gboolean need_assign = FALSE;
1439
1440
if (rs -> ifree_mask & (regmask (dest_sreg ))) {
1440
1441
if (is_global_ireg (sreg )) {
1441
1442
int k ;
@@ -1454,8 +1455,8 @@ mono_local_regalloc (MonoCompile *cfg, MonoBasicBlock *bb)
1454
1455
DEBUG (printf ("\tshortcut assignment of R%d to %s\n" , sreg , mono_arch_regname (dest_sreg )));
1455
1456
assign_reg (cfg , rs , sreg , dest_sreg , 0 );
1456
1457
} else if (val < -1 ) {
1457
- /* FIXME: */
1458
- g_assert_not_reached () ;
1458
+ /* sreg is spilled, it can be assigned to dest_sreg */
1459
+ need_assign = TRUE ;
1459
1460
} else {
1460
1461
/* Argument already in hard reg, need to copy */
1461
1462
MonoInst * copy = create_copy_ins (cfg , bb , tmp , dest_sreg , val , NULL , ip , 0 );
@@ -1476,9 +1477,9 @@ mono_local_regalloc (MonoCompile *cfg, MonoBasicBlock *bb)
1476
1477
}
1477
1478
} else {
1478
1479
gboolean need_spill = TRUE;
1479
- gboolean need_assign = TRUE;
1480
1480
int k ;
1481
1481
1482
+ need_assign = TRUE;
1482
1483
dreg_mask &= ~ (regmask (dest_sreg ));
1483
1484
for (k = 0 ; k < num_sregs ; ++ k ) {
1484
1485
if (k != j )
@@ -1538,18 +1539,17 @@ mono_local_regalloc (MonoCompile *cfg, MonoBasicBlock *bb)
1538
1539
if (need_spill ) {
1539
1540
free_up_hreg (cfg , bb , tmp , ins , dest_sreg , 0 );
1540
1541
}
1542
+ }
1543
+ if (need_assign ) {
1544
+ if (rs -> vassign [sreg ] < -1 ) {
1545
+ int spill ;
1541
1546
1542
- if (need_assign ) {
1543
- if (rs -> vassign [sreg ] < -1 ) {
1544
- int spill ;
1545
-
1546
- /* Need to emit a spill store */
1547
- spill = - rs -> vassign [sreg ] - 1 ;
1548
- create_spilled_store (cfg , bb , spill , dest_sreg , sreg , tmp , NULL , ins , bank );
1549
- }
1550
- /* force-set sreg2 */
1551
- assign_reg (cfg , rs , sregs [j ], dest_sreg , 0 );
1547
+ /* Need to emit a spill store */
1548
+ spill = - rs -> vassign [sreg ] - 1 ;
1549
+ create_spilled_store (cfg , bb , spill , dest_sreg , sreg , tmp , NULL , ins , bank );
1552
1550
}
1551
+ /* force-set sreg */
1552
+ assign_reg (cfg , rs , sregs [j ], dest_sreg , 0 );
1553
1553
}
1554
1554
sregs [j ] = dest_sreg ;
1555
1555
}
0 commit comments