On Fri, Apr 22, 2016 at 4:19 PM, H.J. Lu <hjl.to...@gmail.com> wrote: > On Fri, Apr 22, 2016 at 5:11 AM, Uros Bizjak <ubiz...@gmail.com> wrote: >> On Thu, Apr 21, 2016 at 10:58 PM, H.J. Lu <hjl.to...@gmail.com> wrote: >> >>> Here is the updated patch with my standard_sse_constant_p change and >>> your SSE/AVX pattern change. I didn't include your >>> standard_sse_constant_opcode since it didn't compile nor is needed >>> for this purpose. >> >> H.J., >> >> please test the attached patch that finally rewrites and improves SSE >> constants handling. >> >> This is what I want to commit, a follow-up patch will further clean >> standard_sse_constant_opcode wrt TARGET_AVX512VL. >> > > It doesn't address my problem which is "Allow all 1s of integer as > standard SSE constants". The key here is "integer". I'd like to use > SSE/AVX store TI/OI/XI integers with -1.
Yes, my patch *should* work for this. Please note that all_ones_operand should catch all cases your additional patch adds. ;; Return true if operand is a (vector) constant with all bits set. (define_predicate "all_ones_operand" (match_code "const_int,const_wide_int,const_vector") { if (op == constm1_rtx) return true; if (mode == VOIDmode) mode = GET_MODE (op); return op == CONSTM1_RTX (mode); }) Can you please investigate, what is wrong with all_ones_operand so it doesn't accept all (-1) operands? Uros.