File: sve-fixed-length-frame-offests-crash.ll

package info (click to toggle)
llvm-toolchain-21 1%3A21.1.6-2
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 2,245,044 kB
  • sloc: cpp: 7,619,726; ansic: 1,434,018; asm: 1,058,748; python: 252,740; f90: 94,671; objc: 70,685; lisp: 42,813; pascal: 18,401; sh: 8,601; ml: 5,111; perl: 4,720; makefile: 3,666; awk: 3,523; javascript: 2,409; xml: 892; fortran: 770
file content (83 lines) | stat: -rw-r--r-- 4,045 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s | FileCheck %s

target triple = "aarch64-unknown-linux-gnu"

; Ensure we don't crash by trying to fold fixed length frame indexes into
; loads/stores that don't support an appropriate addressing mode, hence creating
; too many extra vregs during frame lowering, when we don't have an emergency
; spill slot.

define dso_local void @func1(ptr %v1, ptr %v2, ptr %v3, ptr %v4, ptr %v5, ptr %v6, ptr %v7, ptr %v8,
; CHECK-LABEL: func1:
; CHECK:       // %bb.0:
; CHECK-NEXT:    sub sp, sp, #368
; CHECK-NEXT:    stp x29, x30, [sp, #336] // 16-byte Folded Spill
; CHECK-NEXT:    str x28, [sp, #352] // 8-byte Folded Spill
; CHECK-NEXT:    add x29, sp, #336
; CHECK-NEXT:    .cfi_def_cfa w29, 32
; CHECK-NEXT:    .cfi_offset w28, -16
; CHECK-NEXT:    .cfi_offset w30, -24
; CHECK-NEXT:    .cfi_offset w29, -32
; CHECK-NEXT:    add x8, x29, #32
; CHECK-NEXT:    add x9, x29, #72
; CHECK-NEXT:    ptrue p0.d
; CHECK-NEXT:    ldr z0, [x8]
; CHECK-NEXT:    add x8, x29, #256
; CHECK-NEXT:    ldr z3, [x9]
; CHECK-NEXT:    ldr z1, [x8]
; CHECK-NEXT:    add x8, x29, #288
; CHECK-NEXT:    add x9, x29, #168
; CHECK-NEXT:    ldr z2, [x8]
; CHECK-NEXT:    add x8, x29, #104
; CHECK-NEXT:    ldr z6, [x9]
; CHECK-NEXT:    ldr z4, [x8]
; CHECK-NEXT:    add x8, x29, #136
; CHECK-NEXT:    mov x12, #17 // =0x11
; CHECK-NEXT:    ldr z5, [x8]
; CHECK-NEXT:    ldp x10, x11, [x29, #336]
; CHECK-NEXT:    st1d { z6.d }, p0, [sp, x12, lsl #3]
; CHECK-NEXT:    mov x12, #13 // =0xd
; CHECK-NEXT:    ldr x8, [x29, #200]
; CHECK-NEXT:    ldr x9, [x29, #320]
; CHECK-NEXT:    st1d { z5.d }, p0, [sp, x12, lsl #3]
; CHECK-NEXT:    mov x12, #9 // =0x9
; CHECK-NEXT:    st1d { z4.d }, p0, [sp, x12, lsl #3]
; CHECK-NEXT:    mov x12, #5 // =0x5
; CHECK-NEXT:    st1d { z3.d }, p0, [sp, x12, lsl #3]
; CHECK-NEXT:    stp x10, x11, [sp, #304]
; CHECK-NEXT:    str x9, [sp, #288]
; CHECK-NEXT:    str z2, [sp, #8, mul vl]
; CHECK-NEXT:    str z1, [sp, #7, mul vl]
; CHECK-NEXT:    str x8, [sp, #168]
; CHECK-NEXT:    str z0, [sp]
; CHECK-NEXT:    bl func2
; CHECK-NEXT:    ldp x29, x30, [sp, #336] // 16-byte Folded Reload
; CHECK-NEXT:    ldr x28, [sp, #352] // 8-byte Folded Reload
; CHECK-NEXT:    add sp, sp, #368
; CHECK-NEXT:    ret
                             ptr %v9, ptr %v10, ptr %v11, ptr %v12, ptr %v13, ptr %v14,  ptr %v15, ptr %v16,
                             ptr %v17, ptr %v18, ptr %v19, ptr %v20, ptr %v21, ptr %v22, ptr %v23, ptr %v24,
                             ptr %v25, ptr %v26, ptr %v27, ptr %v28, ptr %v29, ptr %v30, ptr %v31, ptr %v32,
                             ptr %v33, ptr %v34, ptr %v35, ptr %v36, ptr %v37, ptr %v38, ptr %v39, ptr %v40,
                             ptr %v41, ptr %v42, ptr %v43, ptr %v44, ptr %v45, ptr %v46, ptr %v47, ptr %v48,
                             i64 %v49) #0 {
  call void @func2(ptr %v1, ptr %v2, ptr %v3, ptr %v4, ptr %v5, ptr %v6, ptr %v7, ptr %v8,
                   ptr %v9, ptr %v10, ptr %v11, ptr %v12, ptr undef, ptr %v14, ptr %v15, ptr %v16,
                   ptr %v17, ptr %v18, ptr %v19, ptr %v20, ptr %v21, ptr %v22, ptr %v23, ptr %v24,
                   ptr %v25, ptr %v26, ptr %v27, ptr %v28, ptr %v29, ptr %v30, ptr undef, ptr undef,
                   ptr undef, ptr undef, ptr undef, ptr undef, ptr %v37, ptr %v38, ptr %v39, ptr %v40,
                   ptr %v41, ptr %v42, ptr %v43, ptr %v44, ptr %v45, ptr undef, ptr %v47, ptr %v48,
                   i64 undef)
  ret void
}

declare dso_local void @func2(ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr,
                              ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr,
                              ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr,
                              ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr,
                              ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr,
                              ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr,
                              i64)

attributes #0 = { "target-features"="+sve" vscale_range(2,2) }