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

            Bug ID: 80054
           Summary: ICE in verify_ssa with -O3
                    -march=broadwell/skylake-avx512
           Product: gcc
           Version: 7.0.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vsevolod.livinskij at frtk dot ru
  Target Milestone: ---

Created attachment 40978
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40978&action=edit
Reproducer.

ICE with -O3 -march=broadwell (and skylake-avx512). Everything works fine with
other optimization levels.

Error:
>$ g++ -O3 -march=broadwell -c repr.cpp
repr.cpp: In function ‘void foo()’:
repr.cpp:17:6: error: definition in block 7 does not dominate use in block 6
 void foo() {
      ^~~
for SSA_NAME: _133 in statement:
slsr_142 = PHI <_133(6), _133(16)>
PHI argument
_133
for PHI node
slsr_142 = PHI <_133(6), _133(16)>
repr.cpp:17:6: internal compiler error: verify_ssa failed
0xf84ad3 verify_ssa(bool, bool)
        /home/vsevolod/workspace/gcc-dev/trunk/gcc/tree-ssa.c:1184
0xc98ea7 execute_function_todo
        /home/vsevolod/workspace/gcc-dev/trunk/gcc/passes.c:1973
0xc99e0b execute_todo
        /home/vsevolod/workspace/gcc-dev/trunk/gcc/passes.c:2016

Reproducer:
extern short var_2;
extern short var_4;
extern const bool var_32;
extern short var_36;
extern const bool var_37;
extern bool var_46;
extern unsigned int var_47;
extern short var_49;
extern unsigned int var_56;
extern unsigned int var_62;
extern unsigned int var_65;
extern bool var_831;
extern unsigned int var_843;
extern short var_846;
extern short var_889;

void foo() {
    if (var_36 * var_37)
        var_831 = var_56 = 0;
    else
        var_65 = 0;

    if (var_46)
        var_843 = 0;

    var_846 = 0;

    if ((var_4 == 0) >> (var_32 | -(var_37 < var_46 || var_36)) + 8)
        var_49 = 2032651381 * bool(var_2 * var_37);
    else {
        var_62 = 0;
        var_47 = (var_46 || var_36) * (var_2 * var_37);
    }

    var_889 = bool(var_2 * var_37);
}

GCC version:
gcc version 7.0.1 (today's trunk)

Reply via email to