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