private static TypeNode ComputeType(IRContext context, PredicateBarrierKind kind) { if (kind == PredicateBarrierKind.PopCount) { return(context.GetPrimitiveType(BasicValueType.Int32)); } return(context.GetPrimitiveType(BasicValueType.Int1)); }
public MemoryValue CreateBarrier( Location location, Value predicate, PredicateBarrierKind kind) { location.Assert(predicate.BasicValueType == BasicValueType.Int1); return(Append(new PredicateBarrier( GetInitializer(location), predicate, kind))); }
public MemoryValue CreateBarrier( Value predicate, PredicateBarrierKind kind) { Debug.Assert(predicate != null, "Invalid predicate value"); Debug.Assert(predicate.BasicValueType == BasicValueType.Int1, "Invalid predicate bool type"); return(Append(new PredicateBarrier( Context, BasicBlock, predicate, kind))); }
/// <summary> /// Constructs a new predicate barrier. /// </summary> /// <param name="context">The parent IR context.</param> /// <param name="basicBlock">The parent basic block.</param> /// <param name="predicate">The predicate value.</param> /// <param name="kind">The operation kind.</param> internal PredicateBarrier( IRContext context, BasicBlock basicBlock, ValueReference predicate, PredicateBarrierKind kind) : base( basicBlock, ImmutableArray.Create(predicate), ComputeType(context, kind)) { Debug.Assert( predicate.BasicValueType == BasicValueType.Int1, "Invalid predicate"); Kind = kind; }
public static string GetPredicateBarrier(PredicateBarrierKind kind) => PredicateBarrierOperations[(int)kind];