[PATCH] apply_subst_iterator: Handle define_split/define_insn_and_split

H.J. Lu hjl.tools@gmail.com
Fri Oct 26 08:42:00 GMT 2018


On 10/25/18, Uros Bizjak <ubizjak@gmail.com> wrote:
> On Fri, Oct 26, 2018 at 8:48 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>>
>> On 10/25/18, Uros Bizjak <ubizjak@gmail.com> wrote:
>> > On Fri, Oct 26, 2018 at 8:07 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>> >>
>> >>         * read-rtl.c (apply_subst_iterator): Handle
>> >> define_insn_and_split.
>> >> ---
>> >>  gcc/read-rtl.c | 6 ++++--
>> >>  1 file changed, 4 insertions(+), 2 deletions(-)
>> >>
>> >> diff --git a/gcc/read-rtl.c b/gcc/read-rtl.c
>> >> index d698dd4af4d..5957c29671a 100644
>> >> --- a/gcc/read-rtl.c
>> >> +++ b/gcc/read-rtl.c
>> >> @@ -275,9 +275,11 @@ apply_subst_iterator (rtx rt, unsigned int, int
>> >> value)
>> >>    if (value == 1)
>> >>      return;
>> >>    gcc_assert (GET_CODE (rt) == DEFINE_INSN
>> >> +             || GET_CODE (rt) == DEFINE_INSN_AND_SPLIT
>> >>               || GET_CODE (rt) == DEFINE_EXPAND);
>> >
>> > Can we also handle DEFINE_SPLIT here?
>> >
>>
>> Yes, we could if there were a usage for it.  I am reluctant to add
>> something
>> I have no use nor test for.
>
> Just split one define_insn_and_split to define_insn and corresponding
> define_split.
>
> define_insn_and_split is a contraction for for the define_insn and
> corresponding define_split, so it looks weird to only handle
> define_insn_and-split without handling define_split.
>

Here is the updated patch to handle define_split.  Tested with

(define_insn "*sse4_1_<code>v8qiv8hi2<mask_name>_2"
  [(set (match_operand:V8HI 0 "register_operand")
        (any_extend:V8HI
          (vec_select:V8QI
            (subreg:V16QI
              (vec_concat:V2DI
                (match_operand:DI 1 "memory_operand")
                (const_int 0)) 0)
            (parallel [(const_int 0) (const_int 1)
                       (const_int 2) (const_int 3)
                       (const_int 4) (const_int 5)
                       (const_int 6) (const_int 7)]))))]
  "TARGET_SSE4_1 && <mask_avx512bw_condition> && <mask_avx512vl_condition>"
  "#")

(define_split
  [(set (match_operand:V8HI 0 "register_operand")
        (any_extend:V8HI
          (vec_select:V8QI
            (subreg:V16QI
              (vec_concat:V2DI
                (match_operand:DI 1 "memory_operand")
                (const_int 0)) 0)
            (parallel [(const_int 0) (const_int 1)
                       (const_int 2) (const_int 3)
                       (const_int 4) (const_int 5)
                       (const_int 6) (const_int 7)]))))]
  "TARGET_SSE4_1 && <mask_avx512bw_condition> && <mask_avx512vl_condition>
   && can_create_pseudo_p ()"
  [(set (match_dup 0)
        (any_extend:V8HI (match_dup 1)))]
{
  operands[1] = adjust_address_nv (operands[1], V8QImode, 0);
})

-- 
H.J.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-apply_subst_iterator-Handle-define_split-define_insn.patch
Type: text/x-patch
Size: 1504 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20181026/73ebf5df/attachment.bin>


More information about the Gcc-patches mailing list