| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5 |
| # RUN: llc -mtriple=arm64-apple-ios -mattr +cmpbr -run-pass=early-ifcvt -verify-machineinstrs -simplify-mir -o - %s | FileCheck %s |
| --- |
| name: cb_diamond |
| alignment: 4 |
| tracksRegLiveness: true |
| noPhis: false |
| isSSA: true |
| noVRegs: false |
| hasFakeUses: false |
| registers: |
| - { id: 0, class: gpr64 } |
| - { id: 1, class: gpr64 } |
| - { id: 2, class: gpr64 } |
| - { id: 3, class: gpr64 } |
| - { id: 4, class: gpr64 } |
| - { id: 5, class: gpr64 } |
| liveins: |
| - { reg: '$x0', virtual-reg: '%0' } |
| - { reg: '$x1', virtual-reg: '%1' } |
| frameInfo: |
| maxAlignment: 1 |
| maxCallFrameSize: 0 |
| machineFunctionInfo: {} |
| body: | |
| ; CHECK-LABEL: name: cb_diamond |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: liveins: $x0, $x1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1 |
| ; CHECK-NEXT: [[ADDXrr:%[0-9]+]]:gpr64 = ADDXrr [[COPY]], [[COPY1]] |
| ; CHECK-NEXT: [[MADDXrrr:%[0-9]+]]:gpr64 = MADDXrrr [[COPY]], [[COPY1]], $xzr |
| ; CHECK-NEXT: $xzr = SUBSXrr [[COPY]], [[COPY1]], implicit-def $nzcv |
| ; CHECK-NEXT: [[CSELXr:%[0-9]+]]:gpr64 = CSELXr [[ADDXrr]], [[MADDXrrr]], 11, implicit $nzcv |
| ; CHECK-NEXT: [[ADDXrr1:%[0-9]+]]:gpr64 = ADDXrr killed [[CSELXr]], [[COPY]] |
| ; CHECK-NEXT: $x0 = COPY [[ADDXrr1]] |
| ; CHECK-NEXT: RET_ReallyLR implicit $x0 |
| bb.0: |
| successors: %bb.1, %bb.2 |
| liveins: $x0, $x1 |
| |
| %0:gpr64 = COPY $x0 |
| %1:gpr64 = COPY $x1 |
| CBXPrr 11, %0, %1, %bb.1 |
| B %bb.2 |
| |
| bb.1: |
| successors: %bb.3 |
| %2:gpr64 = ADDXrr %0, %1 |
| B %bb.3 |
| |
| bb.2: |
| successors: %bb.3 |
| %3:gpr64 = MADDXrrr %0, %1, $xzr |
| B %bb.3 |
| |
| bb.3: |
| %4:gpr64 = PHI %2, %bb.1, %3, %bb.2 |
| %5:gpr64 = ADDXrr killed %4, %0 |
| $x0 = COPY %5 |
| RET_ReallyLR implicit $x0 |
| ... |
| --- |
| name: cb_triangle |
| alignment: 4 |
| tracksRegLiveness: true |
| noPhis: false |
| isSSA: true |
| noVRegs: false |
| hasFakeUses: false |
| registers: |
| - { id: 0, class: gpr64 } |
| - { id: 1, class: gpr64 } |
| - { id: 2, class: gpr64 } |
| - { id: 3, class: gpr64 } |
| - { id: 4, class: gpr64 } |
| liveins: |
| - { reg: '$x0', virtual-reg: '%0' } |
| - { reg: '$x1', virtual-reg: '%1' } |
| frameInfo: |
| maxAlignment: 1 |
| maxCallFrameSize: 0 |
| machineFunctionInfo: {} |
| body: | |
| ; CHECK-LABEL: name: cb_triangle |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: liveins: $x0, $x1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1 |
| ; CHECK-NEXT: [[ADDXrr:%[0-9]+]]:gpr64 = ADDXrr [[COPY]], [[COPY1]] |
| ; CHECK-NEXT: $xzr = SUBSXrr [[COPY]], [[COPY1]], implicit-def $nzcv |
| ; CHECK-NEXT: [[CSELXr:%[0-9]+]]:gpr64 = CSELXr [[COPY1]], [[ADDXrr]], 10, implicit $nzcv |
| ; CHECK-NEXT: [[ADDXrr1:%[0-9]+]]:gpr64 = ADDXrr killed [[CSELXr]], [[COPY]] |
| ; CHECK-NEXT: $x0 = COPY [[ADDXrr1]] |
| ; CHECK-NEXT: RET_ReallyLR implicit $x0 |
| bb.0: |
| successors: %bb.1, %bb.2 |
| liveins: $x0, $x1 |
| |
| %0:gpr64 = COPY $x0 |
| %1:gpr64 = COPY $x1 |
| CBXPrr 10, %0, %1, %bb.2 |
| |
| bb.1: |
| successors: %bb.2 |
| %2:gpr64 = ADDXrr %0, %1 |
| |
| bb.2: |
| %3:gpr64 = PHI %1, %bb.0, %2, %bb.1 |
| %4:gpr64 = ADDXrr killed %3, %0 |
| $x0 = COPY %4 |
| RET_ReallyLR implicit $x0 |
| ... |
| --- |
| name: cbb_diamond_no_ext |
| alignment: 4 |
| tracksRegLiveness: true |
| noPhis: false |
| isSSA: true |
| noVRegs: false |
| hasFakeUses: false |
| registers: |
| - { id: 0, class: gpr32 } |
| - { id: 1, class: gpr32 } |
| - { id: 2, class: gpr32 } |
| - { id: 3, class: gpr32 } |
| - { id: 4, class: gpr32 } |
| - { id: 5, class: gpr32 } |
| liveins: |
| - { reg: '$w0', virtual-reg: '%0' } |
| - { reg: '$w1', virtual-reg: '%1' } |
| frameInfo: |
| maxAlignment: 1 |
| maxCallFrameSize: 0 |
| machineFunctionInfo: {} |
| body: | |
| ; CHECK-LABEL: name: cbb_diamond_no_ext |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: liveins: $w0, $w1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32common = COPY $w0 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 |
| ; CHECK-NEXT: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr [[COPY]], [[COPY1]] |
| ; CHECK-NEXT: [[MADDWrrr:%[0-9]+]]:gpr32 = MADDWrrr [[COPY]], [[COPY1]], $wzr |
| ; CHECK-NEXT: $wzr = SUBSWrr [[COPY]], [[COPY1]], implicit-def $nzcv |
| ; CHECK-NEXT: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[ADDWrr]], [[MADDWrrr]], 11, implicit $nzcv |
| ; CHECK-NEXT: [[ADDWrr1:%[0-9]+]]:gpr32 = ADDWrr killed [[CSELWr]], [[COPY]] |
| ; CHECK-NEXT: $w0 = COPY [[ADDWrr1]] |
| ; CHECK-NEXT: RET_ReallyLR implicit $w0 |
| bb.0: |
| successors: %bb.1, %bb.2 |
| liveins: $w0, $w1 |
| |
| %0:gpr32 = COPY $w0 |
| %1:gpr32 = COPY $w1 |
| CBBAssertExt 11, %0, %1, %bb.1, -1, -1 |
| B %bb.2 |
| |
| bb.1: |
| successors: %bb.3 |
| %2:gpr32 = ADDWrr %0, %1 |
| B %bb.3 |
| |
| bb.2: |
| successors: %bb.3 |
| %3:gpr32 = MADDWrrr %0, %1, $wzr |
| B %bb.3 |
| |
| bb.3: |
| %4:gpr32 = PHI %2, %bb.1, %3, %bb.2 |
| %5:gpr32 = ADDWrr killed %4, %0 |
| $w0 = COPY %5 |
| RET_ReallyLR implicit $w0 |
| ... |
| --- |
| name: cbb_diamond_zext |
| alignment: 4 |
| tracksRegLiveness: true |
| noPhis: false |
| isSSA: true |
| noVRegs: false |
| hasFakeUses: false |
| registers: |
| - { id: 0, class: gpr32 } |
| - { id: 1, class: gpr32 } |
| - { id: 2, class: gpr32 } |
| - { id: 3, class: gpr32 } |
| - { id: 4, class: gpr32 } |
| - { id: 5, class: gpr32 } |
| liveins: |
| - { reg: '$w0', virtual-reg: '%0' } |
| - { reg: '$w1', virtual-reg: '%1' } |
| frameInfo: |
| maxAlignment: 1 |
| maxCallFrameSize: 0 |
| machineFunctionInfo: {} |
| body: | |
| ; CHECK-LABEL: name: cbb_diamond_zext |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: liveins: $w0, $w1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32common = COPY $w0 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 |
| ; CHECK-NEXT: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr [[COPY]], [[COPY1]] |
| ; CHECK-NEXT: [[MADDWrrr:%[0-9]+]]:gpr32 = MADDWrrr [[COPY]], [[COPY1]], $wzr |
| ; CHECK-NEXT: [[ANDWri:%[0-9]+]]:gpr32common = ANDWri [[COPY1]], 7 |
| ; CHECK-NEXT: $wzr = SUBSWrx [[COPY]], [[ANDWri]], 0, implicit-def $nzcv |
| ; CHECK-NEXT: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[ADDWrr]], [[MADDWrrr]], 11, implicit $nzcv |
| ; CHECK-NEXT: [[ADDWrr1:%[0-9]+]]:gpr32 = ADDWrr killed [[CSELWr]], [[COPY]] |
| ; CHECK-NEXT: $w0 = COPY [[ADDWrr1]] |
| ; CHECK-NEXT: RET_ReallyLR implicit $w0 |
| bb.0: |
| successors: %bb.1, %bb.2 |
| liveins: $w0, $w1 |
| |
| %0:gpr32 = COPY $w0 |
| %1:gpr32 = COPY $w1 |
| CBBAssertExt 11, %0, %1, %bb.1, 0, 0 |
| B %bb.2 |
| |
| bb.1: |
| successors: %bb.3 |
| %2:gpr32 = ADDWrr %0, %1 |
| B %bb.3 |
| |
| bb.2: |
| successors: %bb.3 |
| %3:gpr32 = MADDWrrr %0, %1, $wzr |
| B %bb.3 |
| |
| bb.3: |
| %4:gpr32 = PHI %2, %bb.1, %3, %bb.2 |
| %5:gpr32 = ADDWrr killed %4, %0 |
| $w0 = COPY %5 |
| RET_ReallyLR implicit $w0 |
| ... |
| --- |
| name: cbb_diamond_sext |
| alignment: 4 |
| tracksRegLiveness: true |
| noPhis: false |
| isSSA: true |
| noVRegs: false |
| hasFakeUses: false |
| registers: |
| - { id: 0, class: gpr32 } |
| - { id: 1, class: gpr32 } |
| - { id: 2, class: gpr32 } |
| - { id: 3, class: gpr32 } |
| - { id: 4, class: gpr32 } |
| - { id: 5, class: gpr32 } |
| liveins: |
| - { reg: '$w0', virtual-reg: '%0' } |
| - { reg: '$w1', virtual-reg: '%1' } |
| frameInfo: |
| maxAlignment: 1 |
| maxCallFrameSize: 0 |
| machineFunctionInfo: {} |
| body: | |
| ; CHECK-LABEL: name: cbb_diamond_sext |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: liveins: $w0, $w1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32common = COPY $w0 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 |
| ; CHECK-NEXT: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr [[COPY]], [[COPY1]] |
| ; CHECK-NEXT: [[MADDWrrr:%[0-9]+]]:gpr32 = MADDWrrr [[COPY]], [[COPY1]], $wzr |
| ; CHECK-NEXT: [[SBFMWri:%[0-9]+]]:gpr32common = SBFMWri [[COPY1]], 0, 7 |
| ; CHECK-NEXT: $wzr = SUBSWrx [[COPY]], [[SBFMWri]], 32, implicit-def $nzcv |
| ; CHECK-NEXT: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[ADDWrr]], [[MADDWrrr]], 11, implicit $nzcv |
| ; CHECK-NEXT: [[ADDWrr1:%[0-9]+]]:gpr32 = ADDWrr killed [[CSELWr]], [[COPY]] |
| ; CHECK-NEXT: $w0 = COPY [[ADDWrr1]] |
| ; CHECK-NEXT: RET_ReallyLR implicit $w0 |
| bb.0: |
| successors: %bb.1, %bb.2 |
| liveins: $w0, $w1 |
| |
| %0:gpr32 = COPY $w0 |
| %1:gpr32 = COPY $w1 |
| CBBAssertExt 11, %0, %1, %bb.1, 4, 4 |
| B %bb.2 |
| |
| bb.1: |
| successors: %bb.3 |
| %2:gpr32 = ADDWrr %0, %1 |
| B %bb.3 |
| |
| bb.2: |
| successors: %bb.3 |
| %3:gpr32 = MADDWrrr %0, %1, $wzr |
| B %bb.3 |
| |
| bb.3: |
| %4:gpr32 = PHI %2, %bb.1, %3, %bb.2 |
| %5:gpr32 = ADDWrr killed %4, %0 |
| $w0 = COPY %5 |
| RET_ReallyLR implicit $w0 |
| ... |
| --- |
| name: cbh_diamond_zext |
| alignment: 4 |
| tracksRegLiveness: true |
| noPhis: false |
| isSSA: true |
| noVRegs: false |
| hasFakeUses: false |
| registers: |
| - { id: 0, class: gpr32 } |
| - { id: 1, class: gpr32 } |
| - { id: 2, class: gpr32 } |
| - { id: 3, class: gpr32 } |
| - { id: 4, class: gpr32 } |
| - { id: 5, class: gpr32 } |
| liveins: |
| - { reg: '$w0', virtual-reg: '%0' } |
| - { reg: '$w1', virtual-reg: '%1' } |
| frameInfo: |
| maxAlignment: 1 |
| maxCallFrameSize: 0 |
| machineFunctionInfo: {} |
| body: | |
| ; CHECK-LABEL: name: cbh_diamond_zext |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: liveins: $w0, $w1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32common = COPY $w0 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 |
| ; CHECK-NEXT: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr [[COPY]], [[COPY1]] |
| ; CHECK-NEXT: [[MADDWrrr:%[0-9]+]]:gpr32 = MADDWrrr [[COPY]], [[COPY1]], $wzr |
| ; CHECK-NEXT: [[ANDWri:%[0-9]+]]:gpr32common = ANDWri [[COPY1]], 15 |
| ; CHECK-NEXT: $wzr = SUBSWrx [[COPY]], [[ANDWri]], 8, implicit-def $nzcv |
| ; CHECK-NEXT: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[ADDWrr]], [[MADDWrrr]], 11, implicit $nzcv |
| ; CHECK-NEXT: [[ADDWrr1:%[0-9]+]]:gpr32 = ADDWrr killed [[CSELWr]], [[COPY]] |
| ; CHECK-NEXT: $w0 = COPY [[ADDWrr1]] |
| ; CHECK-NEXT: RET_ReallyLR implicit $w0 |
| bb.0: |
| successors: %bb.1, %bb.2 |
| liveins: $w0, $w1 |
| |
| %0:gpr32 = COPY $w0 |
| %1:gpr32 = COPY $w1 |
| CBHAssertExt 11, %0, %1, %bb.1, 1, 1 |
| B %bb.2 |
| |
| bb.1: |
| successors: %bb.3 |
| %2:gpr32 = ADDWrr %0, %1 |
| B %bb.3 |
| |
| bb.2: |
| successors: %bb.3 |
| %3:gpr32 = MADDWrrr %0, %1, $wzr |
| B %bb.3 |
| |
| bb.3: |
| %4:gpr32 = PHI %2, %bb.1, %3, %bb.2 |
| %5:gpr32 = ADDWrr killed %4, %0 |
| $w0 = COPY %5 |
| RET_ReallyLR implicit $w0 |
| ... |
| --- |
| name: cbh_diamond_sext |
| alignment: 4 |
| tracksRegLiveness: true |
| noPhis: false |
| isSSA: true |
| noVRegs: false |
| hasFakeUses: false |
| registers: |
| - { id: 0, class: gpr32 } |
| - { id: 1, class: gpr32 } |
| - { id: 2, class: gpr32 } |
| - { id: 3, class: gpr32 } |
| - { id: 4, class: gpr32 } |
| - { id: 5, class: gpr32 } |
| liveins: |
| - { reg: '$w0', virtual-reg: '%0' } |
| - { reg: '$w1', virtual-reg: '%1' } |
| frameInfo: |
| maxAlignment: 1 |
| maxCallFrameSize: 0 |
| machineFunctionInfo: {} |
| body: | |
| ; CHECK-LABEL: name: cbh_diamond_sext |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: liveins: $w0, $w1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32common = COPY $w0 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 |
| ; CHECK-NEXT: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr [[COPY]], [[COPY1]] |
| ; CHECK-NEXT: [[MADDWrrr:%[0-9]+]]:gpr32 = MADDWrrr [[COPY]], [[COPY1]], $wzr |
| ; CHECK-NEXT: [[SBFMWri:%[0-9]+]]:gpr32common = SBFMWri [[COPY1]], 0, 15 |
| ; CHECK-NEXT: $wzr = SUBSWrx [[COPY]], [[SBFMWri]], 40, implicit-def $nzcv |
| ; CHECK-NEXT: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[ADDWrr]], [[MADDWrrr]], 11, implicit $nzcv |
| ; CHECK-NEXT: [[ADDWrr1:%[0-9]+]]:gpr32 = ADDWrr killed [[CSELWr]], [[COPY]] |
| ; CHECK-NEXT: $w0 = COPY [[ADDWrr1]] |
| ; CHECK-NEXT: RET_ReallyLR implicit $w0 |
| bb.0: |
| successors: %bb.1, %bb.2 |
| liveins: $w0, $w1 |
| |
| %0:gpr32 = COPY $w0 |
| %1:gpr32 = COPY $w1 |
| CBHAssertExt 11, %0, %1, %bb.1, 5, 5 |
| B %bb.2 |
| |
| bb.1: |
| successors: %bb.3 |
| %2:gpr32 = ADDWrr %0, %1 |
| B %bb.3 |
| |
| bb.2: |
| successors: %bb.3 |
| %3:gpr32 = MADDWrrr %0, %1, $wzr |
| B %bb.3 |
| |
| bb.3: |
| %4:gpr32 = PHI %2, %bb.1, %3, %bb.2 |
| %5:gpr32 = ADDWrr killed %4, %0 |
| $w0 = COPY %5 |
| RET_ReallyLR implicit $w0 |
| ... |
| --- |
| name: cbh_diamond_lhs_sext |
| alignment: 4 |
| tracksRegLiveness: true |
| noPhis: false |
| isSSA: true |
| noVRegs: false |
| hasFakeUses: false |
| registers: |
| - { id: 0, class: gpr32 } |
| - { id: 1, class: gpr32 } |
| - { id: 2, class: gpr32 } |
| - { id: 3, class: gpr32 } |
| - { id: 4, class: gpr32 } |
| - { id: 5, class: gpr32 } |
| liveins: |
| - { reg: '$w0', virtual-reg: '%0' } |
| - { reg: '$w1', virtual-reg: '%1' } |
| frameInfo: |
| maxAlignment: 1 |
| maxCallFrameSize: 0 |
| machineFunctionInfo: {} |
| body: | |
| ; CHECK-LABEL: name: cbh_diamond_lhs_sext |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: liveins: $w0, $w1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32common = COPY $w0 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 |
| ; CHECK-NEXT: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr [[COPY]], [[COPY1]] |
| ; CHECK-NEXT: [[MADDWrrr:%[0-9]+]]:gpr32 = MADDWrrr [[COPY]], [[COPY1]], $wzr |
| ; CHECK-NEXT: [[SBFMWri:%[0-9]+]]:gpr32common = SBFMWri [[COPY1]], 0, 15 |
| ; CHECK-NEXT: $wzr = SUBSWrr [[COPY]], [[SBFMWri]], implicit-def $nzcv |
| ; CHECK-NEXT: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[ADDWrr]], [[MADDWrrr]], 11, implicit $nzcv |
| ; CHECK-NEXT: [[ADDWrr1:%[0-9]+]]:gpr32 = ADDWrr killed [[CSELWr]], [[COPY]] |
| ; CHECK-NEXT: $w0 = COPY [[ADDWrr1]] |
| ; CHECK-NEXT: RET_ReallyLR implicit $w0 |
| bb.0: |
| successors: %bb.1, %bb.2 |
| liveins: $w0, $w1 |
| |
| %0:gpr32 = COPY $w0 |
| %1:gpr32 = COPY $w1 |
| CBHAssertExt 11, %0, %1, %bb.1, 5, -1 |
| B %bb.2 |
| |
| bb.1: |
| successors: %bb.3 |
| %2:gpr32 = ADDWrr %0, %1 |
| B %bb.3 |
| |
| bb.2: |
| successors: %bb.3 |
| %3:gpr32 = MADDWrrr %0, %1, $wzr |
| B %bb.3 |
| |
| bb.3: |
| %4:gpr32 = PHI %2, %bb.1, %3, %bb.2 |
| %5:gpr32 = ADDWrr killed %4, %0 |
| $w0 = COPY %5 |
| RET_ReallyLR implicit $w0 |
| ... |
| --- |
| name: cbh_diamond_rhs_sext |
| alignment: 4 |
| tracksRegLiveness: true |
| noPhis: false |
| isSSA: true |
| noVRegs: false |
| hasFakeUses: false |
| registers: |
| - { id: 0, class: gpr32 } |
| - { id: 1, class: gpr32 } |
| - { id: 2, class: gpr32 } |
| - { id: 3, class: gpr32 } |
| - { id: 4, class: gpr32 } |
| - { id: 5, class: gpr32 } |
| liveins: |
| - { reg: '$w0', virtual-reg: '%0' } |
| - { reg: '$w1', virtual-reg: '%1' } |
| frameInfo: |
| maxAlignment: 1 |
| maxCallFrameSize: 0 |
| machineFunctionInfo: {} |
| body: | |
| ; CHECK-LABEL: name: cbh_diamond_rhs_sext |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: liveins: $w0, $w1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32common = COPY $w0 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 |
| ; CHECK-NEXT: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr [[COPY]], [[COPY1]] |
| ; CHECK-NEXT: [[MADDWrrr:%[0-9]+]]:gpr32 = MADDWrrr [[COPY]], [[COPY1]], $wzr |
| ; CHECK-NEXT: $wzr = SUBSWrx [[COPY]], [[COPY1]], 40, implicit-def $nzcv |
| ; CHECK-NEXT: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[ADDWrr]], [[MADDWrrr]], 11, implicit $nzcv |
| ; CHECK-NEXT: [[ADDWrr1:%[0-9]+]]:gpr32 = ADDWrr killed [[CSELWr]], [[COPY]] |
| ; CHECK-NEXT: $w0 = COPY [[ADDWrr1]] |
| ; CHECK-NEXT: RET_ReallyLR implicit $w0 |
| bb.0: |
| successors: %bb.1, %bb.2 |
| liveins: $w0, $w1 |
| |
| %0:gpr32 = COPY $w0 |
| %1:gpr32 = COPY $w1 |
| CBHAssertExt 11, %0, %1, %bb.1, -1, 5 |
| B %bb.2 |
| |
| bb.1: |
| successors: %bb.3 |
| %2:gpr32 = ADDWrr %0, %1 |
| B %bb.3 |
| |
| bb.2: |
| successors: %bb.3 |
| %3:gpr32 = MADDWrrr %0, %1, $wzr |
| B %bb.3 |
| |
| bb.3: |
| %4:gpr32 = PHI %2, %bb.1, %3, %bb.2 |
| %5:gpr32 = ADDWrr killed %4, %0 |
| $w0 = COPY %5 |
| RET_ReallyLR implicit $w0 |
| ... |