serge-sans-paille added a subscriber: eli.friedman. serge-sans-paille added a comment.
@efriedma the free probe algorithm requires more testing, and I'd like to take into account memset and memcpy as free probes too. To showcase this algorithm, consider the following LLVM bitcode: define i32 @foo() local_unnamed_addr { %a = alloca i32, i64 2000, align 16 %b = getelementptr inbounds i32, i32* %a, i64 1198 store volatile i32 1, i32* %b %c = load volatile i32, i32* %a ret i32 %c } when compiled with `llc` it outputs the following assembly: foo: # @foo subq $7880, %rsp # imm = 0x1EC8 movl $1, 4664(%rsp) movl -128(%rsp), %eax addq $7880, %rsp # imm = 0x1EC8 retq When `probe-stack` is set to `inline-asm` it outputs foo: # @foo subq $4096, %rsp # imm = 0x1000 movl $1, 880(%rsp) subq $3784, %rsp # imm = 0xEC8 movq $0, (%rsp) movl -128(%rsp), %eax addq $7880, %rsp # imm = 0x1EC8 retq The stack allocation is split in two, but only one MOV is added, the first one is what I call a free probe. Turns out we could only use natural probes here, I need to implement that :-) As a comparison, setting `probe-stack` to a random function name like `__probe_stack` outputs the following: foo: # @foo movl $8008, %eax # imm = 0x1F48 callq __probe_stack subq %rax, %rsp movl $1, 4792(%rsp) movl (%rsp), %eax addq $8008, %rsp # imm = 0x1F48 retq which requires runtime support (to provide `__stack_probe`), and a function call overhead, while ideally just an extra `sub %rsp` would be needed. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D68720/new/ https://reviews.llvm.org/D68720 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits