[llvm-dev] understanding llvm's codegen for function forwarding
Nicolai Hähnle via llvm-dev
llvm-dev at lists.llvm.org
Mon Nov 26 02:11:13 PST 2018
I'd assume -fomit-frame-pointer would make a difference.
Cheers,
Nicolai
On 23.11.18 20:49, Andrew Kelley via llvm-dev wrote:
> When compiling this LLVM IR with -O0 (no optimizations)
>
> define internal fastcc void @bar2(%Bar* nonnull sret) unnamed_addr #2 !dbg !74 {
> Entry:
> call fastcc void @bar(%Bar* sret %0), !dbg !79
> ret void, !dbg !81
> }
>
> why does this generate this?
>
> 0000000000000090 <bar2>:
> 90: 55 push %rbp
> 91: 48 89 e5 mov %rsp,%rbp
> 94: 48 83 ec 10 sub $0x10,%rsp
> 98: 48 89 f8 mov %rdi,%rax
> 9b: 48 89 45 f8 mov %rax,-0x8(%rbp)
> 9f: e8 0c 00 00 00 callq b0 <bar>
> a4: 48 8b 45 f8 mov -0x8(%rbp),%rax
> a8: 48 83 c4 10 add $0x10,%rsp
> ac: 5d pop %rbp
> ad: c3 retq
> ae: 66 90 xchg %ax,%ax
>
>
> instead of something like this?
>
> 0000000000000090 <bar2>:
> 9f: e8 0c 00 00 00 callq b0 <bar>
> ad: c3 retq
>
> when I add `musttail` to the IR it gives me this assembly:
>
> 00000000000000a0 <bar2>:
> a0: 55 push %rbp
> a1: 48 89 e5 mov %rsp,%rbp
> a4: 48 83 ec 10 sub $0x10,%rsp
> a8: 48 89 f8 mov %rdi,%rax
> ab: 48 89 45 f8 mov %rax,-0x8(%rbp)
> af: 48 83 c4 10 add $0x10,%rsp
> b3: 5d pop %rbp
> b4: e9 07 00 00 00 jmpq c0 <bar>
> b9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
>
> which does not have a call instruction but it has prologue that I
> would not expect.
>
> What's going on here? Is this something that can not really be
> improved without optimization passes?
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
More information about the llvm-dev
mailing list