This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/55018] [4.7/4.8 Regression] CDDCE pass is too aggressive sometimes with infinite loops and with some functions


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55018

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
      Known to work|                            |4.4.5
           Keywords|                            |wrong-code
   Last reconfirmed|                            |2012-10-22
                 CC|                            |pinskia at gcc dot gnu.org
     Ever Confirmed|0                           |1
            Summary|CDDCE pass is too           |[4.7/4.8 Regression] CDDCE
                   |aggressive sometimes with   |pass is too aggressive
                   |infinite loops and with     |sometimes with infinite
                   |some builtin functions      |loops and with some
                   |                            |functions
   Target Milestone|---                         |4.7.3
      Known to fail|                            |4.7.0, 4.8.0

--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> 2012-10-22 08:54:43 UTC ---
(In reply to comment #5)
> It does if it takes occurrence as a parameter:

ok, I can now make a testcase which should exit but currently does not.
A Runtime testcase which works at -O1, -O2, and -O0 but goes into an infinite
loop at -O3:
void myFunc(int) __attribute__((noinline,noclone));
void myFunc(int a)
{
  if (a==100)
    __builtin_exit(0);
}

void Sender_signal(int Connect) __attribute__((noinline,noclone));
void Sender_signal(int Connect)
{
    int State = 3;
    int occurrence = 0;

    if (Connect) {
        State = 0;
    }

 start:

    if (Connect) {
        goto start;
    } 
    occurrence++;

    if(State != 2){
        myFunc(occurrence);
    }
    goto start;

}

int main(void)
{
  Sender_signal(0);
  return 0;
}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]