rjmccall added inline comments.

================
Comment at: include/clang/AST/ASTContext.h:1954
+  llvm::APInt getFixedPointMin(QualType Ty) const;
+  llvm::APInt getFixedPointOne(QualType Ty) const;
 
----------------
Are these opaque bit-patterns?  I think there should be a type which abstracts 
over constant fixed-point values, something `APSInt`-like that also carries the 
signedness and scale.  For now that type can live in Clang; if LLVM wants to 
add intrinsic support for fixed-point, it'll be easy enough to move it there.


================
Comment at: lib/CodeGen/CGExprScalar.cpp:768
+    if (CGF.getContext().getTargetInfo().unsignedFixedPointTypesHavePadding() 
&&
+        Ty->isUnsignedFixedPointType()) {
+      unsigned NumBits = CGF.getContext().getTypeSize(Ty);
----------------
Can you explain the padding thing?  Why is padding uniformly present or absent 
on all unsigned fixed point types on a target, and never on signed types?  Is 
this "low bits set" thing endian-specific?


================
Comment at: lib/CodeGen/CGExprScalar.cpp:1801
+      return Builder.CreateLShr(
+          EmitScalarConversion(Val, SrcTy, DestTy, CE->getExprLoc()), scale);
+  }
----------------
Please abstract functions for doing this kind of arithmetic instead of inlining 
them into scalar emission.  Feel free to make a new CGFixedPoint.h header and 
corresponding implementation file.

Also, it looks like you're assuming that the output type is the same size as 
the input type.  I don't think that's actually a language restriction, right?


Repository:
  rC Clang

https://reviews.llvm.org/D48456



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

Reply via email to