[llvm-branch-commits] [llvm] PR for llvm/llvm-project#80137 (PR #80138)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Jan 31 22:30:20 PST 2024
https://github.com/llvmbot updated https://github.com/llvm/llvm-project/pull/80138
>From e502141a420a65a4ea534274e07a023a3801fa76 Mon Sep 17 00:00:00 2001
From: Sander de Smalen <sander.desmalen at arm.com>
Date: Wed, 31 Jan 2024 11:38:29 +0000
Subject: [PATCH] [AArch64][SME] Fix inlining bug introduced in #78703 (#79994)
Calling a `__arm_locally_streaming` function from a function that
is not a streaming-SVE function would lead to incorrect inlining.
The issue didn't surface because the tests were not testing what
they were supposed to test.
(cherry picked from commit 3abf55a68caefd45042c27b73a658c638afbbb8b)
---
.../AArch64/AArch64TargetTransformInfo.cpp | 17 +-
.../Inline/AArch64/sme-pstatesm-attrs.ll | 369 +++++++++---------
2 files changed, 195 insertions(+), 191 deletions(-)
diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
index d611338fc268f..992b11da7eeee 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
@@ -233,15 +233,20 @@ static bool hasPossibleIncompatibleOps(const Function *F) {
bool AArch64TTIImpl::areInlineCompatible(const Function *Caller,
const Function *Callee) const {
- SMEAttrs CallerAttrs(*Caller);
- SMEAttrs CalleeAttrs(*Callee);
+ SMEAttrs CallerAttrs(*Caller), CalleeAttrs(*Callee);
+
+ // When inlining, we should consider the body of the function, not the
+ // interface.
+ if (CalleeAttrs.hasStreamingBody()) {
+ CalleeAttrs.set(SMEAttrs::SM_Compatible, false);
+ CalleeAttrs.set(SMEAttrs::SM_Enabled, true);
+ }
+
if (CalleeAttrs.hasNewZABody())
return false;
if (CallerAttrs.requiresLazySave(CalleeAttrs) ||
- (CallerAttrs.requiresSMChange(CalleeAttrs) &&
- (!CallerAttrs.hasStreamingInterfaceOrBody() ||
- !CalleeAttrs.hasStreamingBody()))) {
+ CallerAttrs.requiresSMChange(CalleeAttrs)) {
if (hasPossibleIncompatibleOps(Callee))
return false;
}
@@ -4062,4 +4067,4 @@ bool AArch64TTIImpl::shouldTreatInstructionLikeSelect(const Instruction *I) {
cast<BranchInst>(I->getNextNode())->isUnconditional())
return true;
return BaseT::shouldTreatInstructionLikeSelect(I);
-}
\ No newline at end of file
+}
diff --git a/llvm/test/Transforms/Inline/AArch64/sme-pstatesm-attrs.ll b/llvm/test/Transforms/Inline/AArch64/sme-pstatesm-attrs.ll
index d6b1f3ef45e76..7723e6c664c3d 100644
--- a/llvm/test/Transforms/Inline/AArch64/sme-pstatesm-attrs.ll
+++ b/llvm/test/Transforms/Inline/AArch64/sme-pstatesm-attrs.ll
@@ -1,71 +1,70 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
; RUN: opt < %s -mtriple=aarch64-unknown-linux-gnu -mattr=+sme -S -passes=inline | FileCheck %s
-declare void @inlined_body() "aarch64_pstate_sm_compatible";
+declare i32 @llvm.vscale.i32()
-; Define some functions that will be called by the functions below.
-; These just call a '...body()' function. If we see the call to one of
-; these functions being replaced by '...body()', then we know it has been
-; inlined.
+; Define some functions that merely call llvm.vscale.i32(), which will be called
+; by the other functions below. If we see the call to one of these functions
+; being replaced by 'llvm.vscale()', then we know it has been inlined.
-define void @normal_callee() {
-; CHECK-LABEL: define void @normal_callee
+define i32 @normal_callee() {
+; CHECK-LABEL: define i32 @normal_callee
; CHECK-SAME: () #[[ATTR1:[0-9]+]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES]]
;
entry:
- call void @inlined_body()
- ret void
+ %res = call i32 @llvm.vscale.i32()
+ ret i32 %res
}
-define void @streaming_callee() "aarch64_pstate_sm_enabled" {
-; CHECK-LABEL: define void @streaming_callee
+define i32 @streaming_callee() "aarch64_pstate_sm_enabled" {
+; CHECK-LABEL: define i32 @streaming_callee
; CHECK-SAME: () #[[ATTR2:[0-9]+]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES]]
;
entry:
- call void @inlined_body()
- ret void
+ %res = call i32 @llvm.vscale.i32()
+ ret i32 %res
}
-define void @locally_streaming_callee() "aarch64_pstate_sm_body" {
-; CHECK-LABEL: define void @locally_streaming_callee
+define i32 @locally_streaming_callee() "aarch64_pstate_sm_body" {
+; CHECK-LABEL: define i32 @locally_streaming_callee
; CHECK-SAME: () #[[ATTR3:[0-9]+]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES]]
;
entry:
- call void @inlined_body()
- ret void
+ %res = call i32 @llvm.vscale.i32()
+ ret i32 %res
}
-define void @streaming_compatible_callee() "aarch64_pstate_sm_compatible" {
-; CHECK-LABEL: define void @streaming_compatible_callee
+define i32 @streaming_compatible_callee() "aarch64_pstate_sm_compatible" {
+; CHECK-LABEL: define i32 @streaming_compatible_callee
; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES]]
;
entry:
- call void @inlined_body()
- ret void
+ %res = call i32 @llvm.vscale.i32()
+ ret i32 %res
}
-define void @streaming_compatible_locally_streaming_callee() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
-; CHECK-LABEL: define void @streaming_compatible_locally_streaming_callee
+define i32 @streaming_compatible_locally_streaming_callee() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
+; CHECK-LABEL: define i32 @streaming_compatible_locally_streaming_callee
; CHECK-SAME: () #[[ATTR4:[0-9]+]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES]]
;
entry:
- call void @inlined_body()
- ret void
+ %res = call i32 @llvm.vscale()
+ ret i32 %res
}
; Now test that inlining only happens when their streaming modes match.
@@ -85,16 +84,16 @@ entry:
; [ ] N -> SC
; [ ] N -> N + B
; [ ] N -> SC + B
-define void @normal_caller_normal_callee_inline() {
-; CHECK-LABEL: define void @normal_caller_normal_callee_inline
+define i32 @normal_caller_normal_callee_inline() {
+; CHECK-LABEL: define i32 @normal_caller_normal_callee_inline
; CHECK-SAME: () #[[ATTR1]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES_I:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES_I]]
;
entry:
- call void @normal_callee()
- ret void
+ %res = call i32 @normal_callee()
+ ret i32 %res
}
; [ ] N -> N
@@ -102,16 +101,16 @@ entry:
; [ ] N -> SC
; [ ] N -> N + B
; [ ] N -> SC + B
-define void @normal_caller_streaming_callee_inline() {
-; CHECK-LABEL: define void @normal_caller_streaming_callee_inline
+define i32 @normal_caller_streaming_callee_dont_inline() {
+; CHECK-LABEL: define i32 @normal_caller_streaming_callee_dont_inline
; CHECK-SAME: () #[[ATTR1]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES:%.*]] = call i32 @streaming_callee()
+; CHECK-NEXT: ret i32 [[RES]]
;
entry:
- call void @streaming_callee()
- ret void
+ %res = call i32 @streaming_callee()
+ ret i32 %res
}
; [ ] N -> N
@@ -119,16 +118,16 @@ entry:
; [x] N -> SC
; [ ] N -> N + B
; [ ] N -> SC + B
-define void @normal_caller_streaming_compatible_callee_inline() {
-; CHECK-LABEL: define void @normal_caller_streaming_compatible_callee_inline
+define i32 @normal_caller_streaming_compatible_callee_inline() {
+; CHECK-LABEL: define i32 @normal_caller_streaming_compatible_callee_inline
; CHECK-SAME: () #[[ATTR1]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES_I:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES_I]]
;
entry:
- call void @streaming_compatible_callee()
- ret void
+ %res = call i32 @streaming_compatible_callee()
+ ret i32 %res
}
; [ ] N -> N
@@ -136,16 +135,16 @@ entry:
; [ ] N -> SC
; [x] N -> N + B
; [ ] N -> SC + B
-define void @normal_caller_locally_streaming_callee_inline() {
-; CHECK-LABEL: define void @normal_caller_locally_streaming_callee_inline
+define i32 @normal_caller_locally_streaming_callee_dont_inline() {
+; CHECK-LABEL: define i32 @normal_caller_locally_streaming_callee_dont_inline
; CHECK-SAME: () #[[ATTR1]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES:%.*]] = call i32 @locally_streaming_callee()
+; CHECK-NEXT: ret i32 [[RES]]
;
entry:
- call void @locally_streaming_callee()
- ret void
+ %res = call i32 @locally_streaming_callee()
+ ret i32 %res
}
; [ ] N -> N
@@ -153,16 +152,16 @@ entry:
; [ ] N -> SC
; [ ] N -> N + B
; [x] N -> SC + B
-define void @normal_caller_streaming_compatible_locally_streaming_callee_inline() {
-; CHECK-LABEL: define void @normal_caller_streaming_compatible_locally_streaming_callee_inline
+define i32 @normal_caller_streaming_compatible_locally_streaming_callee_dont_inline() {
+; CHECK-LABEL: define i32 @normal_caller_streaming_compatible_locally_streaming_callee_dont_inline
; CHECK-SAME: () #[[ATTR1]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES:%.*]] = call i32 @streaming_compatible_locally_streaming_callee()
+; CHECK-NEXT: ret i32 [[RES]]
;
entry:
- call void @streaming_compatible_locally_streaming_callee()
- ret void
+ %res = call i32 @streaming_compatible_locally_streaming_callee()
+ ret i32 %res
}
; [x] S -> N
@@ -170,16 +169,16 @@ entry:
; [ ] S -> SC
; [ ] S -> N + B
; [ ] S -> SC + B
-define void @streaming_caller_normal_callee_inline() "aarch64_pstate_sm_enabled" {
-; CHECK-LABEL: define void @streaming_caller_normal_callee_inline
+define i32 @streaming_caller_normal_callee_dont_inline() "aarch64_pstate_sm_enabled" {
+; CHECK-LABEL: define i32 @streaming_caller_normal_callee_dont_inline
; CHECK-SAME: () #[[ATTR2]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES:%.*]] = call i32 @normal_callee()
+; CHECK-NEXT: ret i32 [[RES]]
;
entry:
- call void @normal_callee()
- ret void
+ %res = call i32 @normal_callee()
+ ret i32 %res
}
; [ ] S -> N
@@ -187,16 +186,16 @@ entry:
; [ ] S -> SC
; [ ] S -> N + B
; [ ] S -> SC + B
-define void @streaming_caller_streaming_callee_inline() "aarch64_pstate_sm_enabled" {
-; CHECK-LABEL: define void @streaming_caller_streaming_callee_inline
+define i32 @streaming_caller_streaming_callee_inline() "aarch64_pstate_sm_enabled" {
+; CHECK-LABEL: define i32 @streaming_caller_streaming_callee_inline
; CHECK-SAME: () #[[ATTR2]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES_I:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES_I]]
;
entry:
- call void @streaming_callee()
- ret void
+ %res = call i32 @streaming_callee()
+ ret i32 %res
}
; [ ] S -> N
@@ -204,16 +203,16 @@ entry:
; [x] S -> SC
; [ ] S -> N + B
; [ ] S -> SC + B
-define void @streaming_caller_streaming_compatible_callee_inline() "aarch64_pstate_sm_enabled" {
-; CHECK-LABEL: define void @streaming_caller_streaming_compatible_callee_inline
+define i32 @streaming_caller_streaming_compatible_callee_inline() "aarch64_pstate_sm_enabled" {
+; CHECK-LABEL: define i32 @streaming_caller_streaming_compatible_callee_inline
; CHECK-SAME: () #[[ATTR2]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES_I:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES_I]]
;
entry:
- call void @streaming_compatible_callee()
- ret void
+ %res = call i32 @streaming_compatible_callee()
+ ret i32 %res
}
; [ ] S -> N
@@ -221,16 +220,16 @@ entry:
; [ ] S -> SC
; [x] S -> N + B
; [ ] S -> SC + B
-define void @streaming_caller_locally_streaming_callee_inline() "aarch64_pstate_sm_enabled" {
-; CHECK-LABEL: define void @streaming_caller_locally_streaming_callee_inline
+define i32 @streaming_caller_locally_streaming_callee_inline() "aarch64_pstate_sm_enabled" {
+; CHECK-LABEL: define i32 @streaming_caller_locally_streaming_callee_inline
; CHECK-SAME: () #[[ATTR2]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES_I:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES_I]]
;
entry:
- call void @locally_streaming_callee()
- ret void
+ %res = call i32 @locally_streaming_callee()
+ ret i32 %res
}
; [ ] S -> N
@@ -238,16 +237,16 @@ entry:
; [ ] S -> SC
; [ ] S -> N + B
; [x] S -> SC + B
-define void @streaming_caller_streaming_compatible_locally_streaming_callee_inline() "aarch64_pstate_sm_enabled" {
-; CHECK-LABEL: define void @streaming_caller_streaming_compatible_locally_streaming_callee_inline
+define i32 @streaming_caller_streaming_compatible_locally_streaming_callee_inline() "aarch64_pstate_sm_enabled" {
+; CHECK-LABEL: define i32 @streaming_caller_streaming_compatible_locally_streaming_callee_inline
; CHECK-SAME: () #[[ATTR2]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES_I:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES_I]]
;
entry:
- call void @streaming_compatible_locally_streaming_callee()
- ret void
+ %res = call i32 @streaming_compatible_locally_streaming_callee()
+ ret i32 %res
}
; [x] N + B -> N
@@ -255,16 +254,16 @@ entry:
; [ ] N + B -> SC
; [ ] N + B -> N + B
; [ ] N + B -> SC + B
-define void @locally_streaming_caller_normal_callee_inline() "aarch64_pstate_sm_body" {
-; CHECK-LABEL: define void @locally_streaming_caller_normal_callee_inline
+define i32 @locally_streaming_caller_normal_callee_dont_inline() "aarch64_pstate_sm_body" {
+; CHECK-LABEL: define i32 @locally_streaming_caller_normal_callee_dont_inline
; CHECK-SAME: () #[[ATTR3]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES:%.*]] = call i32 @normal_callee()
+; CHECK-NEXT: ret i32 [[RES]]
;
entry:
- call void @normal_callee()
- ret void
+ %res = call i32 @normal_callee()
+ ret i32 %res
}
; [ ] N + B -> N
@@ -272,16 +271,16 @@ entry:
; [ ] N + B -> SC
; [ ] N + B -> N + B
; [ ] N + B -> SC + B
-define void @locally_streaming_caller_streaming_callee_inline() "aarch64_pstate_sm_body" {
-; CHECK-LABEL: define void @locally_streaming_caller_streaming_callee_inline
+define i32 @locally_streaming_caller_streaming_callee_inline() "aarch64_pstate_sm_body" {
+; CHECK-LABEL: define i32 @locally_streaming_caller_streaming_callee_inline
; CHECK-SAME: () #[[ATTR3]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES_I:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES_I]]
;
entry:
- call void @streaming_callee()
- ret void
+ %res = call i32 @streaming_callee()
+ ret i32 %res
}
; [ ] N + B -> N
@@ -289,16 +288,16 @@ entry:
; [x] N + B -> SC
; [ ] N + B -> N + B
; [ ] N + B -> SC + B
-define void @locally_streaming_caller_streaming_compatible_callee_inline() "aarch64_pstate_sm_body" {
-; CHECK-LABEL: define void @locally_streaming_caller_streaming_compatible_callee_inline
+define i32 @locally_streaming_caller_streaming_compatible_callee_inline() "aarch64_pstate_sm_body" {
+; CHECK-LABEL: define i32 @locally_streaming_caller_streaming_compatible_callee_inline
; CHECK-SAME: () #[[ATTR3]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES_I:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES_I]]
;
entry:
- call void @streaming_compatible_callee()
- ret void
+ %res = call i32 @streaming_compatible_callee()
+ ret i32 %res
}
; [ ] N + B -> N
@@ -306,16 +305,16 @@ entry:
; [ ] N + B -> SC
; [x] N + B -> N + B
; [ ] N + B -> SC + B
-define void @locally_streaming_caller_locally_streaming_callee_inline() "aarch64_pstate_sm_body" {
-; CHECK-LABEL: define void @locally_streaming_caller_locally_streaming_callee_inline
+define i32 @locally_streaming_caller_locally_streaming_callee_inline() "aarch64_pstate_sm_body" {
+; CHECK-LABEL: define i32 @locally_streaming_caller_locally_streaming_callee_inline
; CHECK-SAME: () #[[ATTR3]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES_I:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES_I]]
;
entry:
- call void @locally_streaming_callee()
- ret void
+ %res = call i32 @locally_streaming_callee()
+ ret i32 %res
}
; [ ] N + B -> N
@@ -323,16 +322,16 @@ entry:
; [ ] N + B -> SC
; [ ] N + B -> N + B
; [x] N + B -> SC + B
-define void @locally_streaming_caller_streaming_compatible_locally_streaming_callee_inline() "aarch64_pstate_sm_body" {
-; CHECK-LABEL: define void @locally_streaming_caller_streaming_compatible_locally_streaming_callee_inline
+define i32 @locally_streaming_caller_streaming_compatible_locally_streaming_callee_inline() "aarch64_pstate_sm_body" {
+; CHECK-LABEL: define i32 @locally_streaming_caller_streaming_compatible_locally_streaming_callee_inline
; CHECK-SAME: () #[[ATTR3]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES_I:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES_I]]
;
entry:
- call void @streaming_compatible_locally_streaming_callee()
- ret void
+ %res = call i32 @streaming_compatible_locally_streaming_callee()
+ ret i32 %res
}
; [x] SC -> N
@@ -340,16 +339,16 @@ entry:
; [ ] SC -> SC
; [ ] SC -> N + B
; [ ] SC -> SC + B
-define void @streaming_compatible_caller_normal_callee_inline() "aarch64_pstate_sm_compatible" {
-; CHECK-LABEL: define void @streaming_compatible_caller_normal_callee_inline
+define i32 @streaming_compatible_caller_normal_callee_dont_inline() "aarch64_pstate_sm_compatible" {
+; CHECK-LABEL: define i32 @streaming_compatible_caller_normal_callee_dont_inline
; CHECK-SAME: () #[[ATTR0]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES:%.*]] = call i32 @normal_callee()
+; CHECK-NEXT: ret i32 [[RES]]
;
entry:
- call void @normal_callee()
- ret void
+ %res = call i32 @normal_callee()
+ ret i32 %res
}
; [ ] SC -> N
@@ -357,16 +356,16 @@ entry:
; [ ] SC -> SC
; [ ] SC -> N + B
; [ ] SC -> SC + B
-define void @streaming_compatible_caller_streaming_callee_inline() "aarch64_pstate_sm_compatible" {
-; CHECK-LABEL: define void @streaming_compatible_caller_streaming_callee_inline
+define i32 @streaming_compatible_caller_streaming_callee_dont_inline() "aarch64_pstate_sm_compatible" {
+; CHECK-LABEL: define i32 @streaming_compatible_caller_streaming_callee_dont_inline
; CHECK-SAME: () #[[ATTR0]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES:%.*]] = call i32 @streaming_callee()
+; CHECK-NEXT: ret i32 [[RES]]
;
entry:
- call void @streaming_callee()
- ret void
+ %res = call i32 @streaming_callee()
+ ret i32 %res
}
; [ ] SC -> N
@@ -374,16 +373,16 @@ entry:
; [x] SC -> SC
; [ ] SC -> N + B
; [ ] SC -> SC + B
-define void @streaming_compatible_caller_streaming_compatible_callee_inline() "aarch64_pstate_sm_compatible" {
-; CHECK-LABEL: define void @streaming_compatible_caller_streaming_compatible_callee_inline
+define i32 @streaming_compatible_caller_streaming_compatible_callee_inline() "aarch64_pstate_sm_compatible" {
+; CHECK-LABEL: define i32 @streaming_compatible_caller_streaming_compatible_callee_inline
; CHECK-SAME: () #[[ATTR0]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES_I:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES_I]]
;
entry:
- call void @streaming_compatible_callee()
- ret void
+ %res = call i32 @streaming_compatible_callee()
+ ret i32 %res
}
; [ ] SC -> N
@@ -391,16 +390,16 @@ entry:
; [ ] SC -> SC
; [x] SC -> N + B
; [ ] SC -> SC + B
-define void @streaming_compatible_caller_locally_streaming_callee_inline() "aarch64_pstate_sm_compatible" {
-; CHECK-LABEL: define void @streaming_compatible_caller_locally_streaming_callee_inline
+define i32 @streaming_compatible_caller_locally_streaming_callee_dont_inline() "aarch64_pstate_sm_compatible" {
+; CHECK-LABEL: define i32 @streaming_compatible_caller_locally_streaming_callee_dont_inline
; CHECK-SAME: () #[[ATTR0]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES:%.*]] = call i32 @locally_streaming_callee()
+; CHECK-NEXT: ret i32 [[RES]]
;
entry:
- call void @locally_streaming_callee()
- ret void
+ %res = call i32 @locally_streaming_callee()
+ ret i32 %res
}
; [ ] SC -> N
@@ -408,32 +407,32 @@ entry:
; [ ] SC -> SC
; [ ] SC -> N + B
; [x] SC -> SC + B
-define void @streaming_compatible_caller_streaming_compatible_locally_streaming_callee_inline() "aarch64_pstate_sm_compatible" {
-; CHECK-LABEL: define void @streaming_compatible_caller_streaming_compatible_locally_streaming_callee_inline
+define i32 @streaming_compatible_caller_streaming_compatible_locally_streaming_callee_dont_inline() "aarch64_pstate_sm_compatible" {
+; CHECK-LABEL: define i32 @streaming_compatible_caller_streaming_compatible_locally_streaming_callee_dont_inline
; CHECK-SAME: () #[[ATTR0]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES:%.*]] = call i32 @streaming_compatible_locally_streaming_callee()
+; CHECK-NEXT: ret i32 [[RES]]
;
entry:
- call void @streaming_compatible_locally_streaming_callee()
- ret void
+ %res = call i32 @streaming_compatible_locally_streaming_callee()
+ ret i32 %res
}
; [x] SC + B -> N
; [ ] SC + B -> S
; [ ] SC + B -> SC
; [ ] SC + B -> N + B
; [ ] SC + B -> SC + B
-define void @streaming_compatible_locally_streaming_caller_normal_callee_inline() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
-; CHECK-LABEL: define void @streaming_compatible_locally_streaming_caller_normal_callee_inline
+define i32 @streaming_compatible_locally_streaming_caller_normal_callee_dont_inline() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
+; CHECK-LABEL: define i32 @streaming_compatible_locally_streaming_caller_normal_callee_dont_inline
; CHECK-SAME: () #[[ATTR4]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES:%.*]] = call i32 @normal_callee()
+; CHECK-NEXT: ret i32 [[RES]]
;
entry:
- call void @normal_callee()
- ret void
+ %res = call i32 @normal_callee()
+ ret i32 %res
}
; [ ] SC + B -> N
@@ -441,16 +440,16 @@ entry:
; [ ] SC + B -> SC
; [ ] SC + B -> N + B
; [ ] SC + B -> SC + B
-define void @streaming_compatible_locally_streaming_caller_streaming_callee_inline() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
-; CHECK-LABEL: define void @streaming_compatible_locally_streaming_caller_streaming_callee_inline
+define i32 @streaming_compatible_locally_streaming_caller_streaming_callee_inline() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
+; CHECK-LABEL: define i32 @streaming_compatible_locally_streaming_caller_streaming_callee_inline
; CHECK-SAME: () #[[ATTR4]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES_I:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES_I]]
;
entry:
- call void @streaming_callee()
- ret void
+ %res = call i32 @streaming_callee()
+ ret i32 %res
}
; [ ] SC + B -> N
@@ -458,16 +457,16 @@ entry:
; [x] SC + B -> SC
; [ ] SC + B -> N + B
; [ ] SC + B -> SC + B
-define void @streaming_compatible_locally_streaming_caller_streaming_compatible_callee_inline() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
-; CHECK-LABEL: define void @streaming_compatible_locally_streaming_caller_streaming_compatible_callee_inline
+define i32 @streaming_compatible_locally_streaming_caller_streaming_compatible_callee_inline() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
+; CHECK-LABEL: define i32 @streaming_compatible_locally_streaming_caller_streaming_compatible_callee_inline
; CHECK-SAME: () #[[ATTR4]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES_I:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES_I]]
;
entry:
- call void @streaming_compatible_callee()
- ret void
+ %res = call i32 @streaming_compatible_callee()
+ ret i32 %res
}
; [ ] SC + B -> N
@@ -475,16 +474,16 @@ entry:
; [ ] SC + B -> SC
; [x] SC + B -> N + B
; [ ] SC + B -> SC + B
-define void @streaming_compatible_locally_streaming_caller_locally_streaming_callee_inline() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
-; CHECK-LABEL: define void @streaming_compatible_locally_streaming_caller_locally_streaming_callee_inline
+define i32 @streaming_compatible_locally_streaming_caller_locally_streaming_callee_inline() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
+; CHECK-LABEL: define i32 @streaming_compatible_locally_streaming_caller_locally_streaming_callee_inline
; CHECK-SAME: () #[[ATTR4]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES_I:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES_I]]
;
entry:
- call void @locally_streaming_callee()
- ret void
+ %res = call i32 @locally_streaming_callee()
+ ret i32 %res
}
; [ ] SC + B -> N
@@ -492,16 +491,16 @@ entry:
; [ ] SC + B -> SC
; [ ] SC + B -> N + B
; [x] SC + B -> SC + B
-define void @streaming_compatible_locally_streaming_caller_and_callee_inline() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
-; CHECK-LABEL: define void @streaming_compatible_locally_streaming_caller_and_callee_inline
+define i32 @streaming_compatible_locally_streaming_caller_and_callee_inline() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
+; CHECK-LABEL: define i32 @streaming_compatible_locally_streaming_caller_and_callee_inline
; CHECK-SAME: () #[[ATTR4]] {
; CHECK-NEXT: entry:
-; CHECK-NEXT: call void @inlined_body()
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[RES_I:%.*]] = call i32 @llvm.vscale.i32()
+; CHECK-NEXT: ret i32 [[RES_I]]
;
entry:
- call void @streaming_compatible_locally_streaming_callee()
- ret void
+ %res = call i32 @streaming_compatible_locally_streaming_callee()
+ ret i32 %res
}
define void @normal_callee_with_inlineasm() {
More information about the llvm-branch-commits
mailing list