Hi Jakub, On 30 Mar 00:36, Jakub Jelinek wrote: > Hi! > > As the testcase shows, we ICE with -mavx512f -ffloat-store, because > at -O0 during expansion the destination is MEM, and the corresponding dup > operand is some pseudo. There are *_mask patterns that have just > register_operand / =v for the desination and vector_move_operand / 0C > for the corresponding dup operand (but this doesn't apply when the > destination is MEM), and then *_maskm patterns, that have > memory_operand / =m and corresponding dup operand memory_operand / 0, > but also requires rtx_equal_p between them in the condition, so that > doesn't match either. > The expanders have weirdo: > if (MEM_P (operands[0]) && GET_CODE (operands[3]) == CONST_VECTOR) > operands[0] = force_reg (<ssequartermode>mode, operands[0]); > which can't really ever work, because the expander's caller expects > the output to be stored in the original operands[0], but that is not > where it stores it. Furthermore, force_reg makes no sense for the > output operand. > > The following patch should fix that, bootstrapped/regtested on x86_64-linux > and i686-linux, ok for trunk? Patch is OK for trunk.
-- Thanks, K