@@ -434,7 +434,7 @@ pub struct Env<'a, F: Function> {
434434 // was to the approprate PReg.
435435 pub multi_fixed_reg_fixups : Vec < MultiFixedRegFixup > ,
436436
437- pub inserted_moves : Vec < InsertedMove > ,
437+ pub inserted_moves : [ Vec < InsertedMove > ; InsertMovePrio :: Count as usize ] ,
438438
439439 // Output:
440440 pub edits : Vec < ( PosWithPrio , Edit ) > ,
@@ -636,20 +636,41 @@ impl LiveRangeSet {
636636
637637#[ derive( Clone , Debug ) ]
638638pub struct InsertedMove {
639- pub pos_prio : PosWithPrio ,
639+ pub pos : ProgPoint ,
640640 pub from_alloc : Allocation ,
641641 pub to_alloc : Allocation ,
642642 pub to_vreg : VReg ,
643643}
644644
645+ /// Move priority levels, for resolving move dependency order.
646+ ///
647+ /// NOTE: new priority values should be added before `Count`, and `InsertMovePrio::all` should be
648+ /// updated to include the new priority.
645649#[ derive( Clone , Copy , Debug , PartialEq , Eq , PartialOrd , Ord ) ]
650+ #[ repr( u8 ) ]
646651pub enum InsertMovePrio {
647652 InEdgeMoves ,
648653 Regular ,
649654 MultiFixedRegInitial ,
650655 MultiFixedRegSecondary ,
651656 ReusedInput ,
652657 OutEdgeMoves ,
658+
659+ /// The number of priorities, used to determine the length of the Env::inserted_moves array.
660+ Count ,
661+ }
662+
663+ impl InsertMovePrio {
664+ pub fn all ( ) -> & ' static [ InsertMovePrio ] {
665+ & [
666+ InsertMovePrio :: InEdgeMoves ,
667+ InsertMovePrio :: Regular ,
668+ InsertMovePrio :: MultiFixedRegInitial ,
669+ InsertMovePrio :: MultiFixedRegSecondary ,
670+ InsertMovePrio :: ReusedInput ,
671+ InsertMovePrio :: OutEdgeMoves ,
672+ ]
673+ }
653674}
654675
655676/// The fields in this struct are reversed in sort order so that the entire
0 commit comments