https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98685
Bug ID: 98685 Summary: [11 Regression] ICE verify_flow_info failed since r11-6649-g285fa338b06b804e Product: gcc Version: 11.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: marxin at gcc dot gnu.org CC: rguenth at gcc dot gnu.org Target Milestone: --- Reduced from schily package: $ cat lockit.i char onelock_lock[16]; void write(void); void lockit(int count) { for (; count;) { int pid, i; char *p; for (i = 0, p = (char *)&pid; i < sizeof 0; i++) onelock_lock[i] = *p++; write(); } } $ gcc lockit.i -c -O3 -fdump-tree-slp=/dev/stdout ;; Function lockit (lockit, funcdef_no=0, decl_uid=1946, cgraph_uid=1, symbol_order=1) lockit.i: In function ‘lockit’: lockit.i:4:6: error: control flow in the middle of basic block 2 4 | void lockit(int count) { | ^~~~~~ lockit.i:4:6: error: control flow in the middle of basic block 2 lockit.i:4:6: error: true/false edge after a non-GIMPLE_COND in bb 2 lockit.i:4:6: error: true/false edge after a non-GIMPLE_COND in bb 2 during GIMPLE pass: slp dump file: /dev/stdout A SLP node is placed after a condition: <bb 2> [local count: 26541933]: if (count_8(D) != 0) _6 = VIEW_CONVERT_EXPR<vector(4) char>(pid_16(D)); _4 = _6;