Skip to content

Commit 7fd38a2

Browse files
Add a test for stack probing of dynamically alocated space for SVE vector
Change-Id: I1f9645b7ca786259bb7276806a9cfa17ba543a5a
1 parent 69e7405 commit 7fd38a2

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

llvm/test/CodeGen/AArch64/stack-probing-dynamic.ll

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,4 +317,47 @@ entry:
317317

318318
declare void @callee_stack_args(ptr, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64)
319319

320+
; Dynamic allocation of SVE vectors
321+
define void @dynamic_sve(i64 %size, ptr %out) #0 "target-features"="+sve" {
322+
; CHECK-LABEL: dynamic_sve:
323+
; CHECK: // %bb.0:
324+
; CHECK-NEXT: stp x29, x30, [sp, #-32]! // 16-byte Folded Spill
325+
; CHECK-NEXT: .cfi_def_cfa_offset 32
326+
; CHECK-NEXT: str x19, [sp, #16] // 8-byte Folded Spill
327+
; CHECK-NEXT: mov x29, sp
328+
; CHECK-NEXT: .cfi_def_cfa w29, 32
329+
; CHECK-NEXT: .cfi_offset w19, -16
330+
; CHECK-NEXT: .cfi_offset w30, -24
331+
; CHECK-NEXT: .cfi_offset w29, -32
332+
; CHECK-NEXT: rdvl x9, #1
333+
; CHECK-NEXT: mov x10, #15 // =0xf
334+
; CHECK-NEXT: mov x8, sp
335+
; CHECK-NEXT: madd x9, x0, x9, x10
336+
; CHECK-NEXT: and x9, x9, #0xfffffffffffffff0
337+
; CHECK-NEXT: sub x8, x8, x9
338+
; CHECK-NEXT: .LBB7_1: // =>This Inner Loop Header: Depth=1
339+
; CHECK-NEXT: sub sp, sp, #1, lsl #12 // =4096
340+
; CHECK-NEXT: cmp sp, x8
341+
; CHECK-NEXT: b.le .LBB7_3
342+
; CHECK-NEXT: // %bb.2: // in Loop: Header=BB7_1 Depth=1
343+
; CHECK-NEXT: str xzr, [sp]
344+
; CHECK-NEXT: b .LBB7_1
345+
; CHECK-NEXT: .LBB7_3:
346+
; CHECK-NEXT: mov sp, x8
347+
; CHECK-NEXT: str xzr, [sp]
348+
; CHECK-NEXT: str x8, [x1]
349+
; CHECK-NEXT: mov sp, x29
350+
; CHECK-NEXT: .cfi_def_cfa wsp, 32
351+
; CHECK-NEXT: ldr x19, [sp, #16] // 8-byte Folded Reload
352+
; CHECK-NEXT: ldp x29, x30, [sp], #32 // 16-byte Folded Reload
353+
; CHECK-NEXT: .cfi_def_cfa_offset 0
354+
; CHECK-NEXT: .cfi_restore w19
355+
; CHECK-NEXT: .cfi_restore w30
356+
; CHECK-NEXT: .cfi_restore w29
357+
; CHECK-NEXT: ret
358+
%v = alloca <vscale x 4 x float>, i64 %size, align 16
359+
store ptr %v, ptr %out, align 8
360+
ret void
361+
}
362+
320363
attributes #0 = { uwtable(async) "probe-stack"="inline-asm" "frame-pointer"="none" }

0 commit comments

Comments
 (0)