| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py |
| # RUN: llc -run-pass=early-tailduplication %s -o - | FileCheck %s |
| --- | |
| target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" |
| target triple = "aarch64-none-linux-gnu" |
| |
| define void @ham() gc "statepoint-example" personality i32* ()* @baz { |
| bb: |
| switch i32 undef, label %bb4 [ |
| i32 2050, label %bb1 |
| i32 2282, label %bb2 |
| ] |
| |
| bb1: ; preds = %bb |
| %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"() ] |
| unreachable |
| |
| bb2: ; preds = %bb |
| %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"() ] |
| unreachable |
| |
| bb4: ; preds = %bb |
| %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"() ] |
| %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"() ] |
| br i1 undef, label %bb40, label %bb24 |
| |
| bb24: ; preds = %bb4 |
| switch i32 undef, label %bb35 [ |
| i32 1388, label %bb25 |
| i32 2742, label %bb29 |
| i32 2884, label %bb31 |
| ] |
| |
| bb25: ; preds = %bb24 |
| %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) ] |
| %tmp27 = call align 8 i8 addrspace(1)* @llvm.experimental.gc.result.p1i8(token %tmp26) |
| %tmp28 = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %tmp26, i32 0, i32 0) ; (null, null) |
| br label %bb36 |
| |
| bb29: ; preds = %bb24 |
| %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"() ] |
| br label %bb36 |
| |
| bb31: ; preds = %bb24 |
| %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"() ] |
| unreachable |
| |
| bb35: ; preds = %bb24 |
| unreachable |
| |
| bb36: ; preds = %bb29, %bb25 |
| %tmp37 = phi i8 addrspace(1)* [ undef, %bb29 ], [ %tmp28, %bb25 ] |
| %tmp38 = phi i8 addrspace(1)* [ undef, %bb29 ], [ %tmp27, %bb25 ] |
| %tmp39 = icmp eq i8 addrspace(1)* %tmp38, null |
| br i1 %tmp39, label %bb51, label %bb42 |
| |
| bb40: ; preds = %bb4 |
| %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"() ] |
| unreachable |
| |
| bb42: ; preds = %bb36 |
| %tmp46 = icmp eq i32 undef, 1381 |
| %or.cond = select i1 undef, i1 true, i1 %tmp46 |
| br i1 %or.cond, label %bb49, label %bb47 |
| |
| bb47: ; preds = %bb42 |
| %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"() ] |
| unreachable |
| |
| bb49: ; preds = %bb42 |
| %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"() ] |
| unreachable |
| |
| bb51: ; preds = %bb36 |
| %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"() ] |
| unreachable |
| } |
| |
| declare i32* @baz() |
| |
| declare i8 addrspace(1)* @barney(i8 addrspace(1)*) |
| |
| declare i8 addrspace(1)* @wobble(i8 addrspace(1)*) |
| |
| declare i8 addrspace(1)* @bar(i8 addrspace(1)*) |
| |
| ; Function Attrs: nounwind readnone |
| declare i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token, i32 immarg, i32 immarg) #0 |
| |
| ; Function Attrs: nounwind readnone |
| declare i8 addrspace(1)* @llvm.experimental.gc.result.p1i8(token) #0 |
| |
| declare void @wombat(i32) |
| |
| declare token @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 immarg, i32 immarg, void (i32)*, i32 immarg, i32 immarg, ...) |
| |
| declare token @llvm.experimental.gc.statepoint.p0f_p1i8p1i8f(i64 immarg, i32 immarg, i8 addrspace(1)* (i8 addrspace(1)*)*, i32 immarg, i32 immarg, ...) |
| |
| attributes #0 = { nounwind readnone } |
| |
| ... |
| --- |
| name: ham |
| alignment: 4 |
| exposesReturnsTwice: false |
| legalized: false |
| regBankSelected: false |
| selected: false |
| failedISel: false |
| tracksRegLiveness: true |
| hasWinCFI: false |
| callsEHReturn: false |
| callsUnwindInit: false |
| hasEHCatchret: false |
| hasEHScopes: false |
| hasEHFunclets: false |
| failsVerification: false |
| tracksDebugUserValues: false |
| registers: |
| - { id: 0, class: gpr64all, preferred-register: '' } |
| - { id: 1, class: gpr64all, preferred-register: '' } |
| - { id: 2, class: gpr64all, preferred-register: '' } |
| - { id: 3, class: gpr64, preferred-register: '' } |
| - { id: 4, class: gpr32, preferred-register: '' } |
| - { id: 5, class: gpr32, preferred-register: '' } |
| - { id: 6, class: gpr32, preferred-register: '' } |
| - { id: 7, class: gpr32, preferred-register: '' } |
| - { id: 8, class: gpr64all, preferred-register: '' } |
| - { id: 9, class: gpr64all, preferred-register: '' } |
| - { id: 10, class: gpr64all, preferred-register: '' } |
| - { id: 11, class: gpr64all, preferred-register: '' } |
| - { id: 12, class: gpr64all, preferred-register: '' } |
| - { id: 13, class: gpr64all, preferred-register: '' } |
| - { id: 14, class: gpr32, preferred-register: '' } |
| - { id: 15, class: gpr32, preferred-register: '' } |
| - { id: 16, class: gpr32, preferred-register: '' } |
| - { id: 17, class: gpr32, preferred-register: '' } |
| - { id: 18, class: gpr64all, preferred-register: '' } |
| - { id: 19, class: gpr64all, preferred-register: '' } |
| - { id: 20, class: gpr64all, preferred-register: '' } |
| - { id: 21, class: gpr64all, preferred-register: '' } |
| - { id: 22, class: gpr64all, preferred-register: '' } |
| - { id: 23, class: gpr64all, preferred-register: '' } |
| - { id: 24, class: gpr64all, preferred-register: '' } |
| - { id: 25, class: gpr64all, preferred-register: '' } |
| - { id: 26, class: gpr32, preferred-register: '' } |
| - { id: 27, class: gpr32, preferred-register: '' } |
| - { id: 28, class: gpr32, preferred-register: '' } |
| - { id: 29, class: gpr64all, preferred-register: '' } |
| - { id: 30, class: gpr64all, preferred-register: '' } |
| - { id: 31, class: gpr32, preferred-register: '' } |
| - { id: 32, class: gpr64all, preferred-register: '' } |
| - { id: 33, class: gpr64all, preferred-register: '' } |
| - { id: 34, class: gpr32, preferred-register: '' } |
| - { id: 35, class: gpr64all, preferred-register: '' } |
| - { id: 36, class: gpr32, preferred-register: '' } |
| liveins: [] |
| frameInfo: |
| isFrameAddressTaken: false |
| isReturnAddressTaken: false |
| hasStackMap: false |
| hasPatchPoint: false |
| stackSize: 0 |
| offsetAdjustment: 0 |
| maxAlignment: 1 |
| adjustsStack: true |
| hasCalls: true |
| stackProtector: '' |
| functionContext: '' |
| maxCallFrameSize: 0 |
| cvBytesOfCalleeSavedRegisters: 0 |
| hasOpaqueSPAdjustment: false |
| hasVAStart: false |
| hasMustTailInVarArgFunc: false |
| hasTailCall: false |
| localFrameSize: 0 |
| savePoint: '' |
| restorePoint: '' |
| fixedStack: [] |
| stack: [] |
| callSites: [] |
| debugValueSubstitutions: [] |
| constants: [] |
| machineFunctionInfo: {} |
| body: | |
| ; CHECK-LABEL: name: ham |
| ; CHECK: bb.0.bb: |
| ; CHECK-NEXT: successors: %bb.3(0x2aaaaaab), %bb.1(0x55555555) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $wzr |
| ; CHECK-NEXT: CBNZW [[COPY]], %bb.3 |
| ; CHECK-NEXT: B %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1.bb: |
| ; CHECK-NEXT: successors: %bb.2(0x40000001), %bb.4(0x3fffffff) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $wzr |
| ; CHECK-NEXT: CBNZW [[COPY1]], %bb.4 |
| ; CHECK-NEXT: B %bb.2 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2.bb1: |
| ; CHECK-NEXT: successors:{{ $}} |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 10 |
| ; CHECK-NEXT: $w0 = COPY [[MOVi32imm]] |
| ; 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 |
| ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.3.bb2: |
| ; CHECK-NEXT: successors:{{ $}} |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: [[MOVi32imm1:%[0-9]+]]:gpr32 = MOVi32imm 10 |
| ; CHECK-NEXT: $w0 = COPY [[MOVi32imm1]] |
| ; 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 |
| ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.4.bb4: |
| ; CHECK-NEXT: successors: %bb.13(0x40000000), %bb.5(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:gpr64all = IMPLICIT_DEF |
| ; CHECK-NEXT: $x0 = COPY [[DEF]] |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:gpr64all = IMPLICIT_DEF |
| ; 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 |
| ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr64all = COPY $x0 |
| ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: [[DEF2:%[0-9]+]]:gpr64all = IMPLICIT_DEF |
| ; CHECK-NEXT: $x0 = COPY [[DEF2]] |
| ; CHECK-NEXT: [[DEF3:%[0-9]+]]:gpr64all = IMPLICIT_DEF |
| ; 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 |
| ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr64all = COPY $x0 |
| ; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr |
| ; CHECK-NEXT: CBNZW [[COPY4]], %bb.13 |
| ; CHECK-NEXT: B %bb.5 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.5.bb24: |
| ; CHECK-NEXT: successors: %bb.10(0x20000000), %bb.6(0x60000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY5:%[0-9]+]]:gpr32 = COPY $wzr |
| ; CHECK-NEXT: CBNZW [[COPY5]], %bb.10 |
| ; CHECK-NEXT: B %bb.6 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.6.bb24: |
| ; CHECK-NEXT: successors: %bb.9(0x2aaaaaab), %bb.7(0x55555555) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY6:%[0-9]+]]:gpr32 = COPY $wzr |
| ; CHECK-NEXT: CBNZW [[COPY6]], %bb.9 |
| ; CHECK-NEXT: B %bb.7 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.7.bb24: |
| ; CHECK-NEXT: successors: %bb.8(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.8.bb25: |
| ; CHECK-NEXT: successors: %bb.18(0x30000000), %bb.14(0x50000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: [[DEF4:%[0-9]+]]:gpr64all = IMPLICIT_DEF |
| ; CHECK-NEXT: $x0 = COPY [[DEF4]] |
| ; CHECK-NEXT: [[DEF5:%[0-9]+]]:gpr64all = IMPLICIT_DEF |
| ; 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 |
| ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: [[COPY7:%[0-9]+]]:gpr64all = COPY $x0 |
| ; CHECK-NEXT: [[COPY8:%[0-9]+]]:gpr64 = COPY [[COPY7]] |
| ; CHECK-NEXT: [[COPY9:%[0-9]+]]:gpr64all = COPY $xzr |
| ; CHECK-NEXT: [[COPY10:%[0-9]+]]:gpr64all = COPY [[COPY9]] |
| ; CHECK-NEXT: [[COPY11:%[0-9]+]]:gpr64 = COPY [[COPY8]] |
| ; CHECK-NEXT: CBZX [[COPY8]], %bb.18 |
| ; CHECK-NEXT: B %bb.14 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.9.bb29: |
| ; CHECK-NEXT: successors: %bb.18(0x30000000), %bb.14(0x50000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: [[DEF6:%[0-9]+]]:gpr64all = IMPLICIT_DEF |
| ; CHECK-NEXT: $x0 = COPY [[DEF6]] |
| ; CHECK-NEXT: [[DEF7:%[0-9]+]]:gpr64all = IMPLICIT_DEF |
| ; 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 |
| ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: [[COPY12:%[0-9]+]]:gpr64all = COPY $x0 |
| ; CHECK-NEXT: [[DEF8:%[0-9]+]]:gpr64 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[COPY13:%[0-9]+]]:gpr64all = COPY [[DEF8]] |
| ; CHECK-NEXT: [[COPY14:%[0-9]+]]:gpr64 = COPY [[DEF8]] |
| ; CHECK-NEXT: CBZX [[DEF8]], %bb.18 |
| ; CHECK-NEXT: B %bb.14 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.10.bb31: |
| ; CHECK-NEXT: successors:{{ $}} |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: [[MOVi32imm2:%[0-9]+]]:gpr32 = MOVi32imm 10 |
| ; CHECK-NEXT: $w0 = COPY [[MOVi32imm2]] |
| ; 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 |
| ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.11.bb35: |
| ; CHECK-NEXT: successors:{{ $}} |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.13.bb40: |
| ; CHECK-NEXT: successors:{{ $}} |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: [[MOVi32imm3:%[0-9]+]]:gpr32 = MOVi32imm 10 |
| ; CHECK-NEXT: $w0 = COPY [[MOVi32imm3]] |
| ; 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 |
| ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.14.bb42: |
| ; CHECK-NEXT: successors: %bb.17(0x20000000), %bb.15(0x60000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[PHI:%[0-9]+]]:gpr64 = PHI [[COPY11]], %bb.8, [[COPY14]], %bb.9 |
| ; CHECK-NEXT: [[PHI1:%[0-9]+]]:gpr64all = PHI [[COPY10]], %bb.8, [[COPY13]], %bb.9 |
| ; CHECK-NEXT: [[COPY15:%[0-9]+]]:gpr32 = COPY $wzr |
| ; CHECK-NEXT: CBNZW [[COPY15]], %bb.17 |
| ; CHECK-NEXT: B %bb.15 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.15.bb42: |
| ; CHECK-NEXT: successors: %bb.17(0x2aaaaaab), %bb.16(0x55555555) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY16:%[0-9]+]]:gpr32 = COPY $wzr |
| ; CHECK-NEXT: CBNZW [[COPY16]], %bb.17 |
| ; CHECK-NEXT: B %bb.16 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.16.bb47: |
| ; CHECK-NEXT: successors:{{ $}} |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: [[MOVi32imm4:%[0-9]+]]:gpr32 = MOVi32imm 14 |
| ; CHECK-NEXT: $w0 = COPY [[MOVi32imm4]] |
| ; 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 |
| ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.17.bb49: |
| ; CHECK-NEXT: successors:{{ $}} |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: [[MOVi32imm5:%[0-9]+]]:gpr32 = MOVi32imm 10 |
| ; CHECK-NEXT: $w0 = COPY [[MOVi32imm5]] |
| ; 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 |
| ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.18.bb51: |
| ; CHECK-NEXT: [[PHI2:%[0-9]+]]:gpr64all = PHI [[COPY10]], %bb.8, [[COPY13]], %bb.9 |
| ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| ; CHECK-NEXT: [[MOVi32imm6:%[0-9]+]]:gpr32 = MOVi32imm 24 |
| ; CHECK-NEXT: $w0 = COPY [[MOVi32imm6]] |
| ; 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 |
| ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| bb.0.bb: |
| successors: %bb.2(0x2aaaaaab), %bb.15(0x55555555) |
| |
| %4:gpr32 = COPY $wzr |
| CBNZW %4, %bb.2 |
| B %bb.15 |
| |
| bb.15.bb: |
| successors: %bb.1(0x40000001), %bb.3(0x3fffffff) |
| |
| %5:gpr32 = COPY $wzr |
| CBNZW %5, %bb.3 |
| B %bb.1 |
| |
| bb.1.bb1: |
| successors: |
| |
| ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| %7:gpr32 = MOVi32imm 10 |
| $w0 = COPY %7 |
| 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 |
| ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| |
| bb.2.bb2: |
| successors: |
| |
| ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| %6:gpr32 = MOVi32imm 10 |
| $w0 = COPY %6 |
| 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 |
| ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| |
| bb.3.bb4: |
| successors: %bb.10(0x40000000), %bb.4(0x40000000) |
| |
| ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| %8:gpr64all = IMPLICIT_DEF |
| $x0 = COPY %8 |
| %9:gpr64all = IMPLICIT_DEF |
| 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 |
| ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| %10:gpr64all = COPY $x0 |
| ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| %11:gpr64all = IMPLICIT_DEF |
| $x0 = COPY %11 |
| %12:gpr64all = IMPLICIT_DEF |
| 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 |
| ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| %13:gpr64all = COPY $x0 |
| %14:gpr32 = COPY $wzr |
| CBNZW %14, %bb.10 |
| B %bb.4 |
| |
| bb.4.bb24: |
| successors: %bb.7(0x20000000), %bb.16(0x60000000) |
| |
| %15:gpr32 = COPY $wzr |
| CBNZW %15, %bb.7 |
| B %bb.16 |
| |
| bb.16.bb24: |
| successors: %bb.6(0x2aaaaaab), %bb.17(0x55555555) |
| |
| %16:gpr32 = COPY $wzr |
| CBNZW %16, %bb.6 |
| B %bb.17 |
| |
| bb.17.bb24: |
| successors: %bb.5(0x80000000) |
| |
| |
| bb.5.bb25: |
| successors: %bb.9(0x80000000) |
| |
| ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| %22:gpr64all = IMPLICIT_DEF |
| $x0 = COPY %22 |
| %23:gpr64all = IMPLICIT_DEF |
| 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 |
| ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| %24:gpr64all = COPY $x0 |
| %0:gpr64all = COPY %24 |
| %25:gpr64all = COPY $xzr |
| %1:gpr64all = COPY %25 |
| B %bb.9 |
| |
| bb.6.bb29: |
| successors: %bb.9(0x80000000) |
| |
| ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| %19:gpr64all = IMPLICIT_DEF |
| $x0 = COPY %19 |
| %20:gpr64all = IMPLICIT_DEF |
| 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 |
| ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| %21:gpr64all = COPY $x0 |
| %18:gpr64all = IMPLICIT_DEF |
| B %bb.9 |
| |
| bb.7.bb31: |
| successors: |
| |
| ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| %17:gpr32 = MOVi32imm 10 |
| $w0 = COPY %17 |
| 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 |
| ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| |
| bb.8.bb35: |
| successors: |
| |
| |
| bb.9.bb36: |
| successors: %bb.14(0x30000000), %bb.11(0x50000000) |
| |
| %2:gpr64all = PHI %18, %bb.6, %1, %bb.5 |
| %3:gpr64 = PHI %18, %bb.6, %0, %bb.5 |
| CBZX %3, %bb.14 |
| B %bb.11 |
| |
| bb.10.bb40: |
| successors: |
| |
| ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| %36:gpr32 = MOVi32imm 10 |
| $w0 = COPY %36 |
| 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 |
| ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| |
| bb.11.bb42: |
| successors: %bb.13(0x20000000), %bb.18(0x60000000) |
| |
| %26:gpr32 = COPY $wzr |
| CBNZW %26, %bb.13 |
| B %bb.18 |
| |
| bb.18.bb42: |
| successors: %bb.13(0x2aaaaaab), %bb.12(0x55555555) |
| |
| %27:gpr32 = COPY $wzr |
| CBNZW %27, %bb.13 |
| B %bb.12 |
| |
| bb.12.bb47: |
| successors: |
| |
| ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| %28:gpr32 = MOVi32imm 14 |
| $w0 = COPY %28 |
| %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 |
| ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| |
| bb.13.bb49: |
| successors: |
| |
| ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| %31:gpr32 = MOVi32imm 10 |
| $w0 = COPY %31 |
| %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 |
| ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| |
| bb.14.bb51: |
| ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp |
| %34:gpr32 = MOVi32imm 24 |
| $w0 = COPY %34 |
| %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 |
| ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp |
| |
| ... |