diff --git a/cranelift/codegen/src/isa/x64/mod.rs b/cranelift/codegen/src/isa/x64/mod.rs index 8c7415d88a..9a16a757a6 100644 --- a/cranelift/codegen/src/isa/x64/mod.rs +++ b/cranelift/codegen/src/isa/x64/mod.rs @@ -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[..]); diff --git a/cranelift/codegen/src/machinst/blockorder.rs b/cranelift/codegen/src/machinst/blockorder.rs index 79503ae4c4..77e5d8dcae 100644 --- a/cranelift/codegen/src/machinst/blockorder.rs +++ b/cranelift/codegen/src/machinst/blockorder.rs @@ -432,12 +432,19 @@ 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) - { - cold_blocks.insert(index); + 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); + } + } } }