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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2021-07-20
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Confirmed.

-Og:
  _13 = BIT_FIELD_REF <_12, 64, 0>;
  _4 = VEC_PERM_EXPR <_13, { 0, 0, 0, 0, 0, 0, 0, 0 }, { 3, 9, 10, 11, 12, 13,
14, 15 }>;
  _14 = BIT_FIELD_REF <_4, 8, 0>;


vs -O2:
  _14 = BIT_FIELD_REF <_12, 8, 24>;


Huh:

;; _4 = VEC_PERM_EXPR <_13, { 0, 0, 0, 0, 0, 0, 0, 0 }, { 3, 9, 10, 11, 12, 13,
14, 15 }>;


(insn 16 15 17 (set (reg:V8QI 95 [ _4 ])
        (vec_select:V8QI (reg:V16QI 98 [ _12 ])
            (parallel [
                    (const_int 0 [0])
                    (const_int 1 [0x1])
                    (const_int 2 [0x2])
                    (const_int 3 [0x3])
                    (const_int 4 [0x4])
                    (const_int 5 [0x5])
                    (const_int 6 [0x6])
                    (const_int 7 [0x7])
                ]))) "t5.c":11:10 -1
     (nil))

;;; Select the lower part aka _13

(insn 17 16 18 (set (reg:V8QI 112)
        (const_vector:V8QI [
                (const_int 0 [0]) repeated x8
            ])) "t5.c":11:10 -1
     (nil))

(insn 18 17 19 (set (reg:V8QI 95 [ _4 ])
        (reg:V8QI 112)) "t5.c":11:10 -1
     (nil))
;;; BUT reuse 95/_4 for the zero constant!!!!!!!!!!!!!!!

(insn 19 18 0 (set (reg:V8QI 95 [ _4 ])
        (vec_merge:V8QI (vec_duplicate:V8QI (vec_select:QI (reg:V8QI 95 [ _4 ])
                    (parallel [
                            (const_int 3 [0x3])
                        ])))
            (reg:V8QI 95 [ _4 ])
            (const_int 1 [0x1]))) "t5.c":11:10 -1
     (nil))

Reply via email to