diff --git a/cranelift/codegen/src/isa/x64/mod.rs b/cranelift/codegen/src/isa/x64/mod.rs index 9a16a757a6..8c7415d88a 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 0F851D000000 jnz near 0x46 + // 00000023 0F8505000000 jnz near 0x2e // 00000029 4889EC mov rsp,rbp // 0000002C 5D pop rbp // 0000002D C3 ret @@ -338,13 +338,12 @@ 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, 29, 0, 0, 0, 72, + 72, 137, 248, 129, 232, 52, 18, 0, 0, 68, 1, 192, 133, 255, 15, 133, 5, 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, 233, 227, 255, 255, 255, + 237, 255, 255, 255, 233, 207, 255, 255, 255, ]; assert_eq!(code, &golden[..]); diff --git a/cranelift/codegen/src/machinst/buffer.rs b/cranelift/codegen/src/machinst/buffer.rs index 0f915a96dd..084346cc4e 100644 --- a/cranelift/codegen/src/machinst/buffer.rs +++ b/cranelift/codegen/src/machinst/buffer.rs @@ -1214,6 +1214,10 @@ impl MachBuffer { pub fn finish(mut self) -> MachBufferFinalized { let _tt = timing::vcode_emit_finish(); + // Do any optimizations on branches at tail of buffer, as if we + // had bound one last label. + self.optimize_branches(); + self.finish_emission_maybe_forcing_veneers(false); let mut srclocs = self.srclocs;