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--

Reply via email to