From 89e6c7fd81a52859e1d2c6687515cda339d8e0af Mon Sep 17 00:00:00 2001 From: Brice Dobry Date: Fri, 25 Jun 2021 10:59:28 -0400 Subject: [PATCH 1/2] Remove the vector intrinsics replaced by ops There was a set of temporary intrinsics that were needed until normal ops supported vectors. These are now supported and the intrinsics are removed with this commit. --- .../maple_ir/include/intrinsic_vector.def | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/mapleall/maple_ir/include/intrinsic_vector.def b/src/mapleall/maple_ir/include/intrinsic_vector.def index be517aa839..efcd2e6060 100644 --- a/src/mapleall/maple_ir/include/intrinsic_vector.def +++ b/src/mapleall/maple_ir/include/intrinsic_vector.def @@ -785,21 +785,3 @@ DEF_MIR_INTRINSIC(vector_store_v1f64, "vector_store_v1f64", INTRNISVECTOR, kArgTyVoid, kArgTyPtr, kArgTyV1F64) DEF_MIR_INTRINSIC(vector_store_v2f32, "vector_store_v2f32", INTRNISVECTOR, kArgTyVoid, kArgTyPtr, kArgTyV2F32) - -// Temporary intrinsics that should be replaced by standard ops. -DEF_MIR_INTRINSIC(vector_and_v8u16, "vector_and_v8u16", INTRNISVECTOR, - kArgTyV8U16, kArgTyV8U16, kArgTyV8U16) -DEF_MIR_INTRINSIC(vector_and_v4i32, "vector_and_v4i32", INTRNISVECTOR, - kArgTyV4I32, kArgTyV4I32, kArgTyV4I32) -DEF_MIR_INTRINSIC(vector_eq_v8u16, "vector_eq_v8u16", INTRNISVECTOR, - kArgTyV8U16, kArgTyV8U16, kArgTyV8U16) -DEF_MIR_INTRINSIC(vector_shl_v8u16, "vector_shl_v8u16", INTRNISVECTOR, - kArgTyV8U16, kArgTyV8U16, kArgTyV8I16) -DEF_MIR_INTRINSIC(vector_shli_v2u64, "vector_shli_v2u64", INTRNISVECTOR, - kArgTyV2U64, kArgTyV2U64, kArgTyI32) -DEF_MIR_INTRINSIC(vector_shri_v2u64, "vector_shri_v2u64", INTRNISVECTOR, - kArgTyV2U64, kArgTyV2U64, kArgTyI32) -DEF_MIR_INTRINSIC(vector_xor_v4u32, "vector_xor_v4u32", INTRNISVECTOR, - kArgTyV4U32, kArgTyV4U32, kArgTyV4U32) -DEF_MIR_INTRINSIC(vector_xor_v2u64, "vector_xor_v2u64", INTRNISVECTOR, - kArgTyV2U64, kArgTyV2U64, kArgTyV2U64) -- Gitee From efa4da4318f6c305a3bc75b4bd1154ce3dd61b4f Mon Sep 17 00:00:00 2001 From: Brice Dobry Date: Tue, 27 Jul 2021 10:34:52 -0400 Subject: [PATCH 2/2] Add intrinsics for vector shift immediates This is required because otherwise, Clang will cast the immediate to the vector type, but the backend wants just a scalar immediate for the shift amount. --- .../maple_ir/include/intrinsic_vector.def | 125 ++++++++++++++++-- 1 file changed, 117 insertions(+), 8 deletions(-) diff --git a/src/mapleall/maple_ir/include/intrinsic_vector.def b/src/mapleall/maple_ir/include/intrinsic_vector.def index efcd2e6060..38fa26c3da 100644 --- a/src/mapleall/maple_ir/include/intrinsic_vector.def +++ b/src/mapleall/maple_ir/include/intrinsic_vector.def @@ -506,7 +506,109 @@ DEF_MIR_INTRINSIC(vector_reverse_v2f32, "vector_reverse_v2f32", INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2F32, kArgTyV2F32) -// vecTy2 vector_shift_narrow_low(vecTy1 src, const int n) +// vecTy vector_shli(vecTy src, const int n) +// Shift each element in the vector left by n. +DEF_MIR_INTRINSIC(vector_shli_v2i64, "vector_shli_v2i64", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, + kArgTyV2I64, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shli_v4i32, "vector_shli_v4i32", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, + kArgTyV4I32, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shli_v8i16, "vector_shli_v8i16", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, + kArgTyV8I16, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shli_v16i8, "vector_shli_v16i8", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16I8, + kArgTyV16I8, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shli_v2u64, "vector_shli_v2u64", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, + kArgTyV2U64, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shli_v4u32, "vector_shli_v4u32", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, + kArgTyV4U32, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shli_v8u16, "vector_shli_v8u16", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, + kArgTyV8U16, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shli_v16u8, "vector_shli_v16u8", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16U8, + kArgTyV16U8, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shli_v1i64, "vector_shli_v1i64", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI64, + kArgTyI64, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shli_v2i32, "vector_shli_v2i32", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I32, + kArgTyV2I32, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shli_v4i16, "vector_shli_v4i16", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I16, + kArgTyV4I16, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shli_v8i8, "vector_shli_v8i8", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I8, + kArgTyV8I8, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shli_v1u64, "vector_shli_v1u64", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU64, + kArgTyU64, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shli_v2u32, "vector_shli_v2u32", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U32, + kArgTyV2U32, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shli_v4u16, "vector_shli_v4u16", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U16, + kArgTyV4U16, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shli_v8u8, "vector_shli_v8u8", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U8, + kArgTyV8U8, kArgTyI32) + +// vecTy vector_shri(vecTy src, const int n) +// Shift each element in the vector right by n. +DEF_MIR_INTRINSIC(vector_shri_v2i64, "vector_shri_v2i64", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I64, + kArgTyV2I64, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shri_v4i32, "vector_shri_v4i32", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I32, + kArgTyV4I32, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shri_v8i16, "vector_shri_v8i16", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I16, + kArgTyV8I16, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shri_v16i8, "vector_shri_v16i8", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16I8, + kArgTyV16I8, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shri_v2u64, "vector_shri_v2u64", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U64, + kArgTyV2U64, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shri_v4u32, "vector_shri_v4u32", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U32, + kArgTyV4U32, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shri_v8u16, "vector_shri_v8u16", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U16, + kArgTyV8U16, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shri_v16u8, "vector_shri_v16u8", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV16U8, + kArgTyV16U8, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shri_v1i64, "vector_shri_v1i64", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyI64, + kArgTyI64, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shri_v2i32, "vector_shri_v2i32", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2I32, + kArgTyV2I32, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shri_v4i16, "vector_shri_v4i16", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4I16, + kArgTyV4I16, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shri_v8i8, "vector_shri_v8i8", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8I8, + kArgTyV8I8, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shri_v1u64, "vector_shri_v1u64", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyU64, + kArgTyU64, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shri_v2u32, "vector_shri_v2u32", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV2U32, + kArgTyV2U32, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shri_v4u16, "vector_shri_v4u16", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV4U16, + kArgTyV4U16, kArgTyI32) +DEF_MIR_INTRINSIC(vector_shri_v8u8, "vector_shri_v8u8", + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT, kArgTyV8U8, + kArgTyV8U8, kArgTyI32) + +// vecTy2 vector_shr_narrow_low(vecTy1 src, const int n) // Shift each element in the vector right by n, narrow each element to half // of the original width (truncating), then write the result to the lower // half of the destination vector. @@ -659,25 +761,32 @@ DEF_MIR_INTRINSIC(vector_table_lookup_v2f32, "vector_table_lookup_v2f32", // Interleave the upper half of elements from a and b into the destination // vector. DEF_MIR_INTRINSIC(vector_zip_v2i32, "vector_zip_v2i32", - INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | INTRNISSPECIAL, + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | + INTRNISSPECIAL, kArgTyAgg, kArgTyV2I32, kArgTyV2I32) DEF_MIR_INTRINSIC(vector_zip_v4i16, "vector_zip_v4i16", - INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | INTRNISSPECIAL, + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | + INTRNISSPECIAL, kArgTyAgg, kArgTyV4I16, kArgTyV4I16) DEF_MIR_INTRINSIC(vector_zip_v8i8, "vector_zip_v8i8", - INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | INTRNISSPECIAL, + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | + INTRNISSPECIAL, kArgTyAgg, kArgTyV8I8, kArgTyV8I8) DEF_MIR_INTRINSIC(vector_zip_v2u32, "vector_zip_v2u32", - INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | INTRNISSPECIAL, + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | + INTRNISSPECIAL, kArgTyAgg, kArgTyV2U32, kArgTyV2U32) DEF_MIR_INTRINSIC(vector_zip_v4u16, "vector_zip_v4u16", - INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | INTRNISSPECIAL, + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | + INTRNISSPECIAL, kArgTyAgg, kArgTyV4U16, kArgTyV4U16) DEF_MIR_INTRINSIC(vector_zip_v8u8, "vector_zip_v8u8", - INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | INTRNISSPECIAL, + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | + INTRNISSPECIAL, kArgTyAgg, kArgTyV8U8, kArgTyV8U8) DEF_MIR_INTRINSIC(vector_zip_v2f32, "vector_zip_v2f32", - INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | INTRNISSPECIAL, + INTRNISVECTOR | INTRNISPURE | INTRNNOSIDEEFFECT | + INTRNISSPECIAL, kArgTyAgg, kArgTyV2F32, kArgTyV2F32) // vecTy vector_load(scalarTy *ptr) -- Gitee