[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