From: Zoltan Varga Date: Wed, 21 Aug 2019 16:03:16 +0000 (-0400) Subject: [llvm] Fix an assert. X-Git-Tag: submit/tizen/20210909.063632~10331^2~5^2~725^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ea3f15d0c6fd38fb4e2a69a2ae8e015015a7ffb9;p=platform%2Fupstream%2Fdotnet%2Fruntime.git [llvm] Fix an assert. Fixes https://github.com/mono/mono/issues/16381. Commit migrated from https://github.com/mono/mono/commit/0e2da3c2abb0c2797cb24da05e16d76bfc179e8c --- diff --git a/src/mono/mono/mini/mini-llvm.c b/src/mono/mono/mini/mini-llvm.c index 0d96eb8..8cea98a 100644 --- a/src/mono/mono/mini/mini-llvm.c +++ b/src/mono/mono/mini/mini-llvm.c @@ -7101,11 +7101,11 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb) case OP_XCOMPARE_FP: { LLVMRealPredicate pred = fpcond_to_llvm_cond [ins->inst_c0]; LLVMValueRef cmp = LLVMBuildFCmp (builder, pred, lhs, rhs, ""); - g_assert_not_reached (); - if (LLVMGetVectorSize (LLVMTypeOf (lhs)) == 2) - values [ins->dreg] = LLVMBuildBitCast (builder, LLVMBuildSExt (builder, cmp, LLVMVectorType (LLVMInt64Type (), 2), ""), LLVMTypeOf (lhs), ""); + int nelems = LLVMGetVectorSize (LLVMTypeOf (cmp)); + if (ins->inst_c1 == MONO_TYPE_R8) + values [ins->dreg] = LLVMBuildBitCast (builder, LLVMBuildSExt (builder, cmp, LLVMVectorType (LLVMInt64Type (), nelems), ""), LLVMTypeOf (lhs), ""); else - values [ins->dreg] = LLVMBuildBitCast (builder, LLVMBuildSExt (builder, cmp, LLVMVectorType (LLVMInt32Type (), 4), ""), LLVMTypeOf (lhs), ""); + values [ins->dreg] = LLVMBuildBitCast (builder, LLVMBuildSExt (builder, cmp, LLVMVectorType (LLVMInt32Type (), nelems), ""), LLVMTypeOf (lhs), ""); break; } case OP_XCOMPARE: { diff --git a/src/mono/mono/mini/simd-intrinsics-netcore.c b/src/mono/mono/mini/simd-intrinsics-netcore.c index 9bf8a4f..a73bfe2 100644 --- a/src/mono/mono/mini/simd-intrinsics-netcore.c +++ b/src/mono/mono/mini/simd-intrinsics-netcore.c @@ -239,6 +239,7 @@ emit_xcompare (MonoCompile *cfg, MonoClass *klass, MonoType *etype, MonoInst *ar ins = emit_simd_ins (cfg, klass, is_fp ? OP_XCOMPARE_FP : OP_XCOMPARE, arg1->dreg, arg2->dreg); ins->inst_c0 = CMP_EQ; + ins->inst_c1 = etype->type; return ins; }