ebevhan added inline comments.

================
Comment at: clang/test/Frontend/fixed_point_conversions.c:437
+  // DEFAULT-NEXT: [[RES:%[a-z0-9]+]] = trunc i39 [[SATMIN]] to i16
+  // DEFAULT-NEXT: store i16 [[RES]], i16* %sat_sa, align 2
+
----------------
leonardchan wrote:
> ebevhan wrote:
> > Conversions like this are a bit odd. There shouldn't be a need to 
> > upsize/upscale the container before the saturation, should there?
> I see. You're saying that we can just check directly if the value exceeds 255 
> (or goes under -256) since the range of target values can always fit in the 
> range of source values. Therefore we do not need to cast up since the only 
> reason we would need to is if converting to a type with a greater source 
> range.
> 
> In this case, we could technically have a special case for integers where I 
> think we can perform the saturation checks without the initial sign 
> extension. I think it might be simpler though if in 
> `EmitFixedPointConversion`, we treat an integer as a 'zero-scale fixed point 
> number'. I think the reason the upsizing occurs in the first place is so that 
> we satisfy the first FX conversion rule of calculating the result with full 
> precision of both operands.
> I see. You're saying that we can just check directly if the value exceeds 255 
> (or goes under -256) since the range of target values can always fit in the 
> range of source values. Therefore we do not need to cast up since the only 
> reason we would need to is if converting to a type with a greater source 
> range.

That's right. Though, for integer to fixed-point conversion, I don't think you 
ever need to upcast first; either the integer is larger than or equal to the 
integral part of the fixed-point type, in which case we can check the magnitude 
in the type as is, or it's smaller, and we don't have to do any saturation.

> I think it might be simpler though if in `EmitFixedPointConversion`, we treat 
> an integer as a 'zero-scale fixed point number'.

Isn't this already the case? The semantics for an integer type are fetched as a 
zero scale fixed-point type and used that way (except when the target is an 
integer due to the rounding requirement).


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56900/new/

https://reviews.llvm.org/D56900



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to