[Bug ipa/65236] [5 Regression]: IPA ICF causes miscompilation in Chromium built with -Os

2015-03-02 Thread rguenth at gcc dot gnu.org
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

2015-02-28 Thread hubicka at gcc dot gnu.org
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

2015-02-28 Thread hubicka at gcc dot gnu.org
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

2015-02-27 Thread marxin at gcc dot gnu.org
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

2015-02-27 Thread marxin at gcc dot gnu.org
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

2015-02-27 Thread marxin at gcc dot gnu.org
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

2015-02-27 Thread hubicka at gcc dot gnu.org
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

2015-02-27 Thread hubicka at gcc dot gnu.org
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.