コード例 #1
0
        /// <summary cref="IValueVisitor.Visit(GetViewLength)"/>
        public void Visit(GetViewLength value)
        {
            var target     = Allocate(value);
            var viewSource = LoadView(value.View);

            using (var statement = BeginStatement(target))
            {
                statement.Append(viewSource);
                statement.AppendField(viewSource.LengthFieldIndex);
            }
        }
コード例 #2
0
ファイル: LowerPointerViews.cs プロジェクト: adamreeve/ILGPU
        /// <summary>
        /// Lowers set field operations into separate SSA values.
        /// </summary>
        private static void Lower(
            RewriterContext context,
            TypeLowering <ViewType> _,
            GetViewLength value)
        {
            var length = context.Builder.CreateGetField(
                value.Location,
                value.View,
                new FieldSpan(1));

            context.ReplaceAndRemove(value, length);
        }
コード例 #3
0
        /// <summary>
        /// Lowers set field operations into separate SSA values.
        /// </summary>
        private static void Lower(
            RewriterContext context,
            TypeLowering <ViewType> _,
            GetViewLength value)
        {
            var builder = context.Builder;
            var length  = builder.CreateGetField(
                value.Location,
                value.View,
                new FieldSpan(1));

            // Convert to a 32bit length value
            if (value.Is32BitProperty)
            {
                length = builder.CreateConvertToInt32(
                    value.Location,
                    length);
            }
            context.ReplaceAndRemove(value, length);
        }
コード例 #4
0
        /// <summary>
        /// Converts a new get length node into an SSA value.
        /// </summary>
        private static void Convert <TConstructionData>(
            SSARewriterContext <Value> context,
            TConstructionData data,
            GetViewLength getViewLength)
            where TConstructionData : IConstructionData
        {
            if (!data.TryGetConverted(getViewLength.View, out var getRef))
            {
                return;
            }

            // Get the SSA structure value
            var ssaValue = context.GetValue(context.Block, getRef.Source);

            // Get the view length from the first field (index 0) of the wrapped
            // array structure
            ssaValue = context.Builder.CreateGetField(
                getViewLength.Location,
                ssaValue,
                new FieldSpan(new FieldAccess(0)));

            context.ReplaceAndRemove(getViewLength, ssaValue);
        }
コード例 #5
0
 public void Visit(GetViewLength value)
 {
 }
コード例 #6
0
 /// <summary cref="IValueVisitor.Visit(GetViewLength)"/>
 public void Visit(GetViewLength value) =>
 throw new InvalidCodeGenerationException();
コード例 #7
0
        /// <summary cref="IValueVisitor.Visit(GetViewLength)"/>
        public void Visit(GetViewLength value)
        {
            var viewSource = LoadAs <ViewImplementationRegister>(value.View);

            Bind(value, viewSource.Length);
        }
コード例 #8
0
        /// <summary cref="IValueVisitor.Visit(GetViewLength)"/>
        public void Visit(GetViewLength value)
        {
            var viewSource = LoadAs <ViewVariable>(value.View);

            Bind(value, viewSource.Length);
        }