365 lines
12 KiB
YAML
365 lines
12 KiB
YAML
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
|
# RUN: llc -mtriple aarch64 -run-pass=aarch64-post-select-optimize -verify-machineinstrs %s -o - | FileCheck %s
|
|
---
|
|
name: test_fcmp_dead_cc
|
|
alignment: 4
|
|
legalized: true
|
|
regBankSelected: true
|
|
selected: true
|
|
tracksRegLiveness: true
|
|
liveins:
|
|
- { reg: '$x0' }
|
|
- { reg: '$w1' }
|
|
body: |
|
|
bb.1:
|
|
liveins: $w1, $x0, $s0, $s1
|
|
|
|
; CHECK-LABEL: name: test_fcmp_dead_cc
|
|
; CHECK: liveins: $w1, $x0, $s0, $s1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
|
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
|
|
; CHECK-NEXT: [[COPY2:%[0-9]+]]:fpr32 = COPY $s0
|
|
; CHECK-NEXT: [[COPY3:%[0-9]+]]:fpr32 = COPY $s1
|
|
; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
|
|
; CHECK-NEXT: FCMPSrr [[COPY2]], [[COPY3]], implicit-def dead $nzcv, implicit $fpcr
|
|
; CHECK-NEXT: [[SUBWrr:%[0-9]+]]:gpr32 = SUBWrr [[COPY1]], [[COPY4]]
|
|
; CHECK-NEXT: FCMPSrr [[COPY2]], [[COPY3]], implicit-def $nzcv, implicit $fpcr
|
|
; CHECK-NEXT: [[UBFMWri:%[0-9]+]]:gpr32common = UBFMWri [[SUBWrr]], 1, 31
|
|
; CHECK-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1
|
|
; CHECK-NEXT: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[UBFMWri]], [[MOVi32imm]], 8, implicit $nzcv
|
|
; CHECK-NEXT: $w0 = COPY [[CSELWr]]
|
|
; CHECK-NEXT: RET_ReallyLR implicit $w0
|
|
%1:gpr64 = COPY $x0
|
|
%2:gpr32 = COPY $w1
|
|
%3:fpr32 = COPY $s0
|
|
%4:fpr32 = COPY $s1
|
|
%26:gpr32 = COPY $wzr
|
|
FCMPSrr %3, %4, implicit-def $nzcv, implicit $fpcr
|
|
%12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv
|
|
FCMPSrr %3, %4, implicit-def $nzcv, implicit $fpcr
|
|
%14:gpr32common = UBFMWri %12, 1, 31
|
|
%60:gpr32 = MOVi32imm 1
|
|
%16:gpr32 = CSELWr %14, %60, 8, implicit $nzcv
|
|
$w0 = COPY %16
|
|
RET_ReallyLR implicit $w0
|
|
|
|
...
|
|
---
|
|
name: test_fcmp_64_dead_cc
|
|
alignment: 4
|
|
legalized: true
|
|
regBankSelected: true
|
|
selected: true
|
|
tracksRegLiveness: true
|
|
liveins:
|
|
- { reg: '$x0' }
|
|
- { reg: '$w1' }
|
|
body: |
|
|
bb.1:
|
|
liveins: $w1, $x0, $d0, $d1
|
|
|
|
; CHECK-LABEL: name: test_fcmp_64_dead_cc
|
|
; CHECK: liveins: $w1, $x0, $d0, $d1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
|
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
|
|
; CHECK-NEXT: [[COPY2:%[0-9]+]]:fpr64 = COPY $d0
|
|
; CHECK-NEXT: [[COPY3:%[0-9]+]]:fpr64 = COPY $d1
|
|
; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
|
|
; CHECK-NEXT: FCMPDrr [[COPY2]], [[COPY3]], implicit-def dead $nzcv, implicit $fpcr
|
|
; CHECK-NEXT: [[SUBWrr:%[0-9]+]]:gpr32 = SUBWrr [[COPY1]], [[COPY4]]
|
|
; CHECK-NEXT: FCMPDrr [[COPY2]], [[COPY3]], implicit-def $nzcv, implicit $fpcr
|
|
; CHECK-NEXT: [[UBFMWri:%[0-9]+]]:gpr32common = UBFMWri [[SUBWrr]], 1, 31
|
|
; CHECK-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1
|
|
; CHECK-NEXT: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[UBFMWri]], [[MOVi32imm]], 8, implicit $nzcv
|
|
; CHECK-NEXT: $w0 = COPY [[CSELWr]]
|
|
; CHECK-NEXT: RET_ReallyLR implicit $w0
|
|
%1:gpr64 = COPY $x0
|
|
%2:gpr32 = COPY $w1
|
|
%3:fpr64 = COPY $d0
|
|
%4:fpr64 = COPY $d1
|
|
%26:gpr32 = COPY $wzr
|
|
FCMPDrr %3, %4, implicit-def $nzcv, implicit $fpcr
|
|
%12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv
|
|
FCMPDrr %3, %4, implicit-def $nzcv, implicit $fpcr
|
|
%14:gpr32common = UBFMWri %12, 1, 31
|
|
%60:gpr32 = MOVi32imm 1
|
|
%16:gpr32 = CSELWr %14, %60, 8, implicit $nzcv
|
|
$w0 = COPY %16
|
|
RET_ReallyLR implicit $w0
|
|
|
|
...
|
|
---
|
|
name: test_fcmp_dead_cc_3_fcmps
|
|
alignment: 4
|
|
legalized: true
|
|
regBankSelected: true
|
|
selected: true
|
|
tracksRegLiveness: true
|
|
liveins:
|
|
- { reg: '$x0' }
|
|
- { reg: '$w1' }
|
|
body: |
|
|
bb.1:
|
|
liveins: $w1, $x0, $s0, $s1
|
|
|
|
; CHECK-LABEL: name: test_fcmp_dead_cc_3_fcmps
|
|
; CHECK: liveins: $w1, $x0, $s0, $s1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
|
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
|
|
; CHECK-NEXT: [[COPY2:%[0-9]+]]:fpr32 = COPY $s0
|
|
; CHECK-NEXT: [[COPY3:%[0-9]+]]:fpr32 = COPY $s1
|
|
; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
|
|
; CHECK-NEXT: FCMPSrr [[COPY2]], [[COPY3]], implicit-def dead $nzcv, implicit $fpcr
|
|
; CHECK-NEXT: [[SUBWrr:%[0-9]+]]:gpr32 = SUBWrr [[COPY1]], [[COPY4]]
|
|
; CHECK-NEXT: FCMPSrr [[COPY2]], [[COPY3]], implicit-def dead $nzcv, implicit $fpcr
|
|
; CHECK-NEXT: [[SUBWrr1:%[0-9]+]]:gpr32 = SUBWrr [[COPY1]], [[COPY4]]
|
|
; CHECK-NEXT: FCMPSrr [[COPY2]], [[COPY3]], implicit-def $nzcv, implicit $fpcr
|
|
; CHECK-NEXT: [[UBFMWri:%[0-9]+]]:gpr32common = UBFMWri [[SUBWrr1]], 1, 31
|
|
; CHECK-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1
|
|
; CHECK-NEXT: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[UBFMWri]], [[MOVi32imm]], 8, implicit $nzcv
|
|
; CHECK-NEXT: $w0 = COPY [[CSELWr]]
|
|
; CHECK-NEXT: RET_ReallyLR implicit $w0
|
|
%1:gpr64 = COPY $x0
|
|
%2:gpr32 = COPY $w1
|
|
%3:fpr32 = COPY $s0
|
|
%4:fpr32 = COPY $s1
|
|
%26:gpr32 = COPY $wzr
|
|
FCMPSrr %3, %4, implicit-def $nzcv, implicit $fpcr
|
|
%12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv
|
|
FCMPSrr %3, %4, implicit-def $nzcv, implicit $fpcr
|
|
%12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv
|
|
FCMPSrr %3, %4, implicit-def $nzcv, implicit $fpcr
|
|
%14:gpr32common = UBFMWri %12, 1, 31
|
|
%60:gpr32 = MOVi32imm 1
|
|
%16:gpr32 = CSELWr %14, %60, 8, implicit $nzcv
|
|
$w0 = COPY %16
|
|
RET_ReallyLR implicit $w0
|
|
|
|
...
|
|
---
|
|
name: test_impdef_subsx
|
|
alignment: 4
|
|
legalized: true
|
|
regBankSelected: true
|
|
selected: true
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.1:
|
|
liveins: $x0, $x1
|
|
; CHECK-LABEL: name: test_impdef_subsx
|
|
; CHECK: liveins: $x0, $x1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
|
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
|
|
; CHECK-NEXT: [[SUBXrr:%[0-9]+]]:gpr64 = SUBXrr [[COPY]], [[COPY1]]
|
|
; CHECK-NEXT: $x0 = COPY [[SUBXrr]]
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
|
%1:gpr64 = COPY $x0
|
|
%2:gpr64 = COPY $x1
|
|
%4:gpr64 = SUBSXrr %1, %2, implicit-def $nzcv
|
|
$x0 = COPY %4
|
|
RET_ReallyLR implicit $x0
|
|
...
|
|
---
|
|
name: test_impdef_subsw
|
|
alignment: 4
|
|
legalized: true
|
|
regBankSelected: true
|
|
selected: true
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.1:
|
|
liveins: $w0, $w1
|
|
; CHECK-LABEL: name: test_impdef_subsw
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $x0
|
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $x1
|
|
; CHECK-NEXT: [[SUBWrr:%[0-9]+]]:gpr32 = SUBWrr [[COPY]], [[COPY1]]
|
|
; CHECK-NEXT: $w0 = COPY [[SUBWrr]]
|
|
; CHECK-NEXT: RET_ReallyLR implicit $w0
|
|
%1:gpr32 = COPY $x0
|
|
%2:gpr32 = COPY $x1
|
|
%4:gpr32 = SUBSWrr %1, %2, implicit-def $nzcv
|
|
$w0 = COPY %4
|
|
RET_ReallyLR implicit $w0
|
|
...
|
|
---
|
|
name: test_impdef_addsx
|
|
alignment: 4
|
|
legalized: true
|
|
regBankSelected: true
|
|
selected: true
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.1:
|
|
liveins: $x0, $x1
|
|
; CHECK-LABEL: name: test_impdef_addsx
|
|
; CHECK: 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: $x0 = COPY [[ADDXrr]]
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
|
%1:gpr64 = COPY $x0
|
|
%2:gpr64 = COPY $x1
|
|
%4:gpr64 = ADDSXrr %1, %2, implicit-def $nzcv
|
|
$x0 = COPY %4
|
|
RET_ReallyLR implicit $x0
|
|
...
|
|
---
|
|
name: test_impdef_addsw
|
|
alignment: 4
|
|
legalized: true
|
|
regBankSelected: true
|
|
selected: true
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.1:
|
|
liveins: $w0, $w1
|
|
; CHECK-LABEL: name: test_impdef_addsw
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $x0
|
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $x1
|
|
; CHECK-NEXT: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr [[COPY]], [[COPY1]]
|
|
; CHECK-NEXT: $w0 = COPY [[ADDWrr]]
|
|
; CHECK-NEXT: RET_ReallyLR implicit $w0
|
|
%1:gpr32 = COPY $x0
|
|
%2:gpr32 = COPY $x1
|
|
%4:gpr32 = ADDSWrr %1, %2, implicit-def $nzcv
|
|
$w0 = COPY %4
|
|
RET_ReallyLR implicit $w0
|
|
...
|
|
---
|
|
name: test_impdef_adcsx
|
|
alignment: 4
|
|
legalized: true
|
|
regBankSelected: true
|
|
selected: true
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.1:
|
|
liveins: $x0, $x1, $x2, $x3
|
|
; CHECK-LABEL: name: test_impdef_adcsx
|
|
; CHECK: liveins: $x0, $x1, $x2, $x3
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
|
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
|
|
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr64 = COPY $x2
|
|
; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr64 = COPY $x3
|
|
; CHECK-NEXT: [[ADDSXrr:%[0-9]+]]:gpr64 = ADDSXrr [[COPY]], [[COPY2]], implicit-def $nzcv
|
|
; CHECK-NEXT: [[ADCXr:%[0-9]+]]:gpr64 = ADCXr [[COPY1]], [[COPY3]], implicit $nzcv
|
|
; CHECK-NEXT: $x0 = COPY [[ADDSXrr]]
|
|
; CHECK-NEXT: $x1 = COPY [[ADCXr]]
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0, implicit $x1
|
|
%1:gpr64 = COPY $x0
|
|
%2:gpr64 = COPY $x1
|
|
%3:gpr64 = COPY $x2
|
|
%4:gpr64 = COPY $x3
|
|
%5:gpr64 = ADDSXrr %1, %3, implicit-def $nzcv
|
|
%6:gpr64 = ADCSXr %2, %4, implicit-def $nzcv, implicit $nzcv
|
|
$x0 = COPY %5
|
|
$x1 = COPY %6
|
|
RET_ReallyLR implicit $x0, implicit $x1
|
|
...
|
|
---
|
|
name: test_impdef_adcsw
|
|
alignment: 4
|
|
legalized: true
|
|
regBankSelected: true
|
|
selected: true
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.1:
|
|
liveins: $w0, $w1, $w2, $w3
|
|
; CHECK-LABEL: name: test_impdef_adcsw
|
|
; CHECK: liveins: $w0, $w1, $w2, $w3
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
|
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
|
|
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr32 = COPY $w2
|
|
; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr32 = COPY $w3
|
|
; CHECK-NEXT: [[ADDSWrr:%[0-9]+]]:gpr32 = ADDSWrr [[COPY]], [[COPY2]], implicit-def $nzcv
|
|
; CHECK-NEXT: [[ADCWr:%[0-9]+]]:gpr32 = ADCWr [[COPY1]], [[COPY3]], implicit $nzcv
|
|
; CHECK-NEXT: $w0 = COPY [[ADDSWrr]]
|
|
; CHECK-NEXT: $w1 = COPY [[ADCWr]]
|
|
; CHECK-NEXT: RET_ReallyLR implicit $w0, implicit $w1
|
|
%1:gpr32 = COPY $w0
|
|
%2:gpr32 = COPY $w1
|
|
%3:gpr32 = COPY $w2
|
|
%4:gpr32 = COPY $w3
|
|
%5:gpr32 = ADDSWrr %1, %3, implicit-def $nzcv
|
|
%6:gpr32 = ADCSWr %2, %4, implicit-def $nzcv, implicit $nzcv
|
|
$w0 = COPY %5
|
|
$w1 = COPY %6
|
|
RET_ReallyLR implicit $w0, implicit $w1
|
|
...
|
|
---
|
|
name: test_impdef_sbcsx
|
|
alignment: 4
|
|
legalized: true
|
|
regBankSelected: true
|
|
selected: true
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.1:
|
|
liveins: $x0, $x1, $x2, $x3
|
|
; CHECK-LABEL: name: test_impdef_sbcsx
|
|
; CHECK: liveins: $x0, $x1, $x2, $x3
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
|
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
|
|
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr64 = COPY $x2
|
|
; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr64 = COPY $x3
|
|
; CHECK-NEXT: [[SUBSXrr:%[0-9]+]]:gpr64 = SUBSXrr [[COPY]], [[COPY2]], implicit-def $nzcv
|
|
; CHECK-NEXT: [[SBCXr:%[0-9]+]]:gpr64 = SBCXr [[COPY1]], [[COPY3]], implicit $nzcv
|
|
; CHECK-NEXT: $x0 = COPY [[SUBSXrr]]
|
|
; CHECK-NEXT: $x1 = COPY [[SBCXr]]
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0, implicit $x1
|
|
%1:gpr64 = COPY $x0
|
|
%2:gpr64 = COPY $x1
|
|
%3:gpr64 = COPY $x2
|
|
%4:gpr64 = COPY $x3
|
|
%5:gpr64 = SUBSXrr %1, %3, implicit-def $nzcv
|
|
%6:gpr64 = SBCSXr %2, %4, implicit-def $nzcv, implicit $nzcv
|
|
$x0 = COPY %5
|
|
$x1 = COPY %6
|
|
RET_ReallyLR implicit $x0, implicit $x1
|
|
...
|
|
---
|
|
name: test_impdef_sbcsw
|
|
alignment: 4
|
|
legalized: true
|
|
regBankSelected: true
|
|
selected: true
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.1:
|
|
liveins: $w0, $w1, $w2, $w3
|
|
; CHECK-LABEL: name: test_impdef_sbcsw
|
|
; CHECK: liveins: $w0, $w1, $w2, $w3
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
|
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
|
|
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr32 = COPY $w2
|
|
; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr32 = COPY $w3
|
|
; CHECK-NEXT: [[SUBSWrr:%[0-9]+]]:gpr32 = SUBSWrr [[COPY]], [[COPY2]], implicit-def $nzcv
|
|
; CHECK-NEXT: [[SBCWr:%[0-9]+]]:gpr32 = SBCWr [[COPY1]], [[COPY3]], implicit $nzcv
|
|
; CHECK-NEXT: $w0 = COPY [[SUBSWrr]]
|
|
; CHECK-NEXT: $w1 = COPY [[SBCWr]]
|
|
; CHECK-NEXT: RET_ReallyLR implicit $w0, implicit $w1
|
|
%1:gpr32 = COPY $w0
|
|
%2:gpr32 = COPY $w1
|
|
%3:gpr32 = COPY $w2
|
|
%4:gpr32 = COPY $w3
|
|
%5:gpr32 = SUBSWrr %1, %3, implicit-def $nzcv
|
|
%6:gpr32 = SBCSWr %2, %4, implicit-def $nzcv, implicit $nzcv
|
|
$w0 = COPY %5
|
|
$w1 = COPY %6
|
|
RET_ReallyLR implicit $w0, implicit $w1
|
|
...
|