Hi, all

I do the research of min max instructions recently. I find it is related with 
phiopt.

case1:
int foo(short a ,short b)
{
  if (a < b)
    a = b;  
  return a;
}

It is successed in pass phiopt1(-O2 with gcc 4.7.0). The MAX_EXPR can be 
generated.

foo (short int a, short int b)
{
  int D.2094;

<bb 2>:
  a_9 = MAX_EXPR <a_2(D), b_3(D)>;
  D.2094_5 = (int) a_9;
  return D.2094_5;

} 

But when I do the test for a case with a little change, it is failed to 
generate MAX_EXPR in phiopt1.
The failed case2 :
int foo(short a ,short b)
{
  int c;
  if (a < b)
    a = b; 
  
  c = *(int *)&a;
  return c;
}

I find it is because of the esra pass failed to generate PHI NODE.
Dump of phifail.c.027t.esra:
foo (short int a, short int b)
{
  int c;
  short int a$0;

<bb 2>:
  a$0_1 = a;
  if (a$0_1 < b_2(D))
    goto <bb 3>;
  else
    goto <bb 4>;

<bb 3>:
  a = b_2(D);

<bb 4>:
  c_4 = MEM[(int *)&a];
  c_5 = c_4;
  return c_5;

}

Why it is failed and if there's a way to make it work?
Please give some help, thanks.
                                                 
                                                 Yang Yueming.

Reply via email to