From 0652b7069c2069ec52658c3dfc3e3fc4872bd77a Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Wed, 8 Jun 2016 14:58:07 -0400 Subject: [PATCH] [llvm] Enable support for the atomic store intrinsics when running with llvmonly. --- mono/mini/mini-llvm.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/mono/mini/mini-llvm.c b/mono/mini/mini-llvm.c index ca7a3ce12b2..93dee86723d 100644 --- a/mono/mini/mini-llvm.c +++ b/mono/mini/mini-llvm.c @@ -2036,7 +2036,10 @@ emit_store_general (EmitContext *ctx, MonoBasicBlock *bb, LLVMBuilderRef *builde args [4] = LLVMConstInt (LLVMInt32Type (), ordering, FALSE); emit_call (ctx, bb, builder_ref, get_intrinsic (ctx, intrins_name), args, 5); } else { - mono_llvm_build_store (*builder_ref, value, addr, is_faulting, barrier); + if (barrier != LLVM_BARRIER_NONE) + mono_llvm_build_aligned_store (*builder_ref, value, addr, barrier, size); + else + mono_llvm_build_store (*builder_ref, value, addr, is_faulting, barrier); } } @@ -5478,9 +5481,6 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb) case OP_ATOMIC_STORE_U8: case OP_ATOMIC_STORE_R4: case OP_ATOMIC_STORE_R8: { - set_failure (ctx, "atomic mono.store intrinsic"); - break; -#if 0 int size; gboolean sext, zext; LLVMTypeRef t; @@ -5488,6 +5488,11 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb) BarrierKind barrier = (BarrierKind) ins->backend.memory_barrier_kind; LLVMValueRef index, addr, value; + if (!cfg->llvm_only) { + set_failure (ctx, "atomic mono.store intrinsic"); + break; + } + if (!values [ins->inst_destbasereg]) { set_failure (ctx, "inst_destbasereg"); break; @@ -5501,7 +5506,6 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb) emit_store_general (ctx, bb, &builder, size, value, addr, is_volatile, barrier); break; -#endif } case OP_RELAXED_NOP: { #if defined(TARGET_AMD64) || defined(TARGET_X86) -- 2.11.4.GIT