================
@@ -49,22 +49,37 @@ def CIR_IntType : CIR_Type<"Int", "int", [
Those integer types that are directly available in C/C++ standard are
called
fundamental integer types. Said types are: `signed char`, `short`, `int`,
`long`, `long long`, and their unsigned variations.
+
+ Examples: `!cir.int<s, 32>`, `!cir.int<u, 64>`, `!cir.int<s, 128, bitint>`
}];
- let parameters = (ins "unsigned":$width, "bool":$isSigned);
+ let parameters = (ins "unsigned":$width, "bool":$is_signed,
+ DefaultValuedParameter<"bool", "false">:$is_bit_int);
+ let builders = [
+ TypeBuilder<(ins "unsigned":$width, "bool":$is_signed), [{
+ return $_get($_ctxt, width, is_signed, /*is_bit_int=*/false);
+ }]>,
+ ];
let hasCustomAssemblyFormat = 1;
let extraClassDeclaration = [{
/// Return true if this is a signed integer type.
bool isSigned() const { return getIsSigned(); }
/// Return true if this is an unsigned integer type.
bool isUnsigned() const { return !getIsSigned(); }
+ /// Return true if this is a _BitInt type.
+ bool isBitInt() const { return getIsBitInt(); }
/// Return type alias.
std::string getAlias() const {
- return (isSigned() ? 's' : 'u') + std::to_string(getWidth()) + 'i';
+ std::string alias =
+ (isSigned() ? 's' : 'u') + std::to_string(getWidth()) + 'i';
+ if (isBitInt())
+ alias += "_bitint";
+ return alias;
}
/// Return true if this is a fundamental integer type (i.e. signed or
/// unsigned integer types whose bit width is 8, 16, 32, or 64).
+ /// _BitInt types are never fundamental even if their width matches.
bool isFundamental() const {
- return isFundamentalIntType(*this);
+ return !isBitInt() && isFundamentalIntType(*this);
----------------
erichkeane wrote:
This doesn't seem right to me. Having `isFundamentalIntType` and
`isFundamental` be DIFFERENT seems really wrong.
We should be changing the definition of `CIR_AnyFundamentalIntType`,
`CIR_AnyFundamentalUIntType`, and `CIR_AnyFundamentalSIntType` instead to
exclude bitint types.
https://github.com/llvm/llvm-project/pull/188113
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits