Пример #1
0
 private static TypeNode ComputeType(IRContext context, PredicateBarrierKind kind)
 {
     if (kind == PredicateBarrierKind.PopCount)
     {
         return(context.GetPrimitiveType(BasicValueType.Int32));
     }
     return(context.GetPrimitiveType(BasicValueType.Int1));
 }
Пример #2
0
        public MemoryValue CreateBarrier(
            Location location,
            Value predicate,
            PredicateBarrierKind kind)
        {
            location.Assert(predicate.BasicValueType == BasicValueType.Int1);

            return(Append(new PredicateBarrier(
                              GetInitializer(location),
                              predicate,
                              kind)));
        }
Пример #3
0
        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)));
        }
Пример #4
0
 /// <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;
 }
Пример #5
0
 public static string GetPredicateBarrier(PredicateBarrierKind kind) =>
 PredicateBarrierOperations[(int)kind];