/// <summary> /// Specializes native pointer casts. /// </summary> private static void Specialize( RewriterContext context, AcceleratorSpecializer specializer, IntAsPointerCast value) { var convert = context.Builder.CreateConvert( value.Location, value.Value, specializer.IntPointerType); context.ReplaceAndRemove(value, convert); }
/// <summary> /// Specializes int to native pointer casts. /// </summary> private static void Specialize( RewriterContext context, SpecializerData data, IntAsPointerCast value) { // Convert from int -> native int type -> pointer var builder = context.Builder; // int -> native int type var convertToNativeInt = builder.CreateConvert( value.Location, value.Value, data.IntPointerType); // native int type -> pointer var convert = builder.CreateIntAsPointerCast( value.Location, convertToNativeInt); context.ReplaceAndRemove(value, convert); }
/// <summary cref="IValueVisitor.Visit(IntAsPointerCast)"/> public void Visit(IntAsPointerCast value) => CodeGenerator.GenerateCode(value);
/// <summary cref="IBackendCodeGenerator.GenerateCode(IntAsPointerCast)"/> public void GenerateCode(IntAsPointerCast cast) => GenerateCodeForCast(cast);
/// <summary cref="IBackendCodeGenerator.GenerateCode(IntAsPointerCast)"/> public void GenerateCode(IntAsPointerCast cast) => Alias(cast, cast.Value);
/// <summary> /// Returns true if we have to adjust the source cast operation. /// </summary> private static bool CanSpecialize( SpecializerData data, IntAsPointerCast value) => value.SourceType != data.IntPointerType;
/// <summary> /// Returns true if we have to adjust the source cast operation. /// </summary> private static bool CanSpecialize( AcceleratorSpecializer specializer, IntAsPointerCast value) => value.SourceType != specializer.IntPointerType;
/// <summary cref="IValueVisitor.Visit(IntAsPointerCast)"/> public void Visit(IntAsPointerCast value) => throw new InvalidCodeGenerationException();