Skip to content

Commit cb3e1e2

Browse files
committed
Fix inlining
1 parent b5c04bb commit cb3e1e2

File tree

2 files changed

+142
-8
lines changed

2 files changed

+142
-8
lines changed

llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -267,11 +267,6 @@ bool AArch64TTIImpl::areInlineCompatible(const Function *Caller,
267267
return false;
268268
}
269269

270-
if (CalleeAttrs.hasAgnosticZAInterface()) {
271-
if (hasPossibleIncompatibleOps(Callee))
272-
return false;
273-
}
274-
275270
return BaseT::areInlineCompatible(Caller, Callee);
276271
}
277272

llvm/test/Transforms/Inline/AArch64/sme-pstateza-attrs.ll

Lines changed: 142 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,30 @@ define void @new_za_callee() "aarch64_new_za" {
5050
ret void
5151
}
5252

53+
define void @agnostic_za_callee() "aarch64_za_state_agnostic" {
54+
; CHECK-LABEL: define void @agnostic_za_callee
55+
; CHECK-SAME: () #[[ATTR3:[0-9]+]] {
56+
; CHECK-NEXT: call void asm sideeffect "
57+
; CHECK-NEXT: call void @inlined_body()
58+
; CHECK-NEXT: ret void
59+
;
60+
call void asm sideeffect "; inlineasm", ""()
61+
call void @inlined_body()
62+
ret void
63+
}
64+
5365
;
5466
; Now test that inlining only happens when no lazy-save is needed.
5567
; Test for a number of combinations, where:
5668
; N Not using ZA.
5769
; S Shared ZA interface
5870
; Z New ZA with Private-ZA interface
71+
; A Agnostic ZA interface
5972

6073
; [x] N -> N
6174
; [ ] N -> S (This combination is invalid)
6275
; [ ] N -> Z
76+
; [ ] N -> A
6377
define void @nonza_caller_nonza_callee_inline() {
6478
; CHECK-LABEL: define void @nonza_caller_nonza_callee_inline
6579
; CHECK-SAME: () #[[ATTR0]] {
@@ -76,6 +90,7 @@ entry:
7690
; [ ] N -> N
7791
; [ ] N -> S (This combination is invalid)
7892
; [x] N -> Z
93+
; [ ] N -> A
7994
define void @nonza_caller_new_za_callee_dont_inline() {
8095
; CHECK-LABEL: define void @nonza_caller_new_za_callee_dont_inline
8196
; CHECK-SAME: () #[[ATTR0]] {
@@ -88,9 +103,27 @@ entry:
88103
ret void
89104
}
90105

106+
; [ ] N -> N
107+
; [ ] N -> S (This combination is invalid)
108+
; [ ] N -> Z
109+
; [x] N -> A
110+
define void @nonza_caller_agnostic_za_callee_inline() {
111+
; CHECK-LABEL: define void @nonza_caller_agnostic_za_callee_inline
112+
; CHECK-SAME: () #[[ATTR0]] {
113+
; CHECK-NEXT: entry:
114+
; CHECK-NEXT: call void asm sideeffect "
115+
; CHECK-NEXT: call void @inlined_body()
116+
; CHECK-NEXT: ret void
117+
;
118+
entry:
119+
call void @agnostic_za_callee()
120+
ret void
121+
}
122+
91123
; [x] Z -> N
92124
; [ ] Z -> S
93125
; [ ] Z -> Z
126+
; [ ] Z -> A
94127
define void @new_za_caller_nonza_callee_dont_inline() "aarch64_new_za" {
95128
; CHECK-LABEL: define void @new_za_caller_nonza_callee_dont_inline
96129
; CHECK-SAME: () #[[ATTR2]] {
@@ -106,6 +139,7 @@ entry:
106139
; [ ] Z -> N
107140
; [x] Z -> S
108141
; [ ] Z -> Z
142+
; [ ] Z -> A
109143
define void @new_za_caller_shared_za_callee_inline() "aarch64_new_za" {
110144
; CHECK-LABEL: define void @new_za_caller_shared_za_callee_inline
111145
; CHECK-SAME: () #[[ATTR2]] {
@@ -122,6 +156,7 @@ entry:
122156
; [ ] Z -> N
123157
; [ ] Z -> S
124158
; [x] Z -> Z
159+
; [ ] Z -> A
125160
define void @new_za_caller_new_za_callee_dont_inline() "aarch64_new_za" {
126161
; CHECK-LABEL: define void @new_za_caller_new_za_callee_dont_inline
127162
; CHECK-SAME: () #[[ATTR2]] {
@@ -134,9 +169,27 @@ entry:
134169
ret void
135170
}
136171

172+
; [ ] Z -> N
173+
; [ ] Z -> S
174+
; [ ] Z -> Z
175+
; [x] Z -> A
176+
define void @new_za_caller_agnostic_za_callee_inline() "aarch64_new_za" {
177+
; CHECK-LABEL: define void @new_za_caller_agnostic_za_callee_inline
178+
; CHECK-SAME: () #[[ATTR2]] {
179+
; CHECK-NEXT: entry:
180+
; CHECK-NEXT: call void asm sideeffect "
181+
; CHECK-NEXT: call void @inlined_body()
182+
; CHECK-NEXT: ret void
183+
;
184+
entry:
185+
call void @agnostic_za_callee()
186+
ret void
187+
}
188+
137189
; [x] S -> N
138190
; [ ] S -> S
139191
; [ ] S -> Z
192+
; [ ] S -> A
140193
define void @shared_za_caller_nonza_callee_dont_inline() "aarch64_inout_za" {
141194
; CHECK-LABEL: define void @shared_za_caller_nonza_callee_dont_inline
142195
; CHECK-SAME: () #[[ATTR1]] {
@@ -152,6 +205,7 @@ entry:
152205
; [ ] S -> N
153206
; [x] S -> Z
154207
; [ ] S -> S
208+
; [ ] S -> A
155209
define void @shared_za_caller_new_za_callee_dont_inline() "aarch64_inout_za" {
156210
; CHECK-LABEL: define void @shared_za_caller_new_za_callee_dont_inline
157211
; CHECK-SAME: () #[[ATTR1]] {
@@ -167,6 +221,7 @@ entry:
167221
; [ ] S -> N
168222
; [ ] S -> Z
169223
; [x] S -> S
224+
; [ ] S -> A
170225
define void @shared_za_caller_shared_za_callee_inline() "aarch64_inout_za" {
171226
; CHECK-LABEL: define void @shared_za_caller_shared_za_callee_inline
172227
; CHECK-SAME: () #[[ATTR1]] {
@@ -180,6 +235,90 @@ entry:
180235
ret void
181236
}
182237

238+
; [ ] S -> N
239+
; [ ] S -> Z
240+
; [ ] S -> S
241+
; [x] S -> A
242+
define void @shared_za_caller_agnostic_za_callee_inline() "aarch64_inout_za" {
243+
; CHECK-LABEL: define void @shared_za_caller_agnostic_za_callee_inline
244+
; CHECK-SAME: () #[[ATTR1]] {
245+
; CHECK-NEXT: entry:
246+
; CHECK-NEXT: call void asm sideeffect "
247+
; CHECK-NEXT: call void @inlined_body()
248+
; CHECK-NEXT: ret void
249+
;
250+
entry:
251+
call void @agnostic_za_callee()
252+
ret void
253+
}
254+
255+
; [x] A -> N
256+
; [ ] A -> Z
257+
; [ ] A -> S
258+
; [ ] A -> A
259+
define void @agnostic_za_caller_nonza_callee_dont_inline() "aarch64_za_state_agnostic" {
260+
; CHECK-LABEL: define void @agnostic_za_caller_nonza_callee_dont_inline
261+
; CHECK-SAME: () #[[ATTR3]] {
262+
; CHECK-NEXT: entry:
263+
; CHECK-NEXT: call void @nonza_callee()
264+
; CHECK-NEXT: ret void
265+
;
266+
entry:
267+
call void @nonza_callee()
268+
ret void
269+
}
270+
271+
; [ ] A -> N
272+
; [x] A -> Z
273+
; [ ] A -> S
274+
; [ ] A -> A
275+
define void @agnostic_za_caller_now_za_callee_dont_inline() "aarch64_za_state_agnostic" {
276+
; CHECK-LABEL: define void @agnostic_za_caller_now_za_callee_dont_inline
277+
; CHECK-SAME: () #[[ATTR3]] {
278+
; CHECK-NEXT: entry:
279+
; CHECK-NEXT: call void @new_za_callee()
280+
; CHECK-NEXT: ret void
281+
;
282+
entry:
283+
call void @new_za_callee()
284+
ret void
285+
}
286+
287+
; [ ] A -> N
288+
; [ ] A -> Z
289+
; [x] A -> S (invalid)
290+
; [ ] A -> A
291+
define void @agnostic_za_caller_shared_za_callee_dont_inline() "aarch64_za_state_agnostic" {
292+
; CHECK-LABEL: define void @agnostic_za_caller_shared_za_callee_dont_inline
293+
; CHECK-SAME: () #[[ATTR3]] {
294+
; CHECK-NEXT: entry:
295+
; CHECK-NEXT: call void @shared_za_callee()
296+
; CHECK-NEXT: ret void
297+
;
298+
entry:
299+
call void @shared_za_callee()
300+
ret void
301+
}
302+
303+
; [ ] A -> N
304+
; [ ] A -> Z
305+
; [ ] A -> S
306+
; [x] A -> A
307+
define void @agnostic_za_caller_agnostic_za_callee_inline() "aarch64_za_state_agnostic" {
308+
; CHECK-LABEL: define void @agnostic_za_caller_agnostic_za_callee_inline
309+
; CHECK-SAME: () #[[ATTR3]] {
310+
; CHECK-NEXT: entry:
311+
; CHECK-NEXT: call void asm sideeffect "
312+
; CHECK-NEXT: call void @inlined_body()
313+
; CHECK-NEXT: ret void
314+
;
315+
entry:
316+
call void @agnostic_za_callee()
317+
ret void
318+
}
319+
320+
321+
183322
define void @private_za_callee_call_za_disable() {
184323
; CHECK-LABEL: define void @private_za_callee_call_za_disable
185324
; CHECK-SAME: () #[[ATTR0]] {
@@ -254,7 +393,7 @@ define void @nonzt0_callee() {
254393

255394
define void @shared_zt0_caller_nonzt0_callee_dont_inline() "aarch64_inout_zt0" {
256395
; CHECK-LABEL: define void @shared_zt0_caller_nonzt0_callee_dont_inline
257-
; CHECK-SAME: () #[[ATTR3:[0-9]+]] {
396+
; CHECK-SAME: () #[[ATTR4:[0-9]+]] {
258397
; CHECK-NEXT: call void @nonzt0_callee()
259398
; CHECK-NEXT: ret void
260399
;
@@ -264,7 +403,7 @@ define void @shared_zt0_caller_nonzt0_callee_dont_inline() "aarch64_inout_zt0" {
264403

265404
define void @shared_zt0_callee() "aarch64_inout_zt0" {
266405
; CHECK-LABEL: define void @shared_zt0_callee
267-
; CHECK-SAME: () #[[ATTR3]] {
406+
; CHECK-SAME: () #[[ATTR4]] {
268407
; CHECK-NEXT: call void asm sideeffect "
269408
; CHECK-NEXT: call void @inlined_body()
270409
; CHECK-NEXT: ret void
@@ -276,7 +415,7 @@ define void @shared_zt0_callee() "aarch64_inout_zt0" {
276415

277416
define void @shared_zt0_caller_shared_zt0_callee_inline() "aarch64_inout_zt0" {
278417
; CHECK-LABEL: define void @shared_zt0_caller_shared_zt0_callee_inline
279-
; CHECK-SAME: () #[[ATTR3]] {
418+
; CHECK-SAME: () #[[ATTR4]] {
280419
; CHECK-NEXT: call void asm sideeffect "
281420
; CHECK-NEXT: call void @inlined_body()
282421
; CHECK-NEXT: ret void

0 commit comments

Comments
 (0)