I'm looking a failure for m32c-elf (-mcpu=m32c) in
gcc.c-torture/execute/20000412-6.c.

I've narrowed it down to a transformation done in 107t.ivopts.

In 104t.cunroll: (tmp_9 and tmp_16 are 24-bit pointer values):

  tmp_9 = tmp_16 + 2;
  if (bufend_6(D) > tmp_9)

but in 107t.ivopts:

  tmp_9 = tmp_16 + 2;
  D.1229_1 = (unsigned int) tmp_9;
  tmp_13 = (short unsigned int *) D.1229_1;
  if (bufend_6(D) > tmp_13)

The problem is that tmp_9 is a 24-bit value, and casting it to
unsigned int (16 bits) truncates off eight of the bits.  Why are we
casting pointers to integer values at all?  Is there any way to stop
ivopts from performing this truncation?

Reply via email to