[Mlir-commits] [mlir] aea7403 - [MLIR][LLVMIR] Add elementtype attribute (#129918)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Mar 5 15:21:49 PST 2025
Author: Bruno Cardoso Lopes
Date: 2025-03-05T15:21:45-08:00
New Revision: aea74034ebd9b630e24d82872ef632086907600c
URL: https://github.com/llvm/llvm-project/commit/aea74034ebd9b630e24d82872ef632086907600c
DIFF: https://github.com/llvm/llvm-project/commit/aea74034ebd9b630e24d82872ef632086907600c.diff
LOG: [MLIR][LLVMIR] Add elementtype attribute (#129918)
These are very common when using intrinsics (e.g. ARM NEON).
For more context: ClangIR has currently been blocked on such intrinsics
emission because of this lacking capability.
Added:
Modified:
mlir/include/mlir/Dialect/LLVMIR/LLVMDialect.td
mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
mlir/lib/Target/LLVMIR/AttrKindDetail.h
mlir/test/Dialect/LLVMIR/call-intrin.mlir
mlir/test/Target/LLVMIR/Import/intrinsic-unregistered.ll
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMDialect.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMDialect.td
index b5526bda9f2de..d35f48b13b2d8 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/LLVMDialect.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMDialect.td
@@ -44,6 +44,7 @@ def LLVM_Dialect : Dialect {
static StringRef getNoUndefAttrName() { return "llvm.noundef"; }
static StringRef getDereferenceableAttrName() { return "llvm.dereferenceable"; }
static StringRef getDereferenceableOrNullAttrName() { return "llvm.dereferenceable_or_null"; }
+ static StringRef getElementTypeAttrName() { return "llvm.elementtype"; }
static StringRef getInAllocaAttrName() { return "llvm.inalloca"; }
static StringRef getInRegAttrName() { return "llvm.inreg"; }
static StringRef getNestAttrName() { return "llvm.nest"; }
diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
index d37f9f97fffe3..8a6325af201f4 100644
--- a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
+++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
@@ -3942,6 +3942,7 @@ LogicalResult LLVMDialect::verifyParameterAttribute(Operation *op,
if (name == LLVMDialect::getStructRetAttrName() ||
name == LLVMDialect::getByValAttrName() ||
name == LLVMDialect::getByRefAttrName() ||
+ name == LLVMDialect::getElementTypeAttrName() ||
name == LLVMDialect::getInAllocaAttrName() ||
name == LLVMDialect::getPreallocatedAttrName()) {
if (failed(checkTypeAttrType()))
diff --git a/mlir/lib/Target/LLVMIR/AttrKindDetail.h b/mlir/lib/Target/LLVMIR/AttrKindDetail.h
index 19ffc02aba3c6..051ed1edc4fd1 100644
--- a/mlir/lib/Target/LLVMIR/AttrKindDetail.h
+++ b/mlir/lib/Target/LLVMIR/AttrKindDetail.h
@@ -35,6 +35,8 @@ getAttrKindToNameMapping() {
LLVMDialect::getDereferenceableAttrName()},
{llvm::Attribute::AttrKind::DereferenceableOrNull,
LLVMDialect::getDereferenceableOrNullAttrName()},
+ {llvm::Attribute::AttrKind::ElementType,
+ LLVMDialect::getElementTypeAttrName()},
{llvm::Attribute::AttrKind::InAlloca, LLVMDialect::getInAllocaAttrName()},
{llvm::Attribute::AttrKind::InReg, LLVMDialect::getInRegAttrName()},
{llvm::Attribute::AttrKind::Nest, LLVMDialect::getNestAttrName()},
diff --git a/mlir/test/Dialect/LLVMIR/call-intrin.mlir b/mlir/test/Dialect/LLVMIR/call-intrin.mlir
index ea15ec2d5f654..b8d845d7ebfe0 100644
--- a/mlir/test/Dialect/LLVMIR/call-intrin.mlir
+++ b/mlir/test/Dialect/LLVMIR/call-intrin.mlir
@@ -114,3 +114,12 @@ llvm.func @intrinsic_call_arg_attrs(%arg0: i32) -> i32 {
%0 = llvm.call_intrinsic "llvm.riscv.sha256sig0"(%arg0) : (i32 {llvm.signext}) -> (i32)
llvm.return %0 : i32
}
+
+// -----
+
+// CHECK-LABEL: intrinsic_element_type
+llvm.func @intrinsic_element_type(%arg0: !llvm.ptr) {
+ // CHECK: call i64 @llvm.aarch64.ldxr.p0(ptr elementtype(i8) %{{.*}})
+ %0 = llvm.call_intrinsic "llvm.aarch64.ldxr.p0"(%arg0) : (!llvm.ptr {llvm.elementtype = i8}) -> i64
+ llvm.return
+}
diff --git a/mlir/test/Target/LLVMIR/Import/intrinsic-unregistered.ll b/mlir/test/Target/LLVMIR/Import/intrinsic-unregistered.ll
index 5afc29a5642fc..ca5cc7f3a3ccd 100644
--- a/mlir/test/Target/LLVMIR/Import/intrinsic-unregistered.ll
+++ b/mlir/test/Target/LLVMIR/Import/intrinsic-unregistered.ll
@@ -9,7 +9,7 @@ define dso_local void @t0(ptr %a) {
; CHECK-LABEL: llvm.func @llvm.aarch64.ldxr.p0(!llvm.ptr)
; CHECK-LABEL: llvm.func @t0
-; CHECK: llvm.call_intrinsic "llvm.aarch64.ldxr.p0"({{.*}}) : (!llvm.ptr) -> i64
+; CHECK: llvm.call_intrinsic "llvm.aarch64.ldxr.p0"({{.*}}) : (!llvm.ptr {llvm.elementtype = i8}) -> i64
; CHECK: llvm.return
; CHECK: }
More information about the Mlir-commits
mailing list