https://github.com/xlauko created https://github.com/llvm/llvm-project/pull/146660
This will in future allow to use builtin integer types within cir operations This mirrors incubat changes from https://github.com/llvm/clangir/pull/1724 >From bd00b5a9ab5a2ee596302da5f799b7652afbcfbc Mon Sep 17 00:00:00 2001 From: xlauko <xla...@mail.muni.cz> Date: Wed, 2 Jul 2025 09:10:49 +0200 Subject: [PATCH] [CIR] Introduce IntTypeInterface to allow uniform integer types handling This will in future allow to use builtin integer types within cir operations This mirrors incubat changes from https://github.com/llvm/clangir/pull/1724 --- .../include/clang/CIR/Dialect/IR/CIRTypes.td | 3 +- .../clang/CIR/Interfaces/CIRTypeInterfaces.td | 42 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/CIR/Dialect/IR/CIRTypes.td b/clang/include/clang/CIR/Dialect/IR/CIRTypes.td index bfe42562abad7..898c26d22f6d1 100644 --- a/clang/include/clang/CIR/Dialect/IR/CIRTypes.td +++ b/clang/include/clang/CIR/Dialect/IR/CIRTypes.td @@ -35,7 +35,8 @@ class CIR_Type<string name, string typeMnemonic, list<Trait> traits = [], def CIR_IntType : CIR_Type<"Int", "int", [ DeclareTypeInterfaceMethods<DataLayoutTypeInterface>, - DeclareTypeInterfaceMethods<CIR_SizedTypeInterface> + DeclareTypeInterfaceMethods<CIR_SizedTypeInterface>, + DeclareTypeInterfaceMethods<CIR_IntTypeInterface>, ]> { let summary = "Integer type with arbitrary precision up to a fixed limit"; let description = [{ diff --git a/clang/include/clang/CIR/Interfaces/CIRTypeInterfaces.td b/clang/include/clang/CIR/Interfaces/CIRTypeInterfaces.td index 1b1acf749e773..cf6c8571ddcd9 100644 --- a/clang/include/clang/CIR/Interfaces/CIRTypeInterfaces.td +++ b/clang/include/clang/CIR/Interfaces/CIRTypeInterfaces.td @@ -15,6 +15,48 @@ include "mlir/IR/OpBase.td" +def CIR_IntTypeInterface : TypeInterface<"IntTypeInterface"> { + let description = [{ + Contains helper functions to query properties about an integer type. + }]; + let cppNamespace = "::cir"; + let methods = [ + InterfaceMethod<[{ + Returns true if this is a signed integer type. + }], + /*retTy=*/"bool", + /*methodName=*/"isSigned", + /*args=*/(ins), + /*methodBody=*/"", + /*defaultImplementation=*/[{ + return $_type.isSigned(); + }] + >, + InterfaceMethod<[{ + Returns true if this is an unsigned integer type. + }], + /*retTy=*/"bool", + /*methodName=*/"isUnsigned", + /*args=*/(ins), + /*methodBody=*/"", + /*defaultImplementation=*/[{ + return $_type.isUnsigned(); + }] + >, + InterfaceMethod<[{ + Returns the bit width of this integer type. + }], + /*retTy=*/"unsigned", + /*methodName=*/"getWidth", + /*args=*/(ins), + /*methodBody=*/"", + /*defaultImplementation=*/[{ + return $_type.getWidth(); + }] + > + ]; +} + def CIR_FPTypeInterface : TypeInterface<"FPTypeInterface"> { let description = [{ Contains helper functions to query properties about a floating-point type. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits