blob: d13a4e89656f40069f923aac95c01d1dbc73b0fc [file] [log] [blame]
# 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: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
; CHECK: [[COPY2:%[0-9]+]]:fpr32 = COPY $s0
; CHECK: [[COPY3:%[0-9]+]]:fpr32 = COPY $s1
; CHECK: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def dead $nzcv
; CHECK: [[SUBWrr:%[0-9]+]]:gpr32 = SUBWrr [[COPY1]], [[COPY4]]
; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def $nzcv
; CHECK: [[UBFMWri:%[0-9]+]]:gpr32common = UBFMWri [[SUBWrr]], 1, 31
; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1
; CHECK: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[UBFMWri]], [[MOVi32imm]], 8, implicit $nzcv
; CHECK: $w0 = COPY [[CSELWr]]
; CHECK: 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
%12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv
FCMPSrr %3, %4, implicit-def $nzcv
%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: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
; CHECK: [[COPY2:%[0-9]+]]:fpr64 = COPY $d0
; CHECK: [[COPY3:%[0-9]+]]:fpr64 = COPY $d1
; CHECK: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
; CHECK: FCMPDrr [[COPY2]], [[COPY3]], implicit-def dead $nzcv
; CHECK: [[SUBWrr:%[0-9]+]]:gpr32 = SUBWrr [[COPY1]], [[COPY4]]
; CHECK: FCMPDrr [[COPY2]], [[COPY3]], implicit-def $nzcv
; CHECK: [[UBFMWri:%[0-9]+]]:gpr32common = UBFMWri [[SUBWrr]], 1, 31
; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1
; CHECK: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[UBFMWri]], [[MOVi32imm]], 8, implicit $nzcv
; CHECK: $w0 = COPY [[CSELWr]]
; CHECK: 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
%12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv
FCMPDrr %3, %4, implicit-def $nzcv
%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: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
; CHECK: [[COPY2:%[0-9]+]]:fpr32 = COPY $s0
; CHECK: [[COPY3:%[0-9]+]]:fpr32 = COPY $s1
; CHECK: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def dead $nzcv
; CHECK: [[SUBWrr:%[0-9]+]]:gpr32 = SUBWrr [[COPY1]], [[COPY4]]
; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def dead $nzcv
; CHECK: [[SUBWrr1:%[0-9]+]]:gpr32 = SUBWrr [[COPY1]], [[COPY4]]
; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def $nzcv
; CHECK: [[UBFMWri:%[0-9]+]]:gpr32common = UBFMWri [[SUBWrr1]], 1, 31
; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1
; CHECK: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[UBFMWri]], [[MOVi32imm]], 8, implicit $nzcv
; CHECK: $w0 = COPY [[CSELWr]]
; CHECK: 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
%12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv
FCMPSrr %3, %4, implicit-def $nzcv
%12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv
FCMPSrr %3, %4, implicit-def $nzcv
%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_made_dead
alignment: 4
legalized: true
regBankSelected: true
selected: true
tracksRegLiveness: true
liveins:
- { reg: '$x0' }
- { reg: '$w1' }
body: |
bb.1:
liveins: $w1, $x0, $s0, $s1
; Check that any dead imp-defs of NZCV are marked as such.
; CHECK-LABEL: name: test_impdef_made_dead
; CHECK: liveins: $w1, $x0, $s0, $s1
; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
; CHECK: [[COPY2:%[0-9]+]]:fpr32 = COPY $s0
; CHECK: [[COPY3:%[0-9]+]]:fpr32 = COPY $s1
; CHECK: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
; CHECK: [[SUBSWrr:%[0-9]+]]:gpr32 = SUBSWrr [[COPY1]], [[COPY4]], implicit-def dead $nzcv
; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def $nzcv
; CHECK: [[UBFMWri:%[0-9]+]]:gpr32common = UBFMWri [[SUBSWrr]], 1, 31
; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1
; CHECK: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[UBFMWri]], [[MOVi32imm]], 8, implicit $nzcv
; CHECK: %ret:gpr32 = SUBSWrr [[CSELWr]], [[SUBSWrr]], implicit-def dead $nzcv
; CHECK: $w0 = COPY [[CSELWr]]
; CHECK: RET_ReallyLR implicit $w0
%1:gpr64 = COPY $x0
%2:gpr32 = COPY $w1
%3:fpr32 = COPY $s0
%4:fpr32 = COPY $s1
%26:gpr32 = COPY $wzr
%12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv
FCMPSrr %3, %4, implicit-def $nzcv
%14:gpr32common = UBFMWri %12, 1, 31
%60:gpr32 = MOVi32imm 1
%16:gpr32 = CSELWr %14, %60, 8, implicit $nzcv
%ret:gpr32 = SUBSWrr %16, %12, implicit-def $nzcv
$w0 = COPY %16
RET_ReallyLR implicit $w0
...