This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug ipa/66616] [4.9/5/6 regression] fipa-cp-clone ignores thunk
- From: "jamborm at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 16 Dec 2015 16:06:34 +0000
- Subject: [Bug ipa/66616] [4.9/5/6 regression] fipa-cp-clone ignores thunk
- Auto-submitted: auto-generated
- References: <bug-66616-4 at http dot gcc dot gnu dot org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66616
--- Comment #16 from Martin Jambor <jamborm at gcc dot gnu.org> ---
(In reply to H.J. Lu from comment #13)
> I got
>
> FAIL: g++.dg/ipa/pr66616.C -std=gnu++11 execution test
> FAIL: g++.dg/ipa/pr66616.C -std=gnu++14 execution test
> FAIL: g++.dg/ipa/pr66616.C -std=gnu++98 execution test
>
> on trunk/x86-64.
Ugh, it seems that with -m32, the clone and its artificial thunks use
a different calling convention than their caller.
With -fno-ipa-cp -fno-inline, the generated assembly for the original
thunk is:
_ZThn12_N1B3fooEi:
.LFB20:
.cfi_startproc
subl $12, 4(%esp)
jmp .LTHUNK0
.cfi_endproc
and the method that IPA-CP would choose to clone also accesses
arguments on the stack.
Whereas with only -fno-inline, the generated assembly for the method
and its artificial thunk is:
_ZN1B3fooEi.constprop.1:
.LFB20:
.cfi_startproc
movl 16(%eax), %eax
movl %eax, _ZL2go
ret
_ZThn12_N1B3fooEi.artificial_thunk.2:
.LFB23:
.cfi_startproc
subl $12, %eax
jmp _ZN1B3fooEi.constprop.1
But in both cases, the caller of the thunk (main), attempts to pass
the argument on the stack.
Honza, do you know how is the calling convention determined at the
caller side? Do we need to change something in gimple for expansion
to take a hint?