[Bug tree-optimization/70427] New: autofdo bootstrap generates wrong code

andi-gcc at firstfloor dot org gcc-bugzilla@gcc.gnu.org
Mon Mar 28 01:05:00 GMT 2016


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70427

            Bug ID: 70427
           Summary: autofdo bootstrap generates wrong code
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: andi-gcc at firstfloor dot org
  Target Milestone: ---

I've been working on building gcc with an autofdo bootstrap.

Currently I always run into an crash while rebuilding tree.c with the stage2
compiler and the autofdo information 

Looking at the code it is clearly miscompiled in ipa_profile_generate_summary:

                        struct cgraph_edge * e = node->get_edge (stmt);
                        if (e && !e->indirect_unknown_callee)
                          continue;


   0x000000000093bb16 <+326>:   callq  0x7be530
<_ZN11cgraph_node8get_edgeEP6gimple> 
   0x000000000093bb1b <+331>:   test   %rax,%rax           # check for NUULL
   0x000000000093bb1e <+334>:   mov    %rax,%r8
   0x000000000093bb21 <+337>:   je     0x93bb2d           
<_ZL28ipa_profile_generate_summaryv+349>
   0x000000000093bb23 <+339>:   testb  $0x2,0x60(%rax)
   0x000000000093bb27 <+343>:   je     0x93baa7
<_ZL28ipa_profile_generate_summaryv+215>
   0x000000000093bb2d <+349>:   mov    0x10(%r13),%rax     # go here because of
NULL
=> 0x000000000093bb31 <+353>:   mov    0x40(%r8),%rsi      # but we still
reference!

(gdb) p $r8
$4 = 0

The crash is on bb31 because r8 is NULL. The code checked the return value of
the call, but then references it afterwards before doing the continue.

Command line option:

cc1plus -fauto-profile=cc1plus.fda  -g -O2 tree.i

cc1plus.fda is at http://halobates.de/cc1plus.fda (too big to attach)


More information about the Gcc-bugs mailing list