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

--- Comment #4 from JuzheZhong <juzhe.zhong at rivai dot ai> ---
After reproducing the ICE.

I confirm the root cause is because we enable vec_extract for mask:

;; -------------------------------------------------------------------------
;; This extracts a bit (via QImode) from a bitmask vector.
;; -------------------------------------------------------------------------
(define_expand "vec_extract<mode>qi"
  [(set (match_operand:QI         0 "register_operand")
     (vec_select:QI
       (match_operand:VB          1 "register_operand")
       (parallel
         [(match_operand          2 "nonmemory_operand")])))]


The ICE happens optimized IR is as follows:

_68 = BIT_FIELD_REF <mask__25.17_66, 1, POLY_INT_CST [3, 4]>;

can_align_p return false for POLY_INT_CST [3, 4] since the alignment require
multipe of 8:

force_align_down_and_div (X, BITS_PER_UNIT) -> BITS_PER_UNIT = 8.


It's ovbious POLY_INT_CST [3, 4] is definitely not aligned with 8.


I have no idea how to fix it.

CCing Robin who enable mask bit extraction should know much better than me.

And CCing Richard B and Richard S may give us some useful suggestions.

Thanks.

Reply via email to