-
Notifications
You must be signed in to change notification settings - Fork 14.5k
[AArch64][SME] Instcombine llvm.aarch64.sme.in.streaming.mode()
#147930
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This can fold away in non-streaming-compatible functions.
@llvm/pr-subscribers-llvm-transforms @llvm/pr-subscribers-backend-aarch64 Author: Benjamin Maxwell (MacDue) ChangesThis can fold away in non-streaming-compatible functions. Full diff: https://github.com/llvm/llvm-project/pull/147930.diff 2 Files Affected:
diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
index adc905384bf53..9e64e33818781 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());
+ if (FnSMEAttrs.hasStreamingCompatibleInterface())
+ return std::nullopt;
+ bool IsStreaming = FnSMEAttrs.hasStreamingInterfaceOrBody();
+ return IC.replaceInstUsesWith(
+ II, ConstantInt::getBool(II.getType(), IsStreaming));
+}
+
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..c46f5c48429d3
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/AArch64/aarch64-sme-in-streaming-mode.ll
@@ -0,0 +1,38 @@
+; 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_body() "aarch64_pstate_sm_body" {
+; CHECK-LABEL: define i1 @test_in_streaming_mode_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_non_streaming() {
+; CHECK-LABEL: define i1 @test_in_streaming_mode_non_streaming(
+; CHECK-SAME: ) #[[ATTR3:[0-9]+]] {
+; CHECK-NEXT: ret i1 false
+;
+ %sm = tail call i1 @llvm.aarch64.sme.in.streaming.mode()
+ ret i1 %sm
+}
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Realized I missed an edge case of aarch64_pstate_sm_compatible + aarch64_pstate_sm_body:
llvm/test/Transforms/InstCombine/AArch64/aarch64-sme-in-streaming-mode.ll
Show resolved
Hide resolved
llvm/test/Transforms/InstCombine/AArch64/aarch64-sme-in-streaming-mode.ll
Outdated
Show resolved
Hide resolved
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/205/builds/15320 Here is the relevant piece of the build log for the reference
|
This can fold away in functions with known streaming modes.