[Bug other/90381] New test case gcc.dg/tree-ssa/pr88676-2.c fails with its introduction in r270934

2019-05-26 Thread segher at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90381

Segher Boessenkool  changed:

   What|Removed |Added

 CC||segher at gcc dot gnu.org

--- Comment #4 from Segher Boessenkool  ---
Are bitfields allocated right to left on all LE configs?

[Bug other/90381] New test case gcc.dg/tree-ssa/pr88676-2.c fails with its introduction in r270934

2019-05-08 Thread helijia at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90381

--- Comment #3 from Li Jia He  ---
Author: helijia
Date: Wed May  8 07:52:26 2019
New Revision: 271002

URL: https://gcc.gnu.org/viewcvs?rev=271002=gcc=rev
Log:
PR other/90381
* gcc.dg/tree-ssa/pr88676-2.c: Add 'target le' option to limit the
test case to run on the little endian machine.

Modified:
trunk/gcc/testsuite/ChangeLog
trunk/gcc/testsuite/gcc.dg/tree-ssa/pr88676-2.c

[Bug other/90381] New test case gcc.dg/tree-ssa/pr88676-2.c fails with its introduction in r270934

2019-05-08 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90381

--- Comment #2 from Richard Biener  ---
you can use the be or le target specifiers.

[Bug other/90381] New test case gcc.dg/tree-ssa/pr88676-2.c fails with its introduction in r270934

2019-05-08 Thread helijia at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90381

--- Comment #1 from Li Jia He  ---
Thanks for pointing this out.
I used the following code:

struct foo1 {
  int i:1;
};

int test1 (struct foo1 *x)
{
  if (x->i == 0)
return 1;
  else if (x->i == 1)
return 1;
  return 0;
}

to dumped the pass output in front of phiopt1
on be machine:

test1 (struct foo1 * x)
{
  unsigned char _1;
  int _3;
  signed char _6;

   :
  _1 = BIT_FIELD_REF <*x_5(D), 8, 0>;
  _6 = (signed char) _1;
  if (_6 >= 0)
goto ; [INV]
  else
goto ; [INV]

   :
  // predicted unlikely by early return (on trees) predictor.

   :
  # _3 = PHI <1(3), 0(2)>
  return _3;

}

but, on le machine:

test1 (struct foo1 * x)
{
  unsigned char _1;
  unsigned char _2;
  int _3;

   :
  _1 = BIT_FIELD_REF <*x_5(D), 8, 0>;
  _2 = _1 & 1;
  if (_2 == 0)
goto ; [INV]
  else
goto ; [INV]

   :
  // predicted unlikely by early return (on trees) predictor.

   :
  # _3 = PHI <1(3), 0(2)>
  return _3;

}
‘’’
The difference is the comparison code in the if statement, however
two_value_replacement will only optimize for EQ_EXPR or NE_EXPR.
Can we limit this test case to the le machine ? Thanks.