[clang] [CIR] Introduce IntTypeInterface to allow uniform integer types handling (PR #146660)
Henrich Lauko via cfe-commits
cfe-commits at lists.llvm.org
Wed Jul 2 07:27:16 PDT 2025
https://github.com/xlauko updated https://github.com/llvm/llvm-project/pull/146660
>From 8fb5297b734b7316a5fa0f811859d614b0d3aa1d Mon Sep 17 00:00:00 2001
From: xlauko <xlauko at 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.
More information about the cfe-commits
mailing list