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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
|
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
; RUN: llc -aarch64-min-jump-table-entries=4 -mtriple=arm64-apple-ios < %s | FileCheck %s
; Check there's no assert in spilling from implicit-def operands on an
; IMPLICIT_DEF.
define void @widget(i32 %arg, i32 %arg1, ptr %arg2, ptr %arg3, ptr %arg4, i32 %arg5, i1 %arg6) {
; CHECK-LABEL: widget:
; CHECK: ; %bb.0: ; %bb
; CHECK-NEXT: sub sp, sp, #144
; CHECK-NEXT: stp x28, x27, [sp, #48] ; 16-byte Folded Spill
; CHECK-NEXT: stp x26, x25, [sp, #64] ; 16-byte Folded Spill
; CHECK-NEXT: stp x24, x23, [sp, #80] ; 16-byte Folded Spill
; CHECK-NEXT: stp x22, x21, [sp, #96] ; 16-byte Folded Spill
; CHECK-NEXT: stp x20, x19, [sp, #112] ; 16-byte Folded Spill
; CHECK-NEXT: stp x29, x30, [sp, #128] ; 16-byte Folded Spill
; CHECK-NEXT: .cfi_def_cfa_offset 144
; CHECK-NEXT: .cfi_offset w30, -8
; CHECK-NEXT: .cfi_offset w29, -16
; CHECK-NEXT: .cfi_offset w19, -24
; CHECK-NEXT: .cfi_offset w20, -32
; CHECK-NEXT: .cfi_offset w21, -40
; CHECK-NEXT: .cfi_offset w22, -48
; CHECK-NEXT: .cfi_offset w23, -56
; CHECK-NEXT: .cfi_offset w24, -64
; CHECK-NEXT: .cfi_offset w25, -72
; CHECK-NEXT: .cfi_offset w26, -80
; CHECK-NEXT: .cfi_offset w27, -88
; CHECK-NEXT: .cfi_offset w28, -96
; CHECK-NEXT: mov w19, w6
; CHECK-NEXT: mov w20, w5
; CHECK-NEXT: mov x21, x4
; CHECK-NEXT: mov x22, x3
; CHECK-NEXT: mov x23, x2
; CHECK-NEXT: mov w24, w1
; CHECK-NEXT: mov w25, w0
; CHECK-NEXT: mov w26, w1
; CHECK-NEXT: Lloh0:
; CHECK-NEXT: adrp x27, LJTI0_0@PAGE
; CHECK-NEXT: Lloh1:
; CHECK-NEXT: add x27, x27, LJTI0_0@PAGEOFF
; CHECK-NEXT: mov w28, #1 ; =0x1
; CHECK-NEXT: ; implicit-def: $w8
; CHECK-NEXT: str x8, [sp, #40] ; 8-byte Folded Spill
; CHECK-NEXT: b LBB0_2
; CHECK-NEXT: LBB0_1: ; %bb10
; CHECK-NEXT: ; in Loop: Header=BB0_2 Depth=1
; CHECK-NEXT: mov w0, w20
; CHECK-NEXT: mov x1, x22
; CHECK-NEXT: str wzr, [x21]
; CHECK-NEXT: bl _putc
; CHECK-NEXT: mov w0, w25
; CHECK-NEXT: mov x1, xzr
; CHECK-NEXT: bl _putc
; CHECK-NEXT: LBB0_2: ; %bb8
; CHECK-NEXT: ; =>This Inner Loop Header: Depth=1
; CHECK-NEXT: cmp w24, #39
; CHECK-NEXT: b.hi LBB0_5
; CHECK-NEXT: ; %bb.3: ; %bb8
; CHECK-NEXT: ; in Loop: Header=BB0_2 Depth=1
; CHECK-NEXT: adr x8, LBB0_1
; CHECK-NEXT: ldrb w9, [x27, x26]
; CHECK-NEXT: add x8, x8, x9, lsl #2
; CHECK-NEXT: br x8
; CHECK-NEXT: LBB0_4: ; %bb9
; CHECK-NEXT: ; in Loop: Header=BB0_2 Depth=1
; CHECK-NEXT: str w28, [x23]
; CHECK-NEXT: b LBB0_2
; CHECK-NEXT: LBB0_5: ; %bb8
; CHECK-NEXT: ; in Loop: Header=BB0_2 Depth=1
; CHECK-NEXT: cmp w24, #64
; CHECK-NEXT: b.ne LBB0_2
; CHECK-NEXT: b LBB0_9
; CHECK-NEXT: LBB0_6: ; %bb13
; CHECK-NEXT: ; in Loop: Header=BB0_2 Depth=1
; CHECK-NEXT: mov w8, #1 ; =0x1
; CHECK-NEXT: str x8, [sp, #40] ; 8-byte Folded Spill
; CHECK-NEXT: tbz w19, #0, LBB0_2
; CHECK-NEXT: ; %bb.7: ; %bb14
; CHECK-NEXT: ; in Loop: Header=BB0_2 Depth=1
; CHECK-NEXT: mov x0, xzr
; CHECK-NEXT: mov x1, xzr
; CHECK-NEXT: mov w8, #1 ; =0x1
; CHECK-NEXT: stp xzr, xzr, [sp]
; CHECK-NEXT: stp x8, xzr, [sp, #16]
; CHECK-NEXT: bl _fprintf
; CHECK-NEXT: b LBB0_2
; CHECK-NEXT: LBB0_8: ; %bb12
; CHECK-NEXT: ; =>This Inner Loop Header: Depth=1
; CHECK-NEXT: b LBB0_8
; CHECK-NEXT: LBB0_9: ; %bb16
; CHECK-NEXT: ldr x8, [sp, #40] ; 8-byte Folded Reload
; CHECK-NEXT: mov x0, xzr
; CHECK-NEXT: mov x1, xzr
; CHECK-NEXT: ; kill: def $w8 killed $w8 killed $x8 def $x8
; CHECK-NEXT: str x8, [sp]
; CHECK-NEXT: bl _fprintf
; CHECK-NEXT: brk #0x1
; CHECK-NEXT: .loh AdrpAdd Lloh0, Lloh1
; CHECK-NEXT: .cfi_endproc
; CHECK-NEXT: .section __TEXT,__const
; CHECK-NEXT: LJTI0_0:
; CHECK-NEXT: .byte (LBB0_6-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_8-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_4-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_1-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_2-LBB0_1)>>2
; CHECK-NEXT: .byte (LBB0_1-LBB0_1)>>2
bb:
br label %bb7
bb7: ; preds = %bb14, %bb13, %bb
%phi = phi i32 [ poison, %bb ], [ %mul, %bb14 ], [ %mul, %bb13 ]
br label %bb8
bb8: ; preds = %bb10, %bb9, %bb8, %bb7
switch i32 %arg1, label %bb8 [
i32 10, label %bb9
i32 64, label %bb16
i32 0, label %bb13
i32 39, label %bb10
i32 34, label %bb10
i32 1, label %bb12
]
bb9: ; preds = %bb8
store i32 1, ptr %arg2, align 4
br label %bb8
bb10: ; preds = %bb8, %bb8
store i32 0, ptr %arg4, align 4
%call = tail call i32 @putc(i32 %arg5, ptr %arg3)
%call11 = tail call i32 @putc(i32 %arg, ptr null)
br label %bb8
bb12: ; preds = %bb12, %bb8
br label %bb12
bb13: ; preds = %bb8
%mul = mul i32 1, 1
br i1 %arg6, label %bb14, label %bb7
bb14: ; preds = %bb13
%call15 = tail call i32 (ptr, ptr, ...) @fprintf(ptr null, ptr null, ptr null, i32 0, i32 %mul, ptr null)
br label %bb7
bb16: ; preds = %bb8
%call17 = tail call i32 (ptr, ptr, ...) @fprintf(ptr null, ptr null, i32 %phi)
unreachable
}
declare i32 @fprintf(ptr, ptr, ...)
declare i32 @putc(i32, ptr)
|