Propagate cold annotations to edge blocks (#4636)
Update the lowering stage to mark edge blocks as cold if either the predecessor or successor block is cold.
This commit is contained in:
@@ -329,7 +329,7 @@ mod test {
|
||||
// 00000018 81E834120000 sub eax,0x1234
|
||||
// 0000001E 4401C0 add eax,r8d
|
||||
// 00000021 85FF test edi,edi
|
||||
// 00000023 0F8505000000 jnz near 0x2e
|
||||
// 00000023 0F851D000000 jnz near 0x46
|
||||
// 00000029 4889EC mov rsp,rbp
|
||||
// 0000002C 5D pop rbp
|
||||
// 0000002D C3 ret
|
||||
@@ -338,12 +338,13 @@ mod test {
|
||||
// 00000038 4585C0 test r8d,r8d
|
||||
// 0000003B 0F85EDFFFFFF jnz near 0x2e
|
||||
// 00000041 E9CFFFFFFF jmp 0x15
|
||||
// 00000046 E9E3FFFFFF jmp 0x2e
|
||||
|
||||
let golden = vec![
|
||||
85, 72, 137, 229, 129, 199, 52, 18, 0, 0, 133, 255, 15, 132, 28, 0, 0, 0, 73, 137, 248,
|
||||
72, 137, 248, 129, 232, 52, 18, 0, 0, 68, 1, 192, 133, 255, 15, 133, 5, 0, 0, 0, 72,
|
||||
72, 137, 248, 129, 232, 52, 18, 0, 0, 68, 1, 192, 133, 255, 15, 133, 29, 0, 0, 0, 72,
|
||||
137, 236, 93, 195, 73, 137, 248, 65, 129, 192, 52, 18, 0, 0, 69, 133, 192, 15, 133,
|
||||
237, 255, 255, 255, 233, 207, 255, 255, 255,
|
||||
237, 255, 255, 255, 233, 207, 255, 255, 255, 233, 227, 255, 255, 255,
|
||||
];
|
||||
|
||||
assert_eq!(code, &golden[..]);
|
||||
|
||||
@@ -432,14 +432,21 @@ impl BlockLoweringOrder {
|
||||
lowered_order.push(block);
|
||||
lowered_succ_ranges.push(succ_range);
|
||||
|
||||
if block
|
||||
.orig_block()
|
||||
.map(|b| f.layout.is_cold(b))
|
||||
.unwrap_or(false)
|
||||
{
|
||||
match block {
|
||||
LoweredBlock::Orig { block }
|
||||
| LoweredBlock::OrigAndEdge { block, .. }
|
||||
| LoweredBlock::EdgeAndOrig { block, .. } => {
|
||||
if f.layout.is_cold(block) {
|
||||
cold_blocks.insert(index);
|
||||
}
|
||||
}
|
||||
LoweredBlock::Edge { pred, succ, .. } => {
|
||||
if f.layout.is_cold(pred) || f.layout.is_cold(succ) {
|
||||
cold_blocks.insert(index);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let lowered_succ_indices = lowered_succs
|
||||
.iter()
|
||||
|
||||
Reference in New Issue
Block a user