jh@ryzen4:~/gcc/build4/stage1-gcc> cat b.c /* PR tree-optimization/106433 */ int m, *p; __attribute__ ((simd)) int bar (int x) { if (x) { if (m < 1) for (m = 0; m < 1; ++m) ++x; p = &x; for (;;) ++m; } return 0; } __attribute__ ((simd)) int foo (int x) { bar (x); return 0; } jh@ryzen4:~/gcc/build4/stage1-gcc> ./xgcc -B ./ -O2 b.c -fno-tree-vrp during RTL pass: expand b.c: In function ‘foo.simdclone.3’: b.c:23:2: internal compiler error: in expand_MASK_CALL, at internal-fn.cc:5013 23 | bar (x); | ^~~~~~~ 0x12db307 expand_MASK_CALL(internal_fn, gcall*) ../../gcc/internal-fn.cc:5013 0x12daa47 expand_internal_call(internal_fn, gcall*) ../../gcc/internal-fn.cc:4920 0x12daa72 expand_internal_call(gcall*) ../../gcc/internal-fn.cc:4928 0xf7637e expand_call_stmt ../../gcc/cfgexpand.cc:2737 0xf7a5a8 expand_gimple_stmt_1 ../../gcc/cfgexpand.cc:3880 0xf7ac2c expand_gimple_stmt ../../gcc/cfgexpand.cc:4044 0xf82d6f expand_gimple_basic_block ../../gcc/cfgexpand.cc:6100 0xf85322 execute ../../gcc/cfgexpand.cc:6835 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions.
Confirmed.
Confirmed. We're not marking the .MASK_CALL as relevant which is possibly OK since 'bar' is const. But we also fail to elide it. /* For if-conversion of inbranch SIMD clones. */ DEF_INTERNAL_FN (MASK_CALL, ECF_NOVOPS, NULL) ECF_NOVOPS is a bit heavy. We're "removing" scalar stmts in some places but do not care about not relevant ones. I have a patch.
The master branch has been updated by Richard Biener <rguenth@gcc.gnu.org>: https://gcc.gnu.org/g:57c028acbec4f7b594e6b024e02d6c799b51e03d commit r14-5627-g57c028acbec4f7b594e6b024e02d6c799b51e03d Author: Richard Biener <rguenther@suse.de> Date: Mon Nov 20 11:12:43 2023 +0100 tree-optimization/112618 - unused .MASK_CALL We have to make sure to remove unused .MASK_CALL internal function calls after vectorization. PR tree-optimization/112618 * tree-vect-loop.cc (vect_transform_loop_stmt): For not relevant and unused .MASK_CALL make sure we remove the scalar stmt. * gcc.dg/pr112618.c: New testcase.
The releases/gcc-13 branch has been updated by Richard Biener <rguenth@gcc.gnu.org>: https://gcc.gnu.org/g:016ca45dcba40ed73869caf37f09023fa7fca5f8 commit r13-8291-g016ca45dcba40ed73869caf37f09023fa7fca5f8 Author: Richard Biener <rguenther@suse.de> Date: Mon Nov 20 11:12:43 2023 +0100 tree-optimization/112618 - unused .MASK_CALL We have to make sure to remove unused .MASK_CALL internal function calls after vectorization. PR tree-optimization/112618 * tree-vect-loop.cc (vect_transform_loop_stmt): For not relevant and unused .MASK_CALL make sure we remove the scalar stmt. * gcc.dg/pr112618.c: New testcase. (cherry picked from commit 57c028acbec4f7b594e6b024e02d6c799b51e03d)
Fixed.