Support ACEv1 instructions reused from AMX-TILE

There are several insts that will be reused from legacy AMX, coming
from AMX-TILE and AMX-AVX512.

Since legacy AMX and ACE should not be used together, we choose not
to use the same intrin name for ACE and legacy AMX, while the builtins
could be shared.

For AMX-TILE related insts, we add "_ace_" in the middle of the intrin
name to explicitly mention the intrin is used by ACE.

For tilerelease, we keep it simple for now to use inline assembly since
no tmm register number need to be mentioned for the intrin and using
pattern does not help compiler knowing the dependency.

gcc/ChangeLog:

	* config.gcc: Include acev1intrin.h.
	* config/i386/i386-builtin-types.def: Add new function type.
	* config/i386/i386-builtin.def (BDESC): Reuse AMX-TILE builtins
	and handle ACEV1 new builtins.
	* config/i386/i386-builtins.cc
	(BDESC_VERIFYS): Add BDESC_ACE.
	(def_builtin): Share builtin between AMX-TILE and ACEv1.
	(ix86_init_mmx_sse_builtins): Handle BDESC_ACE.
	* config/i386/i386-expand.cc
	(ix86_expand_ace_builtin): New.
	(ix86_check_builtin_isa_match): Share builtin between AMX-TILE
	and ACEv1.
	(ix86_expand_builtin): Handle BDESC_ACE.
	* config/i386/i386.md (ldtilecfg): Add TARGET_ACEV1.
	(sttilecfg): Ditto.
	* config/i386/immintrin.h: Include acev1intrin.h.
	* config/i386/sse.md (UNSPECV_TILEZERO): New.
	(tilezero): Ditto.
	* config/i386/acev1intrin.h: New intrin file.

gcc/testsuite/ChangeLog:

	* g++.dg/other/i386-2.C: Add acev1 tests.
	* g++.dg/other/i386-3.C: Ditto.
	* gcc.target/i386/avx-1.c: Ditto.
	* gcc.target/i386/funcspec-56.inc: Ditto.
	* gcc.target/i386/sse-12.c: Ditto.
	* gcc.target/i386/sse-13.c: Ditto.
	* gcc.target/i386/sse-14.c: Ditto.
	* gcc.target/i386/sse-22.c: Ditto.
	* gcc.target/i386/sse-23.c: Ditto.
	* gcc.target/i386/acev1-1.c: New test.
	* gcc.target/i386/acev1-1b.c: Ditto.

Co-authored-by: Dipesh Sharma <Dipesh.Sharma@amd.com>
20 files changed