lenary created this revision.
lenary added reviewers: luismarques, asb.
Herald added a project: clang.
This is in order to support psABIs where these two type sizes do not match for
specific values of N. The default implementation matches clang's current
behaviour where `getLeastIntTypeByWidth` is used for `{u}int_fastN_t`.
This patch is a Work-In-Progress. I am seeking guidance as to how to update
clang's `stdint.h` to match this change.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D80963
Files:
clang/include/clang/Basic/TargetInfo.h
clang/lib/Frontend/InitPreprocessor.cpp
Index: clang/lib/Frontend/InitPreprocessor.cpp
===================================================================
--- clang/lib/Frontend/InitPreprocessor.cpp
+++ clang/lib/Frontend/InitPreprocessor.cpp
@@ -257,7 +257,7 @@
const TargetInfo &TI, MacroBuilder &Builder) {
// stdint.h currently defines the fast int types as equivalent to the least
// types.
- TargetInfo::IntType Ty = TI.getLeastIntTypeByWidth(TypeWidth, IsSigned);
+ TargetInfo::IntType Ty = TI.getFastIntTypeByWidth(TypeWidth, IsSigned);
if (Ty == TargetInfo::NoInt)
return;
Index: clang/include/clang/Basic/TargetInfo.h
===================================================================
--- clang/include/clang/Basic/TargetInfo.h
+++ clang/include/clang/Basic/TargetInfo.h
@@ -365,9 +365,21 @@
virtual IntType getIntTypeByWidth(unsigned BitWidth, bool IsSigned) const;
/// Return the smallest integer type with at least the specified width.
+ ///
+ /// This will be used for `{u}int_least<BitWidth>_t` in C.
virtual IntType getLeastIntTypeByWidth(unsigned BitWidth,
bool IsSigned) const;
+ /// Return the "fastest" integer type with at least the specified width.
+ ///
+ /// This will be used for `{u}int_fast<BitWidth>_t` in C.
+ ///
+ /// The default implementation will match getLeastIntTypeByWidth.
+ virtual IntType getFastIntTypeByWidth(unsigned BitWidth,
+ bool IsSigned) const {
+ return getLeastIntTypeByWidth(BitWidth, IsSigned);
+ }
+
/// Return floating point type with specified width. On PPC, there are
/// three possible types for 128-bit floating point: "PPC double-double",
/// IEEE 754R quad precision, and "long double" (which under the covers
Index: clang/lib/Frontend/InitPreprocessor.cpp
===================================================================
--- clang/lib/Frontend/InitPreprocessor.cpp
+++ clang/lib/Frontend/InitPreprocessor.cpp
@@ -257,7 +257,7 @@
const TargetInfo &TI, MacroBuilder &Builder) {
// stdint.h currently defines the fast int types as equivalent to the least
// types.
- TargetInfo::IntType Ty = TI.getLeastIntTypeByWidth(TypeWidth, IsSigned);
+ TargetInfo::IntType Ty = TI.getFastIntTypeByWidth(TypeWidth, IsSigned);
if (Ty == TargetInfo::NoInt)
return;
Index: clang/include/clang/Basic/TargetInfo.h
===================================================================
--- clang/include/clang/Basic/TargetInfo.h
+++ clang/include/clang/Basic/TargetInfo.h
@@ -365,9 +365,21 @@
virtual IntType getIntTypeByWidth(unsigned BitWidth, bool IsSigned) const;
/// Return the smallest integer type with at least the specified width.
+ ///
+ /// This will be used for `{u}int_least<BitWidth>_t` in C.
virtual IntType getLeastIntTypeByWidth(unsigned BitWidth,
bool IsSigned) const;
+ /// Return the "fastest" integer type with at least the specified width.
+ ///
+ /// This will be used for `{u}int_fast<BitWidth>_t` in C.
+ ///
+ /// The default implementation will match getLeastIntTypeByWidth.
+ virtual IntType getFastIntTypeByWidth(unsigned BitWidth,
+ bool IsSigned) const {
+ return getLeastIntTypeByWidth(BitWidth, IsSigned);
+ }
+
/// Return floating point type with specified width. On PPC, there are
/// three possible types for 128-bit floating point: "PPC double-double",
/// IEEE 754R quad precision, and "long double" (which under the covers
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits