[Mlir-commits] [mlir] [mlir][llvm] Add nontemporal field to llvm.intr.masked.store (PR #205566)
lonely eagle
llvmlistbot at llvm.org
Wed Jun 24 07:30:57 PDT 2026
https://github.com/linuxlonelyeagle updated https://github.com/llvm/llvm-project/pull/205566
>From 52dfd37715f45ea5d1db3abcb31918b75278ad2a Mon Sep 17 00:00:00 2001
From: linuxlonelyeagle <2020382038 at qq.com>
Date: Wed, 24 Jun 2026 13:55:20 +0000
Subject: [PATCH 1/2] add nontemporal to llvm.intr.masked.store.
---
.../include/mlir/Dialect/LLVMIR/LLVMIntrinsicOps.td | 13 ++++++++-----
mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir | 3 +++
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMIntrinsicOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMIntrinsicOps.td
index 92f0193cdadad..73629b95a06e5 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/LLVMIntrinsicOps.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMIntrinsicOps.td
@@ -1124,22 +1124,25 @@ def LLVM_MaskedLoadOp : LLVM_OneResultIntrOp<"masked.load"> {
/// Create a call to Masked Store intrinsic.
def LLVM_MaskedStoreOp : LLVM_ZeroResultIntrOp<"masked.store"> {
let arguments = (ins LLVM_AnyVector:$value, LLVM_AnyPointer:$data,
- LLVM_VectorOf<I1>:$mask, I32Attr:$alignment);
+ LLVM_VectorOf<I1>:$mask, I32Attr:$alignment,
+ UnitAttr:$nontemporal);
let builders = [LLVM_VoidResultTypeOpBuilder, LLVM_ZeroResultOpBuilder];
let assemblyFormat = "$value `,` $data `,` $mask attr-dict `:` "
"type($value) `,` type($mask) `into` qualified(type($data))";
string llvmBuilder = [{
- builder.CreateMaskedStore(
+ auto *inst = builder.CreateMaskedStore(
$value, $data, llvm::Align($alignment), $mask);
- }];
+ }] #setNonTemporalMetadataCode;
string mlirBuilder = [{
auto *intrinInst = dyn_cast<llvm::IntrinsicInst>(inst);
llvm::Align alignment = intrinInst->getParamAlign(1).valueOrOne();
+ bool nontemporal = intrinInst->hasMetadata(llvm::LLVMContext::MD_nontemporal);
$_op = LLVM::MaskedStoreOp::create($_builder, $_location,
- $value, $data, $mask, $_builder.getI32IntegerAttr(alignment.value()));
+ $value, $data, $mask, $_builder.getI32IntegerAttr(alignment.value()),
+ nontemporal ? $_builder.getUnitAttr() : nullptr);
}];
- list<int> llvmArgIndices = [0, 1, 2, -1];
+ list<int> llvmArgIndices = [0, 1, 2, -1, -1];
}
/// Create a call to Masked Gather intrinsic.
diff --git a/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir b/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir
index 293a56a82b23c..ccb8b1aa0a3d6 100644
--- a/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir
+++ b/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir
@@ -566,6 +566,9 @@ llvm.func @masked_load_store_intrinsics(%A: !llvm.ptr, %mask: vector<7xi1>) {
// CHECK: call void @llvm.masked.store.v7f32.p0(<7 x float> %{{.*}}, ptr align 1 %0, <7 x i1> %{{.*}})
llvm.intr.masked.store %b, %A, %mask { alignment = 1: i32} :
vector<7xf32>, vector<7xi1> into !llvm.ptr
+ // CHECK: call void @llvm.masked.store.v7f32.p0(<7 x float> %{{.*}}, ptr align 1 %0, <7 x i1> %{{.*}}), !nontemporal !1
+ llvm.intr.masked.store %b, %A, %mask { alignment = 1: i32, nontemporal} :
+ vector<7xf32>, vector<7xi1> into !llvm.ptr
llvm.return
}
>From f5bf9dc222190e258f2e733e4964aab2ba389b53 Mon Sep 17 00:00:00 2001
From: linuxlonelyeagle <2020382038 at qq.com>
Date: Wed, 24 Jun 2026 14:30:33 +0000
Subject: [PATCH 2/2] update test.
---
mlir/test/Target/LLVMIR/Import/intrinsic.ll | 3 +++
1 file changed, 3 insertions(+)
diff --git a/mlir/test/Target/LLVMIR/Import/intrinsic.ll b/mlir/test/Target/LLVMIR/Import/intrinsic.ll
index 959a04fff6dca..d3427b4ab9771 100644
--- a/mlir/test/Target/LLVMIR/Import/intrinsic.ll
+++ b/mlir/test/Target/LLVMIR/Import/intrinsic.ll
@@ -517,6 +517,9 @@ define void @masked_load_store_intrinsics(ptr %vec, <7 x i1> %mask) {
; CHECK: llvm.intr.masked.store %[[VAL2]], %[[VEC]], %[[MASK]] {alignment = 8 : i32}
; CHECK-SAME: vector<7xf32>, vector<7xi1> into !llvm.ptr
call void @llvm.masked.store.v7f32.p0(<7 x float> %2, ptr %vec, i32 8, <7 x i1> %mask)
+ ; CHECK: llvm.intr.masked.store %[[VAL2]], %[[VEC]], %[[MASK]] {alignment = 8 : i32, nontemporal}
+ ; CHECK-SAME: vector<7xf32>, vector<7xi1> into !llvm.ptr
+ call void @llvm.masked.store.v7f32.p0(<7 x float> %2, ptr %vec, i32 8, <7 x i1> %mask), !nontemporal !{i32 1}
ret void
}
More information about the Mlir-commits
mailing list