[Bug ipa/65236] [5 Regression]: IPA ICF causes miscompilation in Chromium built with -Os
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65236 Richard Biener rguenth at gcc dot gnu.org changed: What|Removed |Added Target Milestone|--- |5.0
[Bug ipa/65236] [5 Regression]: IPA ICF causes miscompilation in Chromium built with -Os
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65236 Jan Hubicka hubicka at gcc dot gnu.org changed: What|Removed |Added Status|NEW |RESOLVED Resolution|--- |FIXED --- Comment #7 from Jan Hubicka hubicka at gcc dot gnu.org --- Fixed.
[Bug ipa/65236] [5 Regression]: IPA ICF causes miscompilation in Chromium built with -Os
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65236 --- Comment #6 from Jan Hubicka hubicka at gcc dot gnu.org --- Author: hubicka Date: Sat Feb 28 20:32:15 2015 New Revision: 221077 URL: https://gcc.gnu.org/viewcvs?rev=221077root=gccview=rev Log: PR ipa/65236 * g++.dg/ipa/ipa-icf-6.C: New testcase. * cgraphunit.c (cgraph_node::expand_thunk): Enable return slot opt. Added: trunk/gcc/testsuite/g++.dg/ipa/ipa-icf-6.C Modified: trunk/gcc/ChangeLog trunk/gcc/cgraphunit.c trunk/gcc/testsuite/ChangeLog
[Bug ipa/65236] [5 Regression]: IPA ICF causes miscompilation in Chromium built with -Os
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65236 --- Comment #2 from Martin Liška marxin at gcc dot gnu.org --- Created attachment 34889 -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=34889action=edit RTL dumps with ICF
[Bug ipa/65236] [5 Regression]: IPA ICF causes miscompilation in Chromium built with -Os
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65236 --- Comment #1 from Martin Liška marxin at gcc dot gnu.org --- Created attachment 34888 -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=34888action=edit RTL dumps without ICF
[Bug ipa/65236] [5 Regression]: IPA ICF causes miscompilation in Chromium built with -Os
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65236 --- Comment #3 from Martin Liška marxin at gcc dot gnu.org --- There's generated assembly: 0045faa0 _ZNK6google8protobuf11MessageLite24SerializePartialAsStringEv: 45faa0:53 push %rbx 45faa1:48 89 fb mov%rdi,%rbx 45faa4:48 89 f7 mov%rsi,%rdi 45faa7:48 8d 43 10 lea0x10(%rbx),%rax 45faab:48 c7 43 08 00 00 00 movq $0x0,0x8(%rbx) 45fab2:00 45fab3:c6 43 10 00 movb $0x0,0x10(%rbx) 45fab7:48 89 de mov%rbx,%rsi 45faba:48 89 03 mov%rax,(%rbx) 45fabd:e8 0e ff ff ff callq 45f9d0 _ZNK6google8protobuf11MessageLite21AppendPartialToStringEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE 45fac2:84 c0test %al,%al 45fac4:75 0ejne45fad4 _ZNK6google8protobuf11MessageLite24SerializePartialAsStringEv+0x34 45fac6:48 8b 03 mov(%rbx),%rax 45fac9:48 c7 43 08 00 00 00 movq $0x0,0x8(%rbx) 45fad0:00 45fad1:c6 00 00 movb $0x0,(%rax) 45fad4:48 89 d8 mov%rbx,%rax 45fad7:5b pop%rbx 45fad8:c3 retq 45fad9:00 00add%al,(%rax) 45fadb:00 00add%al,(%rax) 45fadd:00 00add%al,(%rax) ... 0045fae0 _ZNK6google8protobuf11MessageLite17SerializeAsStringEv: 45fae0:53 push %rbx 45fae1:48 89 fb mov%rdi,%rbx 45fae4:48 83 ec 20 sub$0x20,%rsp 45fae8:48 89 e7 mov%rsp,%rdi 45faeb:e8 b0 ff ff ff callq 45faa0 _ZNK6google8protobuf11MessageLite24SerializePartialAsStringEv 45faf0:48 8b 04 24 mov(%rsp),%rax (marker) -- 45faf4:48 89 03 mov%rax,(%rbx) 45faf7:48 8b 44 24 08 mov0x8(%rsp),%rax 45fafc:48 89 43 08 mov%rax,0x8(%rbx) 45fb00:48 8b 44 24 10 mov0x10(%rsp),%rax 45fb05:48 89 43 10 mov%rax,0x10(%rbx) 45fb09:48 8b 44 24 18 mov0x18(%rsp),%rax 45fb0e:48 89 43 18 mov%rax,0x18(%rbx) 45fb12:48 83 c4 20 add$0x20,%rsp 45fb16:48 89 d8 mov%rbx,%rax 45fb19:5b pop%rbx 45fb1a:c3 retq 45fb1b:00 00add%al,(%rax) 45fb1d:00 00add%al,(%rax) Where I suspect a stack load/store instruction after returning from the call --
[Bug ipa/65236] [5 Regression]: IPA ICF causes miscompilation in Chromium built with -Os
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65236 Jan Hubicka hubicka at gcc dot gnu.org changed: What|Removed |Added Status|UNCONFIRMED |NEW Last reconfirmed||2015-02-27 CC||hubicka at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #4 from Jan Hubicka hubicka at gcc dot gnu.org --- One bug with thunks I am aware of is demonstrated by the following testcase: struct A { A() {ptr=b;} A(const A a) {ptr = b;} void test() { if (ptr != b) __builtin_abort ();} int b; int *ptr; }; A test1(A a) { a.test(); return a; } A test2(A a) { a.test(); return a; } __attribute__ ((noinline)) void test_me (A (*t)(A)) { struct A a, b=t(a); b.test (); } int main() { test_me (test1); test_me (test2); return 0; } we turn test2 into a thunk but after inlining the thunk we end up with producing extrra copy of return value A.
[Bug ipa/65236] [5 Regression]: IPA ICF causes miscompilation in Chromium built with -Os
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65236 --- Comment #5 from Jan Hubicka hubicka at gcc dot gnu.org --- This is the code generated for thunk: _Z5test11A: .LFB12: .cfi_startproc pushq %rbx .cfi_def_cfa_offset 16 .cfi_offset 3, -16 movq%rdi, %rbx subq$16, %rsp .cfi_def_cfa_offset 32 movq%rsp, %rdi call_Z5test21A movq(%rsp), %rax movq%rax, (%rbx) movq8(%rsp), %rax movq%rax, 8(%rbx) addq$16, %rsp .cfi_def_cfa_offset 16 movq%rbx, %rax popq%rbx .cfi_def_cfa_offset 8 ret which is wrong; the extra copy should not exist.