/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// Registers all rewriting patterns. /// </summary> static SSAConstruction() { RegisterRewriters(Rewriter); Rewriter.Add <Alloca>(Convert); }