https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94494
Uroš Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|WAITING |ASSIGNED Target Milestone|--- |9.4 Assignee|unassigned at gcc dot gnu.org |ubizjak at gmail dot com --- Comment #4 from Uroš Bizjak <ubizjak at gmail dot com> --- Confirmed, fails with -O2 -ftree-vectorize -m32 -msse -mno-sse2. The compiler generates SSE2 instruction with -msse. Backtrace: (gdb) bt #0 0x0000000001644c80 in gen_sse2_lshrv1ti3(rtx_def*, rtx_def*, rtx_def*) () at ./genrtl.h:39 #1 0x00000000013a493f in emit_reduc_half (i=128, src=0x7fffea97e870, dest=0x7fffea985f18) at /home/uros/git/gcc/gcc/config/i386/i386-expand.c:14870 #2 ix86_expand_reduc (fn=fn@entry=0x160ac80 <gen_smaxv4si3(rtx_def*, rtx_def*, rtx_def*)>, dest=dest@entry=0x7fffea985f00, in=in@entry=0x7fffea97e870) at /home/uros/git/gcc/gcc/config/i386/i386-expand.c:14977 #3 0x00000000016cec5d in gen_reduc_smax_scal_v4si (operand0=0x7fffea97e600, operand1=0x7fffea97e870) at /home/uros/git/gcc/gcc/config/i386/sse.md:2746 #4 0x0000000000eeb3e9 in maybe_expand_insn (ops=ops@entry=0x7fffffffd860, nops=nops@entry=2, icode=icode@entry=CODE_FOR_reduc_smax_scal_v4si) at /home/uros/git/gcc/gcc/optabs.c:7508 #5 expand_insn (icode=icode@entry=CODE_FOR_reduc_smax_scal_v4si, nops=nops@entry=2, ops=ops@entry=0x7fffffffd860) at /home/uros/git/gcc/gcc/optabs.c:7508 REDUC_SSE_SMINMAX_MODE mode iterator allows V4SI, V8HI and V16QI modes for SSE, but we have: case E_V16QImode: case E_V8HImode: case E_V4SImode: case E_V2DImode: d = gen_reg_rtx (V1TImode); tem = gen_sse2_lshrv1ti3 (d, gen_lowpart (V1TImode, src), GEN_INT (i / 2)); break; in i386-expand.c/emit_reduc_half. Patch in testing: --cut here-- diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 8f5902292c6..d978e2aa256 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -2733,8 +2733,8 @@ ;; Modes handled by reduc_sm{in,ax}* patterns. (define_mode_iterator REDUC_SSE_SMINMAX_MODE [(V4SF "TARGET_SSE") (V2DF "TARGET_SSE") - (V2DI "TARGET_SSE4_2") (V4SI "TARGET_SSE") (V8HI "TARGET_SSE") - (V16QI "TARGET_SSE")]) + (V4SI "TARGET_SSE2") (V8HI "TARGET_SSE2") (V16QI "TARGET_SSE2") + (V2DI "TARGET_SSE4_2")]) (define_expand "reduc_<code>_scal_<mode>" [(smaxmin:REDUC_SSE_SMINMAX_MODE --cut here--