@@ -68,9 +68,9 @@ pub struct MarkFrame<'a> {
68
68
69
69
#[ derive( Debug ) ]
70
70
pub ( super ) enum DepNodeColor {
71
- Unknown ,
72
- Red ,
73
71
Green ( DepNodeIndex ) ,
72
+ Red ,
73
+ Unknown ,
74
74
}
75
75
76
76
pub ( crate ) struct DepGraphData < D : Deps > {
@@ -1315,8 +1315,10 @@ pub(super) struct DepNodeColorMap {
1315
1315
sync : bool ,
1316
1316
}
1317
1317
1318
- const COMPRESSED_UNKNOWN : u32 = u32:: MAX ;
1319
- const COMPRESSED_RED : u32 = u32:: MAX - 1 ;
1318
+ // The values here are chosen to optimize `DepNodeColorMap::get`. All values below
1319
+ // `COMPRESSED_UNKNOWN` are green.
1320
+ const COMPRESSED_UNKNOWN : u32 = u32:: MAX - 1 ;
1321
+ const COMPRESSED_RED : u32 = u32:: MAX ;
1320
1322
1321
1323
impl DepNodeColorMap {
1322
1324
fn new ( size : usize ) -> DepNodeColorMap {
@@ -1366,10 +1368,15 @@ impl DepNodeColorMap {
1366
1368
1367
1369
#[ inline]
1368
1370
pub ( super ) fn get ( & self , index : SerializedDepNodeIndex ) -> DepNodeColor {
1369
- match self . values [ index] . load ( Ordering :: Acquire ) {
1370
- COMPRESSED_UNKNOWN => DepNodeColor :: Unknown ,
1371
- COMPRESSED_RED => DepNodeColor :: Red ,
1372
- value => DepNodeColor :: Green ( DepNodeIndex :: from_u32 ( value) ) ,
1371
+ let value = self . values [ index] . load ( Ordering :: Acquire ) ;
1372
+ // The most common case is green, then unknown, then red.
1373
+ if value < COMPRESSED_UNKNOWN {
1374
+ DepNodeColor :: Green ( DepNodeIndex :: from_u32 ( value) )
1375
+ } else if value == COMPRESSED_UNKNOWN {
1376
+ DepNodeColor :: Unknown
1377
+ } else {
1378
+ debug_assert_eq ! ( value, COMPRESSED_RED ) ;
1379
+ DepNodeColor :: Red
1373
1380
}
1374
1381
}
1375
1382
0 commit comments