]> git.ipfire.org Git - thirdparty/gcc.git/commit
Support sdot_prodv*qi with emulation of sdot_prodv*hi.
authorliuhongt <hongtao.liu@intel.com>
Thu, 23 Nov 2023 05:10:41 +0000 (13:10 +0800)
committerliuhongt <hongtao.liu@intel.com>
Thu, 30 Nov 2023 07:39:38 +0000 (15:39 +0800)
commitb4a7c1c8c59d191bff64a720cca61d1d308af531
tree0cb24e85acd7f8b637316095a268fa4f7ac467c9
parenta1a3939bea5b0d9cbd3465d96e7e4a5222ae6c48
Support sdot_prodv*qi with emulation of sdot_prodv*hi.

Currently sdot_prodv*qi is available under TARGET_AVXVNNIINT8, but it
can be emulated by

 vec_unpacks_lo_v32qi
 vec_unpacks_lo_v32qi
 vec_unpacks_hi_v32qi
 vec_unpacks_hi_v32qi
 sdot_prodv16hi
 sdot_prodv16hi
 add3v8si

which is faster than original

  vect_patt_39.11_48 = WIDEN_MULT_LO_EXPR <vect__3.7_44, vect__7.10_47>;
  vect_patt_39.11_49 = WIDEN_MULT_HI_EXPR <vect__3.7_44, vect__7.10_47>;
  vect_patt_38.14_54 = [vec_unpack_lo_expr] vect_patt_39.11_48;
  vect_patt_38.14_55 = [vec_unpack_hi_expr] vect_patt_39.11_48;
  vect_patt_38.14_56 = [vec_unpack_lo_expr] vect_patt_39.11_49;
  vect_patt_38.14_57 = [vec_unpack_hi_expr] vect_patt_39.11_49;
  vect_sum_15.15_59 = vect_patt_38.14_54 + vect_patt_38.14_55;
  vect_sum_15.15_60 = vect_patt_38.14_56 + vect_sum_15.15_59;
  vect_sum_15.15_61 = vect_patt_38.14_57 + vect_sum_15.15_60;

gcc/ChangeLog:

* config/i386/sse.md (sdot_prodv64qi): New expander.
(sseunpackmodelower): New mode attr.
(sdot_prod<mode>): Emulate sdot_prodv*qi with sodt_prov*hi
when TARGET_VNNIINT8 is not available.

gcc/testsuite/ChangeLog:

* gcc.target/i386/sdotprodint8_emulate.c: New test.
gcc/config/i386/sse.md
gcc/testsuite/gcc.target/i386/sdotprodint8_emulate.c [new file with mode: 0644]