We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
define i64 @foo(i64 %n) nounwind { entry: %buf = alloca i8, i64 %n, align 1 %r = call i64 @bar(i8* %buf, i64 %n, i64 %n, i64 %n, i64 %n) nounwind ret i64 %r } declare i64 @bar(i8* nocapture, i64, i64, i64, i64) nounwind
$ llc -mtriple=x86_64-win32 foo: pushq %rbp movq %rsp, %rbp subq $32, %rsp movq %rcx, %rdx leaq 15(%rdx), %rax andq $-16, %rax movq %rsp, %rcx subq %rax, %rcx ;;; @bar: 1st arg movq %rcx, %rsp subq $16, %rsp ;;; 40 (or aligned 48) bytes would be needed movq %rdx, 32(%rsp) ;;; it might be on %buf movq %rdx, %r8 movq %rdx, %r9 callq bar ;;; 32 bytes home area overlaps to %buf movq %rbp, %rsp popq %rbp ret
Even when @bar() has args less than 4, stack frame would be incorrect.
The text was updated successfully, but these errors were encountered:
Fixed in r124949. (chkstk issue is pending)
foo: pushq %rbp movq %rsp, %rbp movq %rcx, %rdx leaq 15(%rdx), %rax andq $-16, %rax movq %rsp, %rcx subq %rax, %rcx movq %rcx, %rsp subq $48, %rsp movq %rdx, 32(%rsp) movq %rdx, %r8 movq %rdx, %r9 callq bar movq %rbp, %rsp popq %rbp ret
Sorry, something went wrong.
___chkstk is now emitted in r128206.
mentioned in issue llvm/llvm-bugzilla-archive#9100
No branches or pull requests
Extended Description
define i64 @foo(i64 %n) nounwind {
entry:
%buf = alloca i8, i64 %n, align 1
%r = call i64 @bar(i8* %buf, i64 %n, i64 %n, i64 %n, i64 %n) nounwind
ret i64 %r
}
declare i64 @bar(i8* nocapture, i64, i64, i64, i64) nounwind
$ llc -mtriple=x86_64-win32
foo:
pushq %rbp
movq %rsp, %rbp
subq $32, %rsp
movq %rcx, %rdx
leaq 15(%rdx), %rax
andq $-16, %rax
movq %rsp, %rcx
subq %rax, %rcx ;;; @bar: 1st arg
movq %rcx, %rsp
subq $16, %rsp ;;; 40 (or aligned 48) bytes would be needed
movq %rdx, 32(%rsp) ;;; it might be on %buf
movq %rdx, %r8
movq %rdx, %r9
callq bar ;;; 32 bytes home area overlaps to %buf
movq %rbp, %rsp
popq %rbp
ret
Even when @bar() has args less than 4, stack frame would be incorrect.
The text was updated successfully, but these errors were encountered: