1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple aarch64 -run-pass=aarch64-post-select-optimize -verify-machineinstrs %s -o - | FileCheck %s 3--- 4name: test_fcmp_dead_cc 5alignment: 4 6legalized: true 7regBankSelected: true 8selected: true 9tracksRegLiveness: true 10liveins: 11 - { reg: '$x0' } 12 - { reg: '$w1' } 13body: | 14 bb.1: 15 liveins: $w1, $x0, $s0, $s1 16 17 ; CHECK-LABEL: name: test_fcmp_dead_cc 18 ; CHECK: liveins: $w1, $x0, $s0, $s1 19 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0 20 ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 21 ; CHECK: [[COPY2:%[0-9]+]]:fpr32 = COPY $s0 22 ; CHECK: [[COPY3:%[0-9]+]]:fpr32 = COPY $s1 23 ; CHECK: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr 24 ; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def dead $nzcv 25 ; CHECK: [[SUBWrr:%[0-9]+]]:gpr32 = SUBWrr [[COPY1]], [[COPY4]] 26 ; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def $nzcv 27 ; CHECK: [[UBFMWri:%[0-9]+]]:gpr32common = UBFMWri [[SUBWrr]], 1, 31 28 ; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1 29 ; CHECK: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[UBFMWri]], [[MOVi32imm]], 8, implicit $nzcv 30 ; CHECK: $w0 = COPY [[CSELWr]] 31 ; CHECK: RET_ReallyLR implicit $w0 32 %1:gpr64 = COPY $x0 33 %2:gpr32 = COPY $w1 34 %3:fpr32 = COPY $s0 35 %4:fpr32 = COPY $s1 36 %26:gpr32 = COPY $wzr 37 FCMPSrr %3, %4, implicit-def $nzcv 38 %12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv 39 FCMPSrr %3, %4, implicit-def $nzcv 40 %14:gpr32common = UBFMWri %12, 1, 31 41 %60:gpr32 = MOVi32imm 1 42 %16:gpr32 = CSELWr %14, %60, 8, implicit $nzcv 43 $w0 = COPY %16 44 RET_ReallyLR implicit $w0 45 46... 47--- 48name: test_fcmp_64_dead_cc 49alignment: 4 50legalized: true 51regBankSelected: true 52selected: true 53tracksRegLiveness: true 54liveins: 55 - { reg: '$x0' } 56 - { reg: '$w1' } 57body: | 58 bb.1: 59 liveins: $w1, $x0, $d0, $d1 60 61 ; CHECK-LABEL: name: test_fcmp_64_dead_cc 62 ; CHECK: liveins: $w1, $x0, $d0, $d1 63 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0 64 ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 65 ; CHECK: [[COPY2:%[0-9]+]]:fpr64 = COPY $d0 66 ; CHECK: [[COPY3:%[0-9]+]]:fpr64 = COPY $d1 67 ; CHECK: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr 68 ; CHECK: FCMPDrr [[COPY2]], [[COPY3]], implicit-def dead $nzcv 69 ; CHECK: [[SUBWrr:%[0-9]+]]:gpr32 = SUBWrr [[COPY1]], [[COPY4]] 70 ; CHECK: FCMPDrr [[COPY2]], [[COPY3]], implicit-def $nzcv 71 ; CHECK: [[UBFMWri:%[0-9]+]]:gpr32common = UBFMWri [[SUBWrr]], 1, 31 72 ; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1 73 ; CHECK: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[UBFMWri]], [[MOVi32imm]], 8, implicit $nzcv 74 ; CHECK: $w0 = COPY [[CSELWr]] 75 ; CHECK: RET_ReallyLR implicit $w0 76 %1:gpr64 = COPY $x0 77 %2:gpr32 = COPY $w1 78 %3:fpr64 = COPY $d0 79 %4:fpr64 = COPY $d1 80 %26:gpr32 = COPY $wzr 81 FCMPDrr %3, %4, implicit-def $nzcv 82 %12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv 83 FCMPDrr %3, %4, implicit-def $nzcv 84 %14:gpr32common = UBFMWri %12, 1, 31 85 %60:gpr32 = MOVi32imm 1 86 %16:gpr32 = CSELWr %14, %60, 8, implicit $nzcv 87 $w0 = COPY %16 88 RET_ReallyLR implicit $w0 89 90... 91--- 92name: test_fcmp_dead_cc_3_fcmps 93alignment: 4 94legalized: true 95regBankSelected: true 96selected: true 97tracksRegLiveness: true 98liveins: 99 - { reg: '$x0' } 100 - { reg: '$w1' } 101body: | 102 bb.1: 103 liveins: $w1, $x0, $s0, $s1 104 105 ; CHECK-LABEL: name: test_fcmp_dead_cc_3_fcmps 106 ; CHECK: liveins: $w1, $x0, $s0, $s1 107 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0 108 ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 109 ; CHECK: [[COPY2:%[0-9]+]]:fpr32 = COPY $s0 110 ; CHECK: [[COPY3:%[0-9]+]]:fpr32 = COPY $s1 111 ; CHECK: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr 112 ; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def dead $nzcv 113 ; CHECK: [[SUBWrr:%[0-9]+]]:gpr32 = SUBWrr [[COPY1]], [[COPY4]] 114 ; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def dead $nzcv 115 ; CHECK: [[SUBWrr1:%[0-9]+]]:gpr32 = SUBWrr [[COPY1]], [[COPY4]] 116 ; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def $nzcv 117 ; CHECK: [[UBFMWri:%[0-9]+]]:gpr32common = UBFMWri [[SUBWrr1]], 1, 31 118 ; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1 119 ; CHECK: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[UBFMWri]], [[MOVi32imm]], 8, implicit $nzcv 120 ; CHECK: $w0 = COPY [[CSELWr]] 121 ; CHECK: RET_ReallyLR implicit $w0 122 %1:gpr64 = COPY $x0 123 %2:gpr32 = COPY $w1 124 %3:fpr32 = COPY $s0 125 %4:fpr32 = COPY $s1 126 %26:gpr32 = COPY $wzr 127 FCMPSrr %3, %4, implicit-def $nzcv 128 %12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv 129 FCMPSrr %3, %4, implicit-def $nzcv 130 %12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv 131 FCMPSrr %3, %4, implicit-def $nzcv 132 %14:gpr32common = UBFMWri %12, 1, 31 133 %60:gpr32 = MOVi32imm 1 134 %16:gpr32 = CSELWr %14, %60, 8, implicit $nzcv 135 $w0 = COPY %16 136 RET_ReallyLR implicit $w0 137 138... 139--- 140name: test_impdef_made_dead 141alignment: 4 142legalized: true 143regBankSelected: true 144selected: true 145tracksRegLiveness: true 146liveins: 147 - { reg: '$x0' } 148 - { reg: '$w1' } 149body: | 150 bb.1: 151 liveins: $w1, $x0, $s0, $s1 152 ; Check that any dead imp-defs of NZCV are marked as such. 153 ; CHECK-LABEL: name: test_impdef_made_dead 154 ; CHECK: liveins: $w1, $x0, $s0, $s1 155 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0 156 ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 157 ; CHECK: [[COPY2:%[0-9]+]]:fpr32 = COPY $s0 158 ; CHECK: [[COPY3:%[0-9]+]]:fpr32 = COPY $s1 159 ; CHECK: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr 160 ; CHECK: [[SUBSWrr:%[0-9]+]]:gpr32 = SUBSWrr [[COPY1]], [[COPY4]], implicit-def dead $nzcv 161 ; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def $nzcv 162 ; CHECK: [[UBFMWri:%[0-9]+]]:gpr32common = UBFMWri [[SUBSWrr]], 1, 31 163 ; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1 164 ; CHECK: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[UBFMWri]], [[MOVi32imm]], 8, implicit $nzcv 165 ; CHECK: %ret:gpr32 = SUBSWrr [[CSELWr]], [[SUBSWrr]], implicit-def dead $nzcv 166 ; CHECK: $w0 = COPY [[CSELWr]] 167 ; CHECK: RET_ReallyLR implicit $w0 168 %1:gpr64 = COPY $x0 169 %2:gpr32 = COPY $w1 170 %3:fpr32 = COPY $s0 171 %4:fpr32 = COPY $s1 172 %26:gpr32 = COPY $wzr 173 %12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv 174 FCMPSrr %3, %4, implicit-def $nzcv 175 %14:gpr32common = UBFMWri %12, 1, 31 176 %60:gpr32 = MOVi32imm 1 177 %16:gpr32 = CSELWr %14, %60, 8, implicit $nzcv 178 %ret:gpr32 = SUBSWrr %16, %12, implicit-def $nzcv 179 $w0 = COPY %16 180 RET_ReallyLR implicit $w0 181... 182