1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -run-pass=early-tailduplication %s -o - | FileCheck %s 3--- | 4 target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" 5 target triple = "aarch64-none-linux-gnu" 6 7 define void @ham() gc "statepoint-example" personality i32* ()* @baz { 8 bb: 9 switch i32 undef, label %bb4 [ 10 i32 2050, label %bb1 11 i32 2282, label %bb2 12 ] 13 14 bb1: ; preds = %bb 15 %tmp = call token (i64, i32, void (i32)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 2882400000, i32 0, void (i32)* nonnull elementtype(void (i32)) @wombat, i32 1, i32 0, i32 10, i32 0, i32 0) [ "deopt"(), "gc-live"() ] 16 unreachable 17 18 bb2: ; preds = %bb 19 %tmp3 = call token (i64, i32, void (i32)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 2882400000, i32 0, void (i32)* nonnull elementtype(void (i32)) @wombat, i32 1, i32 0, i32 10, i32 0, i32 0) [ "deopt"(), "gc-live"() ] 20 unreachable 21 22 bb4: ; preds = %bb 23 %tmp5 = call token (i64, i32, i8 addrspace(1)* (i8 addrspace(1)*)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_p1i8p1i8f(i64 2882400000, i32 0, i8 addrspace(1)* (i8 addrspace(1)*)* elementtype(i8 addrspace(1)* (i8 addrspace(1)*)) undef, i32 1, i32 0, i8 addrspace(1)* nonnull undef, i32 0, i32 0) [ "deopt"(), "gc-live"() ] 24 %tmp10 = call token (i64, i32, i8 addrspace(1)* (i8 addrspace(1)*)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_p1i8p1i8f(i64 2, i32 4, i8 addrspace(1)* (i8 addrspace(1)*)* nonnull elementtype(i8 addrspace(1)* (i8 addrspace(1)*)) @barney, i32 1, i32 0, i8 addrspace(1)* nonnull undef, i32 0, i32 0) [ "deopt"(), "gc-live"() ] 25 br i1 undef, label %bb40, label %bb24 26 27 bb24: ; preds = %bb4 28 switch i32 undef, label %bb35 [ 29 i32 1388, label %bb25 30 i32 2742, label %bb29 31 i32 2884, label %bb31 32 ] 33 34 bb25: ; preds = %bb24 35 %tmp26 = call token (i64, i32, i8 addrspace(1)* (i8 addrspace(1)*)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_p1i8p1i8f(i64 2, i32 4, i8 addrspace(1)* (i8 addrspace(1)*)* nonnull elementtype(i8 addrspace(1)* (i8 addrspace(1)*)) @wobble, i32 1, i32 0, i8 addrspace(1)* nonnull undef, i32 0, i32 0) [ "deopt"(), "gc-live"(i8 addrspace(1)* null) ] 36 %tmp27 = call align 8 i8 addrspace(1)* @llvm.experimental.gc.result.p1i8(token %tmp26) 37 %tmp28 = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %tmp26, i32 0, i32 0) ; (null, null) 38 br label %bb36 39 40 bb29: ; preds = %bb24 41 %tmp30 = call token (i64, i32, i8 addrspace(1)* (i8 addrspace(1)*)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_p1i8p1i8f(i64 2, i32 4, i8 addrspace(1)* (i8 addrspace(1)*)* nonnull elementtype(i8 addrspace(1)* (i8 addrspace(1)*)) @bar, i32 1, i32 0, i8 addrspace(1)* nonnull undef, i32 0, i32 0) [ "deopt"(), "gc-live"() ] 42 br label %bb36 43 44 bb31: ; preds = %bb24 45 %tmp32 = call token (i64, i32, void (i32)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 2882400000, i32 0, void (i32)* nonnull elementtype(void (i32)) @wombat, i32 1, i32 0, i32 10, i32 0, i32 0) [ "deopt"(), "gc-live"() ] 46 unreachable 47 48 bb35: ; preds = %bb24 49 unreachable 50 51 bb36: ; preds = %bb29, %bb25 52 %tmp37 = phi i8 addrspace(1)* [ undef, %bb29 ], [ %tmp28, %bb25 ] 53 %tmp38 = phi i8 addrspace(1)* [ undef, %bb29 ], [ %tmp27, %bb25 ] 54 %tmp39 = icmp eq i8 addrspace(1)* %tmp38, null 55 br i1 %tmp39, label %bb51, label %bb42 56 57 bb40: ; preds = %bb4 58 %tmp41 = call token (i64, i32, void (i32)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 2882400000, i32 0, void (i32)* nonnull elementtype(void (i32)) @wombat, i32 1, i32 0, i32 10, i32 0, i32 0) [ "deopt"(), "gc-live"() ] 59 unreachable 60 61 bb42: ; preds = %bb36 62 %tmp46 = icmp eq i32 undef, 1381 63 %or.cond = select i1 undef, i1 true, i1 %tmp46 64 br i1 %or.cond, label %bb49, label %bb47 65 66 bb47: ; preds = %bb42 67 %tmp48 = call token (i64, i32, void (i32)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 2882400000, i32 0, void (i32)* nonnull elementtype(void (i32)) @wombat, i32 1, i32 0, i32 14, i32 0, i32 0) [ "deopt"(i8 addrspace(1)* %tmp37, i8 addrspace(1)* %tmp38), "gc-live"() ] 68 unreachable 69 70 bb49: ; preds = %bb42 71 %tmp50 = call token (i64, i32, void (i32)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 2882400000, i32 0, void (i32)* nonnull elementtype(void (i32)) @wombat, i32 1, i32 0, i32 10, i32 0, i32 0) [ "deopt"(i8 addrspace(1)* %tmp37, i8 addrspace(1)* %tmp38, i8 addrspace(1)* %tmp38), "gc-live"() ] 72 unreachable 73 74 bb51: ; preds = %bb36 75 %tmp52 = call token (i64, i32, void (i32)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 2882400000, i32 0, void (i32)* nonnull elementtype(void (i32)) @wombat, i32 1, i32 0, i32 24, i32 0, i32 0) [ "deopt"(i8 addrspace(1)* %tmp37), "gc-live"() ] 76 unreachable 77 } 78 79 declare i32* @baz() 80 81 declare i8 addrspace(1)* @barney(i8 addrspace(1)*) 82 83 declare i8 addrspace(1)* @wobble(i8 addrspace(1)*) 84 85 declare i8 addrspace(1)* @bar(i8 addrspace(1)*) 86 87 declare i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token, i32 immarg, i32 immarg) #0 88 89 declare i8 addrspace(1)* @llvm.experimental.gc.result.p1i8(token) #0 90 91 declare void @wombat(i32) 92 93 declare token @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 immarg, i32 immarg, void (i32)*, i32 immarg, i32 immarg, ...) 94 95 declare token @llvm.experimental.gc.statepoint.p0f_p1i8p1i8f(i64 immarg, i32 immarg, i8 addrspace(1)* (i8 addrspace(1)*)*, i32 immarg, i32 immarg, ...) 96 97 attributes #0 = { nounwind readnone } 98 99... 100--- 101name: ham 102alignment: 4 103exposesReturnsTwice: false 104legalized: false 105regBankSelected: false 106selected: false 107failedISel: false 108tracksRegLiveness: true 109hasWinCFI: false 110callsEHReturn: false 111callsUnwindInit: false 112hasEHCatchret: false 113hasEHScopes: false 114hasEHFunclets: false 115failsVerification: false 116tracksDebugUserValues: false 117registers: 118 - { id: 0, class: gpr64all, preferred-register: '' } 119 - { id: 1, class: gpr64all, preferred-register: '' } 120 - { id: 2, class: gpr64all, preferred-register: '' } 121 - { id: 3, class: gpr64, preferred-register: '' } 122 - { id: 4, class: gpr32, preferred-register: '' } 123 - { id: 5, class: gpr32, preferred-register: '' } 124 - { id: 6, class: gpr32, preferred-register: '' } 125 - { id: 7, class: gpr32, preferred-register: '' } 126 - { id: 8, class: gpr64all, preferred-register: '' } 127 - { id: 9, class: gpr64all, preferred-register: '' } 128 - { id: 10, class: gpr64all, preferred-register: '' } 129 - { id: 11, class: gpr64all, preferred-register: '' } 130 - { id: 12, class: gpr64all, preferred-register: '' } 131 - { id: 13, class: gpr64all, preferred-register: '' } 132 - { id: 14, class: gpr32, preferred-register: '' } 133 - { id: 15, class: gpr32, preferred-register: '' } 134 - { id: 16, class: gpr32, preferred-register: '' } 135 - { id: 17, class: gpr32, preferred-register: '' } 136 - { id: 18, class: gpr64all, preferred-register: '' } 137 - { id: 19, class: gpr64all, preferred-register: '' } 138 - { id: 20, class: gpr64all, preferred-register: '' } 139 - { id: 21, class: gpr64all, preferred-register: '' } 140 - { id: 22, class: gpr64all, preferred-register: '' } 141 - { id: 23, class: gpr64all, preferred-register: '' } 142 - { id: 24, class: gpr64all, preferred-register: '' } 143 - { id: 25, class: gpr64all, preferred-register: '' } 144 - { id: 26, class: gpr32, preferred-register: '' } 145 - { id: 27, class: gpr32, preferred-register: '' } 146 - { id: 28, class: gpr32, preferred-register: '' } 147 - { id: 29, class: gpr64all, preferred-register: '' } 148 - { id: 30, class: gpr64all, preferred-register: '' } 149 - { id: 31, class: gpr32, preferred-register: '' } 150 - { id: 32, class: gpr64all, preferred-register: '' } 151 - { id: 33, class: gpr64all, preferred-register: '' } 152 - { id: 34, class: gpr32, preferred-register: '' } 153 - { id: 35, class: gpr64all, preferred-register: '' } 154 - { id: 36, class: gpr32, preferred-register: '' } 155liveins: [] 156frameInfo: 157 isFrameAddressTaken: false 158 isReturnAddressTaken: false 159 hasStackMap: false 160 hasPatchPoint: false 161 stackSize: 0 162 offsetAdjustment: 0 163 maxAlignment: 1 164 adjustsStack: true 165 hasCalls: true 166 stackProtector: '' 167 functionContext: '' 168 maxCallFrameSize: 0 169 cvBytesOfCalleeSavedRegisters: 0 170 hasOpaqueSPAdjustment: false 171 hasVAStart: false 172 hasMustTailInVarArgFunc: false 173 hasTailCall: false 174 localFrameSize: 0 175 savePoint: '' 176 restorePoint: '' 177fixedStack: [] 178stack: [] 179callSites: [] 180debugValueSubstitutions: [] 181constants: [] 182machineFunctionInfo: {} 183body: | 184 ; CHECK-LABEL: name: ham 185 ; CHECK: bb.0.bb: 186 ; CHECK-NEXT: successors: %bb.3(0x2aaaaaab), %bb.1(0x55555555) 187 ; CHECK-NEXT: {{ $}} 188 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $wzr 189 ; CHECK-NEXT: CBNZW [[COPY]], %bb.3 190 ; CHECK-NEXT: B %bb.1 191 ; CHECK-NEXT: {{ $}} 192 ; CHECK-NEXT: bb.1.bb: 193 ; CHECK-NEXT: successors: %bb.2(0x40000001), %bb.4(0x3fffffff) 194 ; CHECK-NEXT: {{ $}} 195 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $wzr 196 ; CHECK-NEXT: CBNZW [[COPY1]], %bb.4 197 ; CHECK-NEXT: B %bb.2 198 ; CHECK-NEXT: {{ $}} 199 ; CHECK-NEXT: bb.2.bb1: 200 ; CHECK-NEXT: successors: 201 ; CHECK-NEXT: {{ $}} 202 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 203 ; CHECK-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 10 204 ; CHECK-NEXT: $w0 = COPY [[MOVi32imm]] 205 ; CHECK-NEXT: STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr 206 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 207 ; CHECK-NEXT: {{ $}} 208 ; CHECK-NEXT: bb.3.bb2: 209 ; CHECK-NEXT: successors: 210 ; CHECK-NEXT: {{ $}} 211 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 212 ; CHECK-NEXT: [[MOVi32imm1:%[0-9]+]]:gpr32 = MOVi32imm 10 213 ; CHECK-NEXT: $w0 = COPY [[MOVi32imm1]] 214 ; CHECK-NEXT: STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr 215 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 216 ; CHECK-NEXT: {{ $}} 217 ; CHECK-NEXT: bb.4.bb4: 218 ; CHECK-NEXT: successors: %bb.13(0x40000000), %bb.5(0x40000000) 219 ; CHECK-NEXT: {{ $}} 220 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 221 ; CHECK-NEXT: [[DEF:%[0-9]+]]:gpr64all = IMPLICIT_DEF 222 ; CHECK-NEXT: $x0 = COPY [[DEF]] 223 ; CHECK-NEXT: [[DEF1:%[0-9]+]]:gpr64all = IMPLICIT_DEF 224 ; CHECK-NEXT: STATEPOINT 2882400000, 0, 1, [[DEF1]], $x0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr 225 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 226 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr64all = COPY $x0 227 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 228 ; CHECK-NEXT: [[DEF2:%[0-9]+]]:gpr64all = IMPLICIT_DEF 229 ; CHECK-NEXT: $x0 = COPY [[DEF2]] 230 ; CHECK-NEXT: [[DEF3:%[0-9]+]]:gpr64all = IMPLICIT_DEF 231 ; CHECK-NEXT: STATEPOINT 2, 4, 1, [[DEF3]], $x0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr 232 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 233 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr64all = COPY $x0 234 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr 235 ; CHECK-NEXT: CBNZW [[COPY4]], %bb.13 236 ; CHECK-NEXT: B %bb.5 237 ; CHECK-NEXT: {{ $}} 238 ; CHECK-NEXT: bb.5.bb24: 239 ; CHECK-NEXT: successors: %bb.10(0x20000000), %bb.6(0x60000000) 240 ; CHECK-NEXT: {{ $}} 241 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:gpr32 = COPY $wzr 242 ; CHECK-NEXT: CBNZW [[COPY5]], %bb.10 243 ; CHECK-NEXT: B %bb.6 244 ; CHECK-NEXT: {{ $}} 245 ; CHECK-NEXT: bb.6.bb24: 246 ; CHECK-NEXT: successors: %bb.9(0x2aaaaaab), %bb.7(0x55555555) 247 ; CHECK-NEXT: {{ $}} 248 ; CHECK-NEXT: [[COPY6:%[0-9]+]]:gpr32 = COPY $wzr 249 ; CHECK-NEXT: CBNZW [[COPY6]], %bb.9 250 ; CHECK-NEXT: B %bb.7 251 ; CHECK-NEXT: {{ $}} 252 ; CHECK-NEXT: bb.7.bb24: 253 ; CHECK-NEXT: successors: %bb.8(0x80000000) 254 ; CHECK-NEXT: {{ $}} 255 ; CHECK-NEXT: bb.8.bb25: 256 ; CHECK-NEXT: successors: %bb.18(0x30000000), %bb.14(0x50000000) 257 ; CHECK-NEXT: {{ $}} 258 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 259 ; CHECK-NEXT: [[DEF4:%[0-9]+]]:gpr64all = IMPLICIT_DEF 260 ; CHECK-NEXT: $x0 = COPY [[DEF4]] 261 ; CHECK-NEXT: [[DEF5:%[0-9]+]]:gpr64all = IMPLICIT_DEF 262 ; CHECK-NEXT: STATEPOINT 2, 4, 1, [[DEF5]], $x0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 2, 0, 2, 1, 0, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr 263 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 264 ; CHECK-NEXT: [[COPY7:%[0-9]+]]:gpr64all = COPY $x0 265 ; CHECK-NEXT: [[COPY8:%[0-9]+]]:gpr64 = COPY [[COPY7]] 266 ; CHECK-NEXT: [[COPY9:%[0-9]+]]:gpr64all = COPY $xzr 267 ; CHECK-NEXT: [[COPY10:%[0-9]+]]:gpr64all = COPY [[COPY9]] 268 ; CHECK-NEXT: [[COPY11:%[0-9]+]]:gpr64 = COPY [[COPY8]] 269 ; CHECK-NEXT: CBZX [[COPY8]], %bb.18 270 ; CHECK-NEXT: B %bb.14 271 ; CHECK-NEXT: {{ $}} 272 ; CHECK-NEXT: bb.9.bb29: 273 ; CHECK-NEXT: successors: %bb.18(0x30000000), %bb.14(0x50000000) 274 ; CHECK-NEXT: {{ $}} 275 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 276 ; CHECK-NEXT: [[DEF6:%[0-9]+]]:gpr64all = IMPLICIT_DEF 277 ; CHECK-NEXT: $x0 = COPY [[DEF6]] 278 ; CHECK-NEXT: [[DEF7:%[0-9]+]]:gpr64all = IMPLICIT_DEF 279 ; CHECK-NEXT: STATEPOINT 2, 4, 1, [[DEF7]], $x0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr 280 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 281 ; CHECK-NEXT: [[COPY12:%[0-9]+]]:gpr64all = COPY $x0 282 ; CHECK-NEXT: [[DEF8:%[0-9]+]]:gpr64 = IMPLICIT_DEF 283 ; CHECK-NEXT: [[COPY13:%[0-9]+]]:gpr64all = COPY [[DEF8]] 284 ; CHECK-NEXT: [[COPY14:%[0-9]+]]:gpr64 = COPY [[DEF8]] 285 ; CHECK-NEXT: CBZX [[DEF8]], %bb.18 286 ; CHECK-NEXT: B %bb.14 287 ; CHECK-NEXT: {{ $}} 288 ; CHECK-NEXT: bb.10.bb31: 289 ; CHECK-NEXT: successors: 290 ; CHECK-NEXT: {{ $}} 291 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 292 ; CHECK-NEXT: [[MOVi32imm2:%[0-9]+]]:gpr32 = MOVi32imm 10 293 ; CHECK-NEXT: $w0 = COPY [[MOVi32imm2]] 294 ; CHECK-NEXT: STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr 295 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 296 ; CHECK-NEXT: {{ $}} 297 ; CHECK-NEXT: bb.11.bb35: 298 ; CHECK-NEXT: successors: 299 ; CHECK-NEXT: {{ $}} 300 ; CHECK-NEXT: bb.13.bb40: 301 ; CHECK-NEXT: successors: 302 ; CHECK-NEXT: {{ $}} 303 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 304 ; CHECK-NEXT: [[MOVi32imm3:%[0-9]+]]:gpr32 = MOVi32imm 10 305 ; CHECK-NEXT: $w0 = COPY [[MOVi32imm3]] 306 ; CHECK-NEXT: STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr 307 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 308 ; CHECK-NEXT: {{ $}} 309 ; CHECK-NEXT: bb.14.bb42: 310 ; CHECK-NEXT: successors: %bb.17(0x20000000), %bb.15(0x60000000) 311 ; CHECK-NEXT: {{ $}} 312 ; CHECK-NEXT: [[PHI:%[0-9]+]]:gpr64 = PHI [[COPY11]], %bb.8, [[COPY14]], %bb.9 313 ; CHECK-NEXT: [[PHI1:%[0-9]+]]:gpr64all = PHI [[COPY10]], %bb.8, [[COPY13]], %bb.9 314 ; CHECK-NEXT: [[COPY15:%[0-9]+]]:gpr32 = COPY $wzr 315 ; CHECK-NEXT: CBNZW [[COPY15]], %bb.17 316 ; CHECK-NEXT: B %bb.15 317 ; CHECK-NEXT: {{ $}} 318 ; CHECK-NEXT: bb.15.bb42: 319 ; CHECK-NEXT: successors: %bb.17(0x2aaaaaab), %bb.16(0x55555555) 320 ; CHECK-NEXT: {{ $}} 321 ; CHECK-NEXT: [[COPY16:%[0-9]+]]:gpr32 = COPY $wzr 322 ; CHECK-NEXT: CBNZW [[COPY16]], %bb.17 323 ; CHECK-NEXT: B %bb.16 324 ; CHECK-NEXT: {{ $}} 325 ; CHECK-NEXT: bb.16.bb47: 326 ; CHECK-NEXT: successors: 327 ; CHECK-NEXT: {{ $}} 328 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 329 ; CHECK-NEXT: [[MOVi32imm4:%[0-9]+]]:gpr32 = MOVi32imm 14 330 ; CHECK-NEXT: $w0 = COPY [[MOVi32imm4]] 331 ; CHECK-NEXT: [[STATEPOINT:%[0-9]+]]:gpr64all, [[STATEPOINT1:%[0-9]+]]:gpr64all = STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 2, [[PHI1]], [[PHI]], 2, 2, [[PHI1]](tied-def 0), [[PHI]](tied-def 1), 2, 0, 2, 2, 0, 0, 1, 1, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr 332 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 333 ; CHECK-NEXT: {{ $}} 334 ; CHECK-NEXT: bb.17.bb49: 335 ; CHECK-NEXT: successors: 336 ; CHECK-NEXT: {{ $}} 337 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 338 ; CHECK-NEXT: [[MOVi32imm5:%[0-9]+]]:gpr32 = MOVi32imm 10 339 ; CHECK-NEXT: $w0 = COPY [[MOVi32imm5]] 340 ; CHECK-NEXT: [[STATEPOINT2:%[0-9]+]]:gpr64all, [[STATEPOINT3:%[0-9]+]]:gpr64all = STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 3, [[PHI1]], [[PHI]], [[PHI]], 2, 2, [[PHI1]](tied-def 0), [[PHI]](tied-def 1), 2, 0, 2, 2, 0, 0, 1, 1, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr 341 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 342 ; CHECK-NEXT: {{ $}} 343 ; CHECK-NEXT: bb.18.bb51: 344 ; CHECK-NEXT: [[PHI2:%[0-9]+]]:gpr64all = PHI [[COPY10]], %bb.8, [[COPY13]], %bb.9 345 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 346 ; CHECK-NEXT: [[MOVi32imm6:%[0-9]+]]:gpr32 = MOVi32imm 24 347 ; CHECK-NEXT: $w0 = COPY [[MOVi32imm6]] 348 ; CHECK-NEXT: [[STATEPOINT4:%[0-9]+]]:gpr64all = STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 1, [[PHI2]], 2, 1, [[PHI2]](tied-def 0), 2, 0, 2, 1, 0, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr 349 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 350 bb.0.bb: 351 successors: %bb.2(0x2aaaaaab), %bb.15(0x55555555) 352 353 %4:gpr32 = COPY $wzr 354 CBNZW %4, %bb.2 355 B %bb.15 356 357 bb.15.bb: 358 successors: %bb.1(0x40000001), %bb.3(0x3fffffff) 359 360 %5:gpr32 = COPY $wzr 361 CBNZW %5, %bb.3 362 B %bb.1 363 364 bb.1.bb1: 365 successors: 366 367 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 368 %7:gpr32 = MOVi32imm 10 369 $w0 = COPY %7 370 STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr 371 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 372 373 bb.2.bb2: 374 successors: 375 376 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 377 %6:gpr32 = MOVi32imm 10 378 $w0 = COPY %6 379 STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr 380 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 381 382 bb.3.bb4: 383 successors: %bb.10(0x40000000), %bb.4(0x40000000) 384 385 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 386 %8:gpr64all = IMPLICIT_DEF 387 $x0 = COPY %8 388 %9:gpr64all = IMPLICIT_DEF 389 STATEPOINT 2882400000, 0, 1, %9, $x0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr 390 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 391 %10:gpr64all = COPY $x0 392 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 393 %11:gpr64all = IMPLICIT_DEF 394 $x0 = COPY %11 395 %12:gpr64all = IMPLICIT_DEF 396 STATEPOINT 2, 4, 1, %12, $x0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr 397 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 398 %13:gpr64all = COPY $x0 399 %14:gpr32 = COPY $wzr 400 CBNZW %14, %bb.10 401 B %bb.4 402 403 bb.4.bb24: 404 successors: %bb.7(0x20000000), %bb.16(0x60000000) 405 406 %15:gpr32 = COPY $wzr 407 CBNZW %15, %bb.7 408 B %bb.16 409 410 bb.16.bb24: 411 successors: %bb.6(0x2aaaaaab), %bb.17(0x55555555) 412 413 %16:gpr32 = COPY $wzr 414 CBNZW %16, %bb.6 415 B %bb.17 416 417 bb.17.bb24: 418 successors: %bb.5(0x80000000) 419 420 421 bb.5.bb25: 422 successors: %bb.9(0x80000000) 423 424 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 425 %22:gpr64all = IMPLICIT_DEF 426 $x0 = COPY %22 427 %23:gpr64all = IMPLICIT_DEF 428 STATEPOINT 2, 4, 1, %23, $x0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 2, 0, 2, 1, 0, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr 429 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 430 %24:gpr64all = COPY $x0 431 %0:gpr64all = COPY %24 432 %25:gpr64all = COPY $xzr 433 %1:gpr64all = COPY %25 434 B %bb.9 435 436 bb.6.bb29: 437 successors: %bb.9(0x80000000) 438 439 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 440 %19:gpr64all = IMPLICIT_DEF 441 $x0 = COPY %19 442 %20:gpr64all = IMPLICIT_DEF 443 STATEPOINT 2, 4, 1, %20, $x0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr 444 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 445 %21:gpr64all = COPY $x0 446 %18:gpr64all = IMPLICIT_DEF 447 B %bb.9 448 449 bb.7.bb31: 450 successors: 451 452 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 453 %17:gpr32 = MOVi32imm 10 454 $w0 = COPY %17 455 STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr 456 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 457 458 bb.8.bb35: 459 successors: 460 461 462 bb.9.bb36: 463 successors: %bb.14(0x30000000), %bb.11(0x50000000) 464 465 %2:gpr64all = PHI %18, %bb.6, %1, %bb.5 466 %3:gpr64 = PHI %18, %bb.6, %0, %bb.5 467 CBZX %3, %bb.14 468 B %bb.11 469 470 bb.10.bb40: 471 successors: 472 473 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 474 %36:gpr32 = MOVi32imm 10 475 $w0 = COPY %36 476 STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr 477 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 478 479 bb.11.bb42: 480 successors: %bb.13(0x20000000), %bb.18(0x60000000) 481 482 %26:gpr32 = COPY $wzr 483 CBNZW %26, %bb.13 484 B %bb.18 485 486 bb.18.bb42: 487 successors: %bb.13(0x2aaaaaab), %bb.12(0x55555555) 488 489 %27:gpr32 = COPY $wzr 490 CBNZW %27, %bb.13 491 B %bb.12 492 493 bb.12.bb47: 494 successors: 495 496 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 497 %28:gpr32 = MOVi32imm 14 498 $w0 = COPY %28 499 %29:gpr64all, %30:gpr64all = STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 2, %2, %3, 2, 2, %2(tied-def 0), %3(tied-def 1), 2, 0, 2, 2, 0, 0, 1, 1, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr 500 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 501 502 bb.13.bb49: 503 successors: 504 505 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 506 %31:gpr32 = MOVi32imm 10 507 $w0 = COPY %31 508 %32:gpr64all, %33:gpr64all = STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 3, %2, %3, %3, 2, 2, %2(tied-def 0), %3(tied-def 1), 2, 0, 2, 2, 0, 0, 1, 1, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr 509 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 510 511 bb.14.bb51: 512 ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp 513 %34:gpr32 = MOVi32imm 24 514 $w0 = COPY %34 515 %35:gpr64all = STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 1, %2, 2, 1, %2(tied-def 0), 2, 0, 2, 1, 0, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr 516 ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp 517 518... 519