Bug 87759 - [8 Regression] ICE in lra_assign, at lra-assigns.c:1624, or ICE: Maximum number of LRA assignment passes is achieved (30), or compile-time hog
Summary: [8 Regression] ICE in lra_assign, at lra-assigns.c:1624, or ICE: Maximum numb...
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: rtl-optimization (show other bugs)
Version: 9.0
: P3 normal
Target Milestone: 8.3
Assignee: Not yet assigned to anyone
URL:
Keywords: compile-time-hog, ice-on-invalid-code, ra
Depends on:
Blocks:
 
Reported: 2018-10-26 04:10 UTC by Arseny Solokha
Modified: 2018-12-21 23:58 UTC (History)
2 users (show)

See Also:
Host:
Target: x86_64-pc-linux-gnu
Build:
Known to work:
Known to fail:
Last reconfirmed: 2018-10-26 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Arseny Solokha 2018-10-26 04:10:58 UTC
1.

gcc-9.0.0-alpha20181021 snapshot (r265361) ICEs when compiling the following snippet w/ -O2 (-O3, -Ofast) -fschedule-insns -fselective-scheduling -ftrapv -fno-dce -fno-expensive-optimizations -fno-ipa-ra -fno-tree-dce -fno-tree-ter:

int cc;

void
rc (__int128 *oi)
{
  __int128 qz = (__int128)2 << cc;

  if (qz != 0)
    {
      if (cc != 0)
        {
          __int128 zp = 1;

          for (;;)
            {
              unsigned __int128 *ar = &cc;
              int y5;

              if (oi != 0)
                {
 y3:
                  zp = *oi + *ar;
                }

              y5 = (cc + 1) == ((*ar /= *oi) << ((zp >>= 128) / cc));
              qz += !!y5 ? 1 : qz == (*ar ^ zp + 1);
              ++*oi;
            }
        }
      else
        ++qz;
    }

  goto y3;
}

% x86_64-pc-linux-gnu-gcc-9.0.0-alpha20181021 -O2 -fschedule-insns -fselective-scheduling -ftrapv -fno-dce -fno-expensive-optimizations -fno-ipa-ra -fno-tree-dce -fno-tree-ter -w -c alqzfpag.c
during RTL pass: reload
alqzfpag.c: In function 'rc':
alqzfpag.c:35:1: internal compiler error: in lra_assign, at lra-assigns.c:1624
   35 | }
      | ^
0xb582d9 lra_assign(bool&)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/lra-assigns.c:1624
0xb5319d lra(_IO_FILE*)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/lra.c:2508
0xb0b131 do_reload
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/ira.c:5469
0xb0b131 execute
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/ira.c:5653

2.

Removing -fno-ipa-ra from the command line above yields the following:

% x86_64-pc-linux-gnu-gcc-9.0.0-alpha20181021 -O2 -fschedule-insns -fselective-scheduling -ftrapv -fno-dce -fno-expensive-optimizations -fno-tree-dce -fno-tree-ter -w -c alqzfpag.c
during RTL pass: reload
alqzfpag.c: In function 'rc':
alqzfpag.c:35:1: internal compiler error: Maximum number of LRA assignment passes is achieved (30)

   35 | }
      | ^
0xb582c0 lra_assign(bool&)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/lra-assigns.c:1669
0xb5319d lra(_IO_FILE*)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/lra.c:2508
0xb0b131 do_reload
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/ira.c:5469
0xb0b131 execute
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20181021/work/gcc-9-20181021/gcc/ira.c:5653

3.

gcc 8.2 takes indefinite time to compile the testcase w/ either set of command line options.
Comment 1 Martin Liška 2018-10-26 07:41:35 UTC
1: Confirmed, the ICE started with r255395 which is probably just an exposure.
Comment 2 Vladimir Makarov 2018-12-14 23:54:32 UTC
  I've started to work on it.  The patch will be probably ready on Monday or Tuesday.
Comment 3 Vladimir Makarov 2018-12-18 21:20:47 UTC
Author: vmakarov
Date: Tue Dec 18 21:20:16 2018
New Revision: 267244

URL: https://gcc.gnu.org/viewcvs?rev=267244&root=gcc&view=rev
Log:
2018-12-18  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-optimization/87759
	* lra-assigns.c (lra_split_hard_reg_for): Recalculate
	non_reload_pseudos.

2018-12-18  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-optimization/87759
	* gcc.target/i386/pr87759.c: New.


Added:
    trunk/gcc/testsuite/gcc.target/i386/pr87759.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/lra-assigns.c
    trunk/gcc/testsuite/ChangeLog
Comment 4 Jakub Jelinek 2018-12-18 21:49:44 UTC
Author: jakub
Date: Tue Dec 18 21:48:59 2018
New Revision: 267245

URL: https://gcc.gnu.org/viewcvs?rev=267245&root=gcc&view=rev
Log:
	PR rtl-optimization/87759
	* gcc.target/i386/pr87759.c: Require int128 effective target.

Modified:
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.target/i386/pr87759.c
Comment 5 Jeffrey A. Law 2018-12-21 23:58:32 UTC
Fixed by Vlad's patch on the trunk.