From: Zoltan Varga Date: Thu, 22 Aug 2019 06:01:17 +0000 (-0400) Subject: [llvm] Mark Vector128/Vector256 types as SIMD. X-Git-Tag: submit/tizen/20210909.063632~10331^2~5^2~539 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0c377455bbb52e4b841e461ea30f5c4ae521f210;p=platform%2Fupstream%2Fdotnet%2Fruntime.git [llvm] Mark Vector128/Vector256 types as SIMD. These are not currently supported, but marking them as simd helps llvm eliminate dead variables with these types, since XZERO is easier to eliminate than VZERO. Commit migrated from https://github.com/mono/mono/commit/798af6613796fcbe11cf20a33a889705483197a7 --- diff --git a/src/mono/mono/metadata/class-init.c b/src/mono/mono/metadata/class-init.c index 51fdc60..ce4dabc 100644 --- a/src/mono/mono/metadata/class-init.c +++ b/src/mono/mono/metadata/class-init.c @@ -808,7 +808,8 @@ mono_class_create_generic_inst (MonoGenericClass *gclass) klass->simd_type = 1; } #ifdef ENABLE_NETCORE - if (mono_is_corlib_image (gklass->image) && !strcmp (gklass->name, "Vector`1")) { + if (mono_is_corlib_image (gklass->image) && + (!strcmp (gklass->name, "Vector`1") || !strcmp (gklass->name, "Vector128`1") || !strcmp (gklass->name, "Vector256`1"))) { MonoType *etype = gclass->context.class_inst->type_argv [0]; if (mono_type_is_primitive (etype) && etype->type != MONO_TYPE_CHAR && etype->type != MONO_TYPE_BOOLEAN) klass->simd_type = 1; diff --git a/src/mono/mono/mini/mini-llvm.c b/src/mono/mono/mini/mini-llvm.c index 8d29e71..890a069 100644 --- a/src/mono/mono/mini/mini-llvm.c +++ b/src/mono/mono/mini/mini-llvm.c @@ -500,7 +500,7 @@ simd_class_to_llvm_type (EmitContext *ctx, MonoClass *klass) return LLVMVectorType (LLVMFloatType (), 4); } else if (!strcmp (klass_name, "Vector4")) { return LLVMVectorType (LLVMFloatType (), 4); - } else if (!strcmp (klass_name, "Vector`1")) { + } else if (!strcmp (klass_name, "Vector`1") || !strcmp (klass_name, "Vector128`1") || !strcmp (klass_name, "Vector256`1")) { MonoType *etype = mono_class_get_generic_class (klass)->context.class_inst->type_argv [0]; int size = mono_class_value_size (klass, NULL); switch (etype->type) {