@@ -944,6 +944,7 @@ impl<'a, F: Function> Env<'a, F> {
944
944
}
945
945
946
946
fn add_liverange_to_preg ( & mut self , range : CodeRange , reg : PReg ) {
947
+ log:: debug!( "adding liverange to preg: {:?} to {}" , range, reg) ;
947
948
let preg_idx = PRegIndex :: new ( reg. index ( ) ) ;
948
949
let lr = self . create_liverange ( range) ;
949
950
self . pregs [ preg_idx. index ( ) ]
@@ -1413,10 +1414,22 @@ impl<'a, F: Function> Env<'a, F> {
1413
1414
if let Some ( idx) = seen_fixed_for_vreg. iter ( ) . position ( |r| * r == op. vreg ( ) )
1414
1415
{
1415
1416
let orig_preg = first_preg[ idx] ;
1416
- log:: debug!( " -> duplicate; switching to policy Reg" ) ;
1417
- fixups. push ( ( pos, orig_preg, preg_idx, slot) ) ;
1418
- * op = Operand :: new ( op. vreg ( ) , OperandPolicy :: Reg , op. kind ( ) , op. pos ( ) ) ;
1419
- extra_clobbers. push ( ( preg, pos. inst ) ) ;
1417
+ if orig_preg != preg_idx {
1418
+ log:: debug!( " -> duplicate; switching to policy Reg" ) ;
1419
+ fixups. push ( ( pos, orig_preg, preg_idx, slot) ) ;
1420
+ * op = Operand :: new (
1421
+ op. vreg ( ) ,
1422
+ OperandPolicy :: Reg ,
1423
+ op. kind ( ) ,
1424
+ op. pos ( ) ,
1425
+ ) ;
1426
+ log:: debug!(
1427
+ " -> extra clobber {} at inst{}" ,
1428
+ preg,
1429
+ pos. inst. index( )
1430
+ ) ;
1431
+ extra_clobbers. push ( ( preg, pos. inst ) ) ;
1432
+ }
1420
1433
} else {
1421
1434
seen_fixed_for_vreg. push ( op. vreg ( ) ) ;
1422
1435
first_preg. push ( preg_idx) ;
@@ -2716,7 +2729,7 @@ impl<'a, F: Function> Env<'a, F> {
2716
2729
if self . minimal_bundle ( bundle) {
2717
2730
self . dump_state ( ) ;
2718
2731
}
2719
- debug_assert ! ( !self . minimal_bundle( bundle) ) ;
2732
+ assert ! ( !self . minimal_bundle( bundle) ) ;
2720
2733
2721
2734
self . split_and_requeue_bundle (
2722
2735
bundle,
0 commit comments