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

            Bug ID: 84112
           Summary: [8 Regression] powerpc64le ICE in LRA on openjdk
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jakub at gcc dot gnu.org
  Target Milestone: ---

The following testcase ICEs with -mcpu=power8 -O3 -fstack-protector-strong
-fpic on powerpc64le-linux with:
rh1539812.i: In function ‘foo’:
rh1539812.i:30:1: internal compiler error: in lra_set_insn_recog_data, at
lra.c:998
 }
 ^
0xd2da3d lra_set_insn_recog_data(rtx_insn*)
        ../../gcc/lra.c:996
0xd2b6c5 lra_get_insn_recog_data
        ../../gcc/lra-int.h:491
0xd2f70b lra_update_insn_regno_info(rtx_insn*)
        ../../gcc/lra.c:1622
0xd2fcb1 lra_push_insn_1
        ../../gcc/lra.c:1773
0xd2fce4 lra_push_insn(rtx_insn*)
        ../../gcc/lra.c:1781
The instruction in question is:
(insn 1791 1790 1241 3 (set (reg:DI 1769)
        (and:DI (plus:DI (reg:DI 1768)
                (reg:DI 1594))
            (const_int -16 [0xfffffffffffffff0]))) -1
     (nil))

char *b;
int c, d, e, f;

void
foo (char *h, int k, int l, int m, int j, int q)
{
  char *i = b;
  int n = d;
  int s = e;
  while (c)
    {
      for (; j <= 0; j += 12)
        {
          i[j] = n & k - h[j] >> 31 | q & ~(k - h[j] >> 31);
          i[j + 1] = n & l - h[j + 1] >> 31 | q & ~(l - h[j + 1] >> 31);
          i[j + 2] = n & m - h[j + 2] >> 31 | s & ~(m - h[j + 2] >> 31);
          i[j + 3] = n & k - h[j + 3] >> 31 | q & ~(k - h[j + 3] >> 31);
          i[j + 4] = n & l - h[j + 4] >> 31 | q & ~(l - h[j + 4] >> 31);
          i[j + 5] = n & m - h[j + 5] >> 31 | s & ~(m - h[j + 5] >> 31);
          i[j + 6] = n & k - h[j + 6] >> 31 | q & ~(k - h[j + 6] >> 31);
          i[j + 7] = n & l - h[j + 7] >> 31 | q & ~(l - h[j + 7] >> 31);
          i[j + 8] = n & m - h[j + 8] >> 31 | s & ~(m - h[j + 8] >> 31);
          i[j + 9] = n & k - h[j + 9] >> 31 | q & ~(k - h[j + 9] >> 31);
          i[j + 10] = n & l - h[j + 10] >> 31 | q & ~(l - h[j + 10] >> 31);
          i[j + 11] = n & m - h[j + 11] >> 31 | s & ~(m - h[j + 11] >> 31);
        }
      while (j < f)
        ;
    }
}

Reply via email to