[llvm] 43a9ec2 - [AArch64][SME] Instcombine `llvm.aarch64.sme.in.streaming.mode()` (#147930)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 13 05:20:23 PDT 2025
Author: Benjamin Maxwell
Date: 2025-07-13T13:20:20+01:00
New Revision: 43a9ec2ecdf4aac8966e3b02e4e92c794f5b6a27
URL: https://github.com/llvm/llvm-project/commit/43a9ec2ecdf4aac8966e3b02e4e92c794f5b6a27
DIFF: https://github.com/llvm/llvm-project/commit/43a9ec2ecdf4aac8966e3b02e4e92c794f5b6a27.diff
LOG: [AArch64][SME] Instcombine `llvm.aarch64.sme.in.streaming.mode()` (#147930)
This can fold away in functions with known streaming modes.
Added:
llvm/test/Transforms/InstCombine/AArch64/aarch64-sme-in-streaming-mode.ll
Modified:
llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
index c04cbc80bc5b6..392f1f6efa997 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
@@ -2723,6 +2723,16 @@ static std::optional<Instruction *> instCombineSVEUxt(InstCombiner &IC,
return std::nullopt;
}
+static std::optional<Instruction *>
+instCombineInStreamingMode(InstCombiner &IC, IntrinsicInst &II) {
+ SMEAttrs FnSMEAttrs(*II.getFunction());
+ bool IsStreaming = FnSMEAttrs.hasStreamingInterfaceOrBody();
+ if (IsStreaming || !FnSMEAttrs.hasStreamingCompatibleInterface())
+ return IC.replaceInstUsesWith(
+ II, ConstantInt::getBool(II.getType(), IsStreaming));
+ return std::nullopt;
+}
+
std::optional<Instruction *>
AArch64TTIImpl::instCombineIntrinsic(InstCombiner &IC,
IntrinsicInst &II) const {
@@ -2828,6 +2838,8 @@ AArch64TTIImpl::instCombineIntrinsic(InstCombiner &IC,
return instCombineSVEUxt(IC, II, 16);
case Intrinsic::aarch64_sve_uxtw:
return instCombineSVEUxt(IC, II, 32);
+ case Intrinsic::aarch64_sme_in_streaming_mode:
+ return instCombineInStreamingMode(IC, II);
}
return std::nullopt;
diff --git a/llvm/test/Transforms/InstCombine/AArch64/aarch64-sme-in-streaming-mode.ll b/llvm/test/Transforms/InstCombine/AArch64/aarch64-sme-in-streaming-mode.ll
new file mode 100644
index 0000000000000..e8170ba3106a6
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/AArch64/aarch64-sme-in-streaming-mode.ll
@@ -0,0 +1,48 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
+; RUN: opt -passes=instcombine -mtriple aarch64 -mattr=+sme -S -o - < %s | FileCheck %s
+
+define i1 @test_in_streaming_mode_streaming_compatible() "aarch64_pstate_sm_compatible" {
+; CHECK-LABEL: define i1 @test_in_streaming_mode_streaming_compatible(
+; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT: [[SM:%.*]] = tail call i1 @llvm.aarch64.sme.in.streaming.mode()
+; CHECK-NEXT: ret i1 [[SM]]
+;
+ %sm = tail call i1 @llvm.aarch64.sme.in.streaming.mode()
+ ret i1 %sm
+}
+
+define i1 @test_in_streaming_mode_streaming() "aarch64_pstate_sm_enabled" {
+; CHECK-LABEL: define i1 @test_in_streaming_mode_streaming(
+; CHECK-SAME: ) #[[ATTR1:[0-9]+]] {
+; CHECK-NEXT: ret i1 true
+;
+ %sm = tail call i1 @llvm.aarch64.sme.in.streaming.mode()
+ ret i1 %sm
+}
+
+define i1 @test_in_streaming_mode_streaming_compatible_streaming_body() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
+; CHECK-LABEL: define i1 @test_in_streaming_mode_streaming_compatible_streaming_body(
+; CHECK-SAME: ) #[[ATTR2:[0-9]+]] {
+; CHECK-NEXT: ret i1 true
+;
+ %sm = tail call i1 @llvm.aarch64.sme.in.streaming.mode()
+ ret i1 %sm
+}
+
+define i1 @test_in_streaming_mode_streaming_body() "aarch64_pstate_sm_body" {
+; CHECK-LABEL: define i1 @test_in_streaming_mode_streaming_body(
+; CHECK-SAME: ) #[[ATTR3:[0-9]+]] {
+; CHECK-NEXT: ret i1 true
+;
+ %sm = tail call i1 @llvm.aarch64.sme.in.streaming.mode()
+ ret i1 %sm
+}
+
+define i1 @test_in_streaming_mode_non_streaming() {
+; CHECK-LABEL: define i1 @test_in_streaming_mode_non_streaming(
+; CHECK-SAME: ) #[[ATTR4:[0-9]+]] {
+; CHECK-NEXT: ret i1 false
+;
+ %sm = tail call i1 @llvm.aarch64.sme.in.streaming.mode()
+ ret i1 %sm
+}
More information about the llvm-commits
mailing list