-
Notifications
You must be signed in to change notification settings - Fork 13.3k
Avoid some bounds checks in binary_heap::{PeekMut,Hole} #58123
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Conversation
r? @sfackler (rust_highfive has picked a reviewer for you, use r? to override) |
The job Click to expand the log.
I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact |
ed675f9
to
ca7c8a9
Compare
The job Click to expand the log.
I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact |
ca7c8a9
to
1b29a03
Compare
1b29a03
to
ea72066
Compare
test code use std::collections::BinaryHeap;
#[no_mangle]
pub extern fn is_opt(heap: &mut BinaryHeap<u32>) -> bool {
if let Some(mut peek) = heap.peek_mut() {
*peek = 1;
true
} else {
false
}
} before .text
.file "peekmut.71651wce-cgu.0"
.section .text._ZN4core3ptr18real_drop_in_place17hb6242b27b5771784E,"ax",@progbits
.p2align 4, 0x90
.type _ZN4core3ptr18real_drop_in_place17hb6242b27b5771784E,@function
_ZN4core3ptr18real_drop_in_place17hb6242b27b5771784E:
.cfi_startproc
pushq %rax
.cfi_def_cfa_offset 16
cmpb $0, 8(%rdi)
je .LBB0_12
movq (%rdi), %rax
movq 16(%rax), %r9
testq %r9, %r9
je .LBB0_13
movq (%rax), %rax
movl (%rax), %r8d
cmpq $1, %r9
jne .LBB0_4
xorl %esi, %esi
jmp .LBB0_11
.LBB0_4:
movl $1, %edi
xorl %ecx, %ecx
.p2align 4, 0x90
.LBB0_5:
leaq 1(%rdi), %rsi
cmpq %r9, %rsi
jae .LBB0_8
movl (%rax,%rdi,4), %edx
cmpl 4(%rax,%rdi,4), %edx
ja .LBB0_8
movq %rsi, %rdi
.LBB0_8:
movq %rdi, %rsi
movl (%rax,%rdi,4), %edi
cmpl %edi, %r8d
jae .LBB0_9
movl %edi, (%rax,%rcx,4)
leaq (%rsi,%rsi), %rdi
addq $1, %rdi
movq %rsi, %rcx
cmpq %r9, %rdi
jb .LBB0_5
jmp .LBB0_11
.LBB0_9:
movq %rcx, %rsi
.LBB0_11:
movl %r8d, (%rax,%rsi,4)
.LBB0_12:
popq %rax
.cfi_def_cfa_offset 8
retq
.LBB0_13:
.cfi_def_cfa_offset 16
leaq .L__unnamed_1(%rip), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq *_ZN4core9panicking18panic_bounds_check17h59684c930baf7d8bE@GOTPCREL(%rip)
ud2
.Lfunc_end0:
.size _ZN4core3ptr18real_drop_in_place17hb6242b27b5771784E, .Lfunc_end0-_ZN4core3ptr18real_drop_in_place17hb6242b27b5771784E
.cfi_endproc
.section .text.is_opt,"ax",@progbits
.globl is_opt
.p2align 4, 0x90
.type is_opt,@function
is_opt:
.Lfunc_begin0:
.cfi_startproc
.cfi_personality 155, DW.ref.rust_eh_personality
.cfi_lsda 27, .Lexception0
subq $24, %rsp
.cfi_def_cfa_offset 32
cmpq $0, 16(%rdi)
je .LBB1_18
movq %rdi, 8(%rsp)
movb $1, 16(%rsp)
cmpq $0, 16(%rdi)
je .LBB1_2
movq (%rdi), %rax
movl $1, (%rax)
movq 16(%rdi), %r9
testq %r9, %r9
je .LBB1_6
movq (%rdi), %rax
movl (%rax), %r8d
cmpq $1, %r9
jne .LBB1_9
xorl %esi, %esi
jmp .LBB1_16
.LBB1_18:
xorl %ecx, %ecx
movl %ecx, %eax
addq $24, %rsp
.cfi_def_cfa_offset 8
retq
.LBB1_9:
.cfi_def_cfa_offset 32
movl $1, %edi
xorl %ecx, %ecx
.p2align 4, 0x90
.LBB1_10:
leaq 1(%rdi), %rsi
cmpq %r9, %rsi
jae .LBB1_13
movl (%rax,%rdi,4), %edx
cmpl 4(%rax,%rdi,4), %edx
ja .LBB1_13
movq %rsi, %rdi
.LBB1_13:
movq %rdi, %rsi
movl (%rax,%rdi,4), %edi
cmpl %edi, %r8d
jae .LBB1_14
movl %edi, (%rax,%rcx,4)
leaq (%rsi,%rsi), %rdi
addq $1, %rdi
movq %rsi, %rcx
cmpq %r9, %rdi
jb .LBB1_10
jmp .LBB1_16
.LBB1_14:
movq %rcx, %rsi
.LBB1_16:
movl %r8d, (%rax,%rsi,4)
movb $1, %cl
movl %ecx, %eax
addq $24, %rsp
.cfi_def_cfa_offset 8
retq
.LBB1_2:
.cfi_def_cfa_offset 32
.Ltmp3:
leaq .L__unnamed_2(%rip), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq *_ZN4core9panicking18panic_bounds_check17h59684c930baf7d8bE@GOTPCREL(%rip)
.Ltmp4:
jmp .LBB1_3
.LBB1_6:
.Ltmp0:
leaq .L__unnamed_1(%rip), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq *_ZN4core9panicking18panic_bounds_check17h59684c930baf7d8bE@GOTPCREL(%rip)
.Ltmp1:
.LBB1_3:
ud2
.LBB1_4:
.Ltmp2:
ud2
ud2
.LBB1_19:
.Ltmp5:
leaq 8(%rsp), %rdi
callq _ZN4core3ptr18real_drop_in_place17hb6242b27b5771784E
ud2
ud2
.Lfunc_end1:
.size is_opt, .Lfunc_end1-is_opt
.cfi_endproc
.section .gcc_except_table,"a",@progbits
.p2align 2
GCC_except_table1:
.Lexception0:
.byte 255
.byte 255
.byte 1
.uleb128 .Lcst_end0-.Lcst_begin0
.Lcst_begin0:
.uleb128 .Ltmp3-.Lfunc_begin0
.uleb128 .Ltmp4-.Ltmp3
.uleb128 .Ltmp5-.Lfunc_begin0
.byte 0
.uleb128 .Ltmp0-.Lfunc_begin0
.uleb128 .Ltmp1-.Ltmp0
.uleb128 .Ltmp2-.Lfunc_begin0
.byte 0
.uleb128 .Ltmp1-.Lfunc_begin0
.uleb128 .Lfunc_end1-.Ltmp1
.byte 0
.byte 0
.Lcst_end0:
.p2align 2
.type str.0,@object
.section .rodata.str.0,"a",@progbits
.p2align 4
str.0:
.ascii "/rustc/8a57831a4b7dfa960110599748f3b7382ae28237/src/libcore/slice/mod.rs"
.size str.0, 72
.type .L__unnamed_2,@object
.section .data.rel.ro..L__unnamed_2,"aw",@progbits
.p2align 3
.L__unnamed_2:
.quad str.0
.quad 72
.long 2541
.long 14
.size .L__unnamed_2, 24
.type str.1,@object
.section .rodata.str.1,"a",@progbits
.p2align 4
str.1:
.ascii "/rustc/8a57831a4b7dfa960110599748f3b7382ae28237/src/liballoc/collections/binary_heap.rs"
.size str.1, 87
.type .L__unnamed_1,@object
.section .data.rel.ro..L__unnamed_1,"aw",@progbits
.p2align 3
.L__unnamed_1:
.quad str.1
.quad 87
.long 868
.long 30
.size .L__unnamed_1, 24
.hidden DW.ref.rust_eh_personality
.weak DW.ref.rust_eh_personality
.section .data.DW.ref.rust_eh_personality,"aGw",@progbits,DW.ref.rust_eh_personality,comdat
.p2align 3
.type DW.ref.rust_eh_personality,@object
.size DW.ref.rust_eh_personality, 8
DW.ref.rust_eh_personality:
.quad rust_eh_personality
.section ".note.GNU-stack","",@progbits after .text
.file "peekmut.71651wce-cgu.0"
.section .text.is_opt,"ax",@progbits
.globl is_opt
.p2align 4, 0x90
.type is_opt,@function
is_opt:
.cfi_startproc
cmpq $0, 16(%rdi)
je .LBB0_1
movq (%rdi), %rax
movl $1, (%rax)
movq 16(%rdi), %r9
movb $1, %al
cmpq $2, %r9
jb .LBB0_11
movq (%rdi), %r10
movl (%r10), %r8d
movl $1, %esi
xorl %edx, %edx
.p2align 4, 0x90
.LBB0_4:
leaq 1(%rsi), %rdi
cmpq %r9, %rdi
jae .LBB0_7
movl (%r10,%rsi,4), %ecx
cmpl 4(%r10,%rsi,4), %ecx
ja .LBB0_7
movq %rdi, %rsi
.LBB0_7:
movq %rsi, %rdi
movl (%r10,%rsi,4), %esi
cmpl %esi, %r8d
jae .LBB0_8
movl %esi, (%r10,%rdx,4)
leaq (%rdi,%rdi), %rsi
addq $1, %rsi
movq %rdi, %rdx
cmpq %r9, %rsi
jb .LBB0_4
jmp .LBB0_10
.LBB0_1:
xorl %eax, %eax
retq
.LBB0_8:
movq %rdx, %rdi
.LBB0_10:
movl %r8d, (%r10,%rdi,4)
.LBB0_11:
retq
.Lfunc_end0:
.size is_opt, .Lfunc_end0-is_opt
.cfi_endproc
.section ".note.GNU-stack","",@progbits |
@bors r+ Thanks! |
📌 Commit ea72066 has been approved by |
@bors rollup |
…s, r=sfackler Avoid some bounds checks in binary_heap::{PeekMut,Hole} Fixes rust-lang#58121.
Rollup of 23 pull requests Successful merges: - #58118 (Transition libtest to 2018 edition) - #58119 (libproc_macro => 2018) - #58123 (Avoid some bounds checks in binary_heap::{PeekMut,Hole}) - #58124 (libsyntax_pos => 2018) - #58133 (libsyntax_ext => 2018) - #58136 (Improve error message and docs for non-UTF-8 bytes in stdio on Windows) - #58156 (update submodule: rust-installer from 27dec6c to ccdc47b) - #58192 (Do not ICE in codegen when using a extern_type static) - #58193 (Move librustc to 2018) - #58210 (Make an assert debug-only in `find_constraint_paths_between_regions`.) - #58217 (librustc_tsan => 2018) - #58218 (librustc_msan => 2018) - #58219 (librustc_asan => 2018) - #58220 (libprofiler_builtins => 2018) - #58223 (librustc_lsan => 2018) - #58225 (librustc_fs_util => 2018) - #58228 (librustc_plugin => 2018) - #58236 (librustc_resolve => 2018) - #58237 (Fix broken grammar in iter::from_fn() docs) - #58239 (librustc_apfloat => 2018) - #58240 (librustc_errors => 2018) - #58241 (librustc_llvm => 2018) - #58242 (Document the one TyKind that isn't documented) Failed merges: - #58185 (Remove images' url to make it work even without internet connection) r? @ghost
Fixes #58121.