コード例 #1
0
ファイル: SSAConstruction.cs プロジェクト: adamreeve/ILGPU
 /// <summary>
 /// Registers all rewriting patterns.
 /// </summary>
 static SSAConstruction()
 {
     Rewriter.Add <Alloca>(Convert);
     Rewriter.Add <Load>(Convert);
     Rewriter.Add <Store>(Convert);
     Rewriter.Add <LoadFieldAddress>(Convert);
     Rewriter.Add <AddressSpaceCast>(Convert);
 }
コード例 #2
0
 /// <summary>
 /// Registers all base rewriting patterns.
 /// </summary>
 protected static void RegisterRewriters <TConstructionData>(
     SSARewriter <Value, TConstructionData> rewriter)
     where TConstructionData : IConstructionData
 {
     rewriter.Add <Load>(Convert);
     rewriter.Add <Store>(Convert);
     rewriter.Add <LoadFieldAddress>(Convert);
     rewriter.Add <AddressSpaceCast>(Convert);
 }
コード例 #3
0
        /// <summary>
        /// Registers all rewriting patterns.
        /// </summary>
        static SSAStructureConstruction()
        {
            RegisterRewriters(Rewriter);

            Rewriter.Add <Alloca>(Convert);
            Rewriter.Add <LoadElementAddress>(Convert);

            Rewriter.Add <NewView>(Convert);
            Rewriter.Add <GetViewLength>(Convert);
        }
コード例 #4
0
ファイル: LowerStructures.cs プロジェクト: rpfeuti/ILGPU
        /// <summary>
        /// Initializes all rewriters.
        /// </summary>
        static LowerStructures()
        {
            AddRewriters(Rewriter);
            Rewriter.Add <Load>((_, value) => value.Type.IsStructureType, Keep);
            Rewriter.Add <Store>((_, value) => value.Value.Type.IsStructureType, Keep);

            AddRewriters(LoadStoreRewriter);
            LoadStoreRewriter.Add <Load>(
                (_, value) => value.Type.IsStructureType, Lower);
            LoadStoreRewriter.Add <Store>(
                (_, value) => value.Value.Type.IsStructureType, Lower);
        }
コード例 #5
0
ファイル: LowerStructures.cs プロジェクト: rpfeuti/ILGPU
        /// <summary>
        /// Adds the common rewriters to the given rewriter instance.
        /// </summary>
        /// <param name="rewriter">The rewriter to extend.</param>
        private static void AddRewriters(SSARewriter <FieldRef, LoweringData> rewriter)
        {
            // Keep particular values that cannot be rewritten by this pass
            rewriter.Add <Parameter>((_, value) => value.Type.IsStructureType, Keep);
            rewriter.Add <AlignViewTo>(Keep);

            // Rewrite known values
            rewriter.Add <NullValue>((_, value) => value.Type.IsStructureType, Lower);
            rewriter.Add <StructureValue>((_, value) => value.Type.IsStructureType, Lower);
            rewriter.Add <PhiValue>((_, value) => value.Type.IsStructureType, Lower);
            rewriter.Add <Broadcast>((_, value) => value.Type.IsStructureType, Lower);
            rewriter.Add <WarpShuffle>((_, value) => value.Type.IsStructureType, Lower);
            rewriter.Add <SubWarpShuffle>((_, value) => value.Type.IsStructureType, Lower);

            rewriter.Add <Predicate>((_, value) => value.Type.IsStructureType, Lower);

            rewriter.Add <ReturnTerminator>(
                (_, value) => value.Method.ReturnType.IsStructureType, Lower);

            rewriter.Add <GetField>(Lower);
            rewriter.Add <SetField>(Lower);
            rewriter.Add <MethodCall>(Lower);
        }
コード例 #6
0
ファイル: LowerStructures.cs プロジェクト: adamreeve/ILGPU
        /// <summary>
        /// Adds the common rewriters to the given rewriter instance.
        /// </summary>
        /// <param name="rewriter">The rewriter to extend.</param>
        private static void AddRewriters(SSARewriter <FieldRef, LoweringData> rewriter)
        {
            rewriter.Add <Parameter>((_, value) => value.Type.IsStructureType, Lower);
            rewriter.Add <NullValue>((_, value) => value.Type.IsStructureType, Lower);
            rewriter.Add <StructureValue>((_, value) => value.Type.IsStructureType, Lower);
            rewriter.Add <PhiValue>((_, value) => value.Type.IsStructureType, Lower);
            rewriter.Add <Broadcast>((_, value) => value.Type.IsStructureType, Lower);
            rewriter.Add <WarpShuffle>((_, value) => value.Type.IsStructureType, Lower);
            rewriter.Add <SubWarpShuffle>((_, value) => value.Type.IsStructureType, Lower);

            rewriter.Add <ReturnTerminator>(
                (_,
                 value) => value.Method.ReturnType.IsStructureType, Lower);

            rewriter.Add <GetField>(Lower);
            rewriter.Add <SetField>(Lower);
            rewriter.Add <MethodCall>(Lower);
        }
コード例 #7
0
        /// <summary>
        /// Registers all rewriting patterns.
        /// </summary>
        static SSAConstruction()
        {
            RegisterRewriters(Rewriter);

            Rewriter.Add <Alloca>(Convert);
        }