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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2025-01-16
   Target Milestone|---                         |15.0
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
                 CC|                            |hongyuw at gcc dot gnu.org

--- Comment #1 from Uroš Bizjak <ubizjak at gmail dot com> ---
The compiler is trying to split:

(insn 15 14 16 2 (parallel [
            (set (mem/c:SI (plus:DI (reg/f:DI 19 frame)
                        (const_int -28 [0xffffffffffffffe4])) [1 num.low+0 S4
A32])
                (ior:SI (lshiftrt:SI (reg:SI 120)
                        (subreg:QI (reg:SI 98 [ num_rshift_n.0_1 ]) 0))
                    (ashift:SI (subreg:SI (reg:DI 122 [ num ]) 0)
                        (minus:QI (const_int 32 [0x20])
                            (subreg:QI (reg:SI 98 [ num_rshift_n.0_1 ]) 0)))))
            (clobber (reg:CC 17 flags))
        ]) "pr118510.c":9:37 1165 {*x86_shrd_ndd_2}
     (nil))

and manages to create one strange RTX:

(insn 39 38 16 2 (parallel [
            (set (reg:SI 124)
                (ior:SI (lshiftrt:SI (reg:SI 120)
                        (and:QI (subreg:QI (reg:SI 98 [ num_rshift_n.0_1 ]) 0)
                            (const_int 31 [0x1f])))
                    (subreg:SI (ashift:DI (zero_extend:DI (subreg:SI (reg:DI
122 [ num ]) 0))
                            (minus:QI (const_int 32 [0x20])
                                (and:QI (subreg:QI (reg:SI 98 [
num_rshift_n.0_1 ]) 0)
                                    (const_int 31 [0x1f])))) 0)))
            (clobber (reg:CC 17 flags))
            (set (mem/c:SI (plus:DI (reg/f:DI 19 frame)
                        (const_int -28 [0xffffffffffffffe4])) [1 num.low+0 S4
A32])
                (reg:SI 124))
        ]) "pr118510.c":9:37 -1
     (nil))

The problem is in the split RTX of:

(define_insn_and_split "*x86_shrd_ndd_2"
  [(set (match_operand:SI 0 "nonimmediate_operand")
        (ior:SI (lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand")
                           (match_operand:QI 3 "nonmemory_operand"))
                (ashift:SI (match_operand:SI 2 "register_operand")
                           (minus:QI (const_int 32) (match_dup 3)))))
   (clobber (reg:CC FLAGS_REG))]
  "TARGET_APX_NDD

CC author.

Reply via email to