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

Uroš Bizjak <ubizjak at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2018-11-15
     Ever confirmed|0                           |1

--- Comment #1 from Uroš Bizjak <ubizjak at gmail dot com> ---
Confirmed.

./cc1 -O2 -m32 -march=skylake-avx512 -mfpmath=both ffv1enc.i

(gdb) bt
#0  internal_error (gmsgid=gmsgid@entry=0x1d7c231 "in %s, at %s:%d") at
/home/uros/gcc-svn/trunk/gcc/diagnostic.c:1500
#1  0x00000000007705c9 in fancy_abort (file=file@entry=0x1b34318
"/home/uros/gcc-svn/trunk/gcc/config/i386/sync.md", 
    line=line@entry=1762, function=function@entry=0x1b379c0
<add_clobbers(rtx_def*, int)::__FUNCTION__> "add_clobbers")
    at /home/uros/gcc-svn/trunk/gcc/diagnostic.c:1572
#2  0x00000000013311dc in add_clobbers (pattern=pattern@entry=0x7fffefa76a30,
insn_code_number=insn_code_number@entry=1266)
    at /home/uros/gcc-svn/trunk/gcc/config/i386/sync.md:1762
#3  0x000000000146f7c2 in recog_for_combine_1 (pnewpat=0x7fffffffcdd0,
insn=0x7ffff091dd80, pnotes=0x7fffffffce20)
    at /home/uros/gcc-svn/trunk/gcc/combine.c:11451
#4  0x00000000014704df in recog_for_combine
(pnewpat=pnewpat@entry=0x7fffffffcdd0, insn=insn@entry=0x7ffff091dd80, 
    pnotes=pnotes@entry=0x7fffffffce20) at
/home/uros/gcc-svn/trunk/gcc/combine.c:11651
#5  0x0000000001483ecd in try_combine (i3=0x7ffff091dd80, i2=<optimized out>,
i1=0x0, i0=0x0, 

The problematic part is in combine, where:

#4  0x00000000014704df in recog_for_combine
(pnewpat=pnewpat@entry=0x7fffffffcdd0, insn=insn@entry=0x7ffff091dd80, 
    pnotes=pnotes@entry=0x7fffffffce20) at
/home/uros/gcc-svn/trunk/gcc/combine.c:11651
11651     int insn_code_number = recog_for_combine_1 (pnewpat, insn, pnotes);

(gdb) p debug_rtx (insn)
(insn 1576 1575 1577 194 (parallel [
            (set (reg:V4SI 909)
                (subreg:V4SI (mem:DI (plus:SI (reg/f:SI 244 [ _206 ])
                            (reg:SI 1143)) [9 *_206 S8 A32]) 0))
            (clobber (scratch:V4SI))
        ]) "src/libavcodec/ffv1enc.c":853:23 1266 {movdi_to_sse}
     (nil))

(gdb) down
#3  0x000000000146f7c2 in recog_for_combine_1 (pnewpat=0x7fffffffcdd0,
insn=0x7ffff091dd80, pnotes=0x7fffffffce20)
    at /home/uros/gcc-svn/trunk/gcc/combine.c:11451
11451         add_clobbers (newpat, insn_code_number);

(gdb) p debug_rtx (newpat)
(parallel [
        (set (reg:V4SI 909)
            (subreg:V4SI (mem:DI (plus:SI (reg/f:SI 244 [ _206 ])
                        (reg:SI 1143)) [9 *_206 S8 A32]) 0))
        (nil)
    ])
(gdb) p insn_code_number
$12 = 1266

The relevant pattern is defined as:

(define_insn_and_split "movdi_to_sse"
  [(parallel
    [(set (match_operand:V4SI 0 "register_operand" "=?x,x")
          (subreg:V4SI (match_operand:DI 1 "nonimmediate_operand" "r,m") 0))
     (clobber (match_scratch:V4SI 2 "=&x,X"))])]
  "!TARGET_64BIT && TARGET_SSE2 && TARGET_INTER_UNIT_MOVES_TO_VEC"
  "#"
  "&& reload_completed"
  [(const_int 0)]

But for some reason isn't listed in generated add_clobbers in insn-emit.c. Note
that there is no "case 1266:" in the switch, although there is:

    case 4852:
    case 4851:
    case 4836:
    case 4835:
    case 4820:
    case 4819:
    case 4804:
    case 4803:
      XVECEXP (pattern, 0, 1) = gen_rtx_CLOBBER (VOIDmode,
        gen_rtx_SCRATCH (V4SImode));
      break;

It doesn't look like a target problem to me.

Reply via email to