/// <summary cref="CompilerDeviceFunctions.MakeMemoryFence(InvocationContext, MemoryFenceIntrinsicKind)"/> protected override Value?MakeMemoryFence(InvocationContext context, MemoryFenceIntrinsicKind kind) { LLVMValueRef memoryFenceFunction; switch (kind) { case MemoryFenceIntrinsicKind.GroupLevel: memoryFenceFunction = BlockLevelFence.Value; break; case MemoryFenceIntrinsicKind.DeviceLevel: memoryFenceFunction = DeviceLevelFence.Value; break; case MemoryFenceIntrinsicKind.SystemLevel: memoryFenceFunction = SystemLevelFence.Value; break; default: throw context.CompilationContext.GetNotSupportedException( ErrorMessages.NotSupportedMemoryFenceOperation, kind); } BuildCall(context.Builder, memoryFenceFunction); return(null); }
/// <summary> /// Handles general memory-fence operations. /// </summary> /// <param name="context">The current invocation context.</param> /// <param name="kind">The kind of the memory-fence intrinsic.</param> /// <returns>The resulting value.</returns> protected abstract Value?MakeMemoryFence(InvocationContext context, MemoryFenceIntrinsicKind kind);
public MemoryFenceIntrinsicAttribute(MemoryFenceIntrinsicKind intrinsicKind) { IntrinsicKind = intrinsicKind; }