1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=aarch64 -run-pass=peephole-opt -verify-machineinstrs %s -o - | FileCheck %s 3--- 4name: remove_subswr_after_csincwr 5tracksRegLiveness: true 6body: | 7 ; CHECK-LABEL: name: remove_subswr_after_csincwr 8 ; CHECK: bb.0: 9 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 10 ; CHECK: liveins: $x1 11 ; CHECK: [[COPY:%[0-9]+]]:gpr64common = COPY $x1 12 ; CHECK: [[DEF:%[0-9]+]]:gpr64 = IMPLICIT_DEF 13 ; CHECK: [[SUBSXrr:%[0-9]+]]:gpr64 = SUBSXrr killed [[DEF]], [[COPY]], implicit-def $nzcv 14 ; CHECK: [[CSINCWr:%[0-9]+]]:gpr32common = CSINCWr $wzr, $wzr, 1, implicit $nzcv 15 ; CHECK: Bcc 1, %bb.2, implicit $nzcv 16 ; CHECK: B %bb.1 17 ; CHECK: bb.1: 18 ; CHECK: successors: %bb.2(0x80000000) 19 ; CHECK: B %bb.2 20 ; CHECK: bb.2: 21 ; CHECK: RET_ReallyLR 22 bb.0: 23 liveins: $x1 24 successors: %bb.1(0x40000000), %bb.2(0x40000000) 25 %1:gpr64common = COPY $x1 26 %2:gpr64 = IMPLICIT_DEF 27 %3:gpr64 = SUBSXrr killed %2:gpr64, %1:gpr64common, implicit-def $nzcv 28 %4:gpr32common = CSINCWr $wzr, $wzr, 1, implicit $nzcv 29 %5:gpr32 = SUBSWri killed %4:gpr32common, 1, 0, implicit-def $nzcv 30 Bcc 1, %bb.2, implicit $nzcv 31 B %bb.1 32 33 bb.1: 34 successors: %bb.2(0x80000000) 35 B %bb.2 36 37 bb.2: 38 RET_ReallyLR 39 40... 41--- 42name: remove_subsxr_after_csincxr_invertcc 43tracksRegLiveness: true 44body: | 45 ; CHECK-LABEL: name: remove_subsxr_after_csincxr_invertcc 46 ; CHECK: bb.0: 47 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 48 ; CHECK: liveins: $x1 49 ; CHECK: [[COPY:%[0-9]+]]:gpr64common = COPY $x1 50 ; CHECK: [[DEF:%[0-9]+]]:gpr64 = IMPLICIT_DEF 51 ; CHECK: [[SUBSXrr:%[0-9]+]]:gpr64 = SUBSXrr killed [[DEF]], [[COPY]], implicit-def $nzcv 52 ; CHECK: [[CSINCXr:%[0-9]+]]:gpr64common = CSINCXr $xzr, $xzr, 1, implicit $nzcv 53 ; CHECK: Bcc 1, %bb.2, implicit $nzcv 54 ; CHECK: B %bb.1 55 ; CHECK: bb.1: 56 ; CHECK: successors: %bb.2(0x80000000) 57 ; CHECK: B %bb.2 58 ; CHECK: bb.2: 59 ; CHECK: RET_ReallyLR 60 bb.0: 61 liveins: $x1 62 successors: %bb.1(0x40000000), %bb.2(0x40000000) 63 %1:gpr64common = COPY $x1 64 %2:gpr64 = IMPLICIT_DEF 65 %3:gpr64 = SUBSXrr killed %2:gpr64, %1:gpr64common, implicit-def $nzcv 66 %4:gpr64common = CSINCXr $xzr, $xzr, 1, implicit $nzcv 67 %5:gpr64 = SUBSXri killed %4:gpr64common, 0, 0, implicit-def $nzcv 68 Bcc 0, %bb.2, implicit $nzcv 69 B %bb.1 70 71 bb.1: 72 successors: %bb.2(0x80000000) 73 B %bb.2 74 75 bb.2: 76 RET_ReallyLR 77 78... 79--- 80name: cflags_alive_in_succs 81tracksRegLiveness: true 82body: | 83 ; CHECK-LABEL: name: cflags_alive_in_succs 84 ; CHECK: bb.0: 85 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 86 ; CHECK: liveins: $nzcv 87 ; CHECK: [[CSINCXr:%[0-9]+]]:gpr64common = CSINCXr $xzr, $xzr, 1, implicit $nzcv 88 ; CHECK: [[ADDSXri:%[0-9]+]]:gpr64 = ADDSXri killed [[CSINCXr]], 0, 0, implicit-def $nzcv 89 ; CHECK: Bcc 0, %bb.2, implicit $nzcv 90 ; CHECK: B %bb.1 91 ; CHECK: bb.1: 92 ; CHECK: successors: %bb.2(0x80000000) 93 ; CHECK: liveins: $nzcv 94 ; CHECK: B %bb.2 95 ; CHECK: bb.2: 96 ; CHECK: RET_ReallyLR 97 bb.0: 98 liveins: $nzcv 99 successors: %bb.1(0x40000000), %bb.2(0x40000000) 100 %1:gpr64common = CSINCXr $xzr, $xzr, 1, implicit $nzcv 101 %2:gpr64 = ADDSXri killed %1:gpr64common, 0, 0, implicit-def $nzcv 102 Bcc 0, %bb.2, implicit $nzcv 103 B %bb.1 104 105 bb.1: 106 liveins: $nzcv 107 successors: %bb.2(0x80000000) 108 B %bb.2 109 110 bb.2: 111 RET_ReallyLR 112 113... 114--- 115name: nz_used_after_cmp 116tracksRegLiveness: true 117body: | 118 ; CHECK-LABEL: name: nz_used_after_cmp 119 ; CHECK: bb.0: 120 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 121 ; CHECK: liveins: $nzcv 122 ; CHECK: [[CSINCXr:%[0-9]+]]:gpr64common = CSINCXr $xzr, $xzr, 1, implicit $nzcv 123 ; CHECK: [[ADDSXri:%[0-9]+]]:gpr64 = ADDSXri killed [[CSINCXr]], 0, 0, implicit-def $nzcv 124 ; CHECK: Bcc 4, %bb.2, implicit $nzcv 125 ; CHECK: B %bb.1 126 ; CHECK: bb.1: 127 ; CHECK: successors: %bb.2(0x80000000) 128 ; CHECK: B %bb.2 129 ; CHECK: bb.2: 130 ; CHECK: RET_ReallyLR 131 bb.0: 132 liveins: $nzcv 133 successors: %bb.1(0x40000000), %bb.2(0x40000000) 134 %1:gpr64common = CSINCXr $xzr, $xzr, 1, implicit $nzcv 135 %2:gpr64 = ADDSXri killed %1:gpr64common, 0, 0, implicit-def $nzcv 136 Bcc 4, %bb.2, implicit $nzcv 137 B %bb.1 138 139 bb.1: 140 successors: %bb.2(0x80000000) 141 B %bb.2 142 143 bb.2: 144 RET_ReallyLR 145 146... 147--- 148name: remove_addswr_after_csincwr_invertcc 149tracksRegLiveness: true 150body: | 151 ; CHECK-LABEL: name: remove_addswr_after_csincwr_invertcc 152 ; CHECK: bb.0: 153 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 154 ; CHECK: liveins: $nzcv 155 ; CHECK: [[CSINCWr:%[0-9]+]]:gpr32common = CSINCWr $wzr, $wzr, 1, implicit $nzcv 156 ; CHECK: Bcc 0, %bb.2, implicit $nzcv 157 ; CHECK: B %bb.1 158 ; CHECK: bb.1: 159 ; CHECK: successors: %bb.2(0x80000000) 160 ; CHECK: B %bb.2 161 ; CHECK: bb.2: 162 ; CHECK: RET_ReallyLR 163 bb.0: 164 liveins: $nzcv 165 successors: %bb.1(0x40000000), %bb.2(0x40000000) 166 %1:gpr32common = CSINCWr $wzr, $wzr, 1, implicit $nzcv 167 %2:gpr32 = ADDSWri killed %1:gpr32common, 0, 0, implicit-def $nzcv 168 Bcc 1, %bb.2, implicit $nzcv 169 B %bb.1 170 171 bb.1: 172 successors: %bb.2(0x80000000) 173 B %bb.2 174 175 bb.2: 176 RET_ReallyLR 177 178... 179--- 180name: cv_used_after_cmp 181tracksRegLiveness: true 182body: | 183 ; CHECK-LABEL: name: cv_used_after_cmp 184 ; CHECK: bb.0: 185 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 186 ; CHECK: liveins: $nzcv 187 ; CHECK: [[CSINCWr:%[0-9]+]]:gpr32common = CSINCWr $wzr, $wzr, 1, implicit $nzcv 188 ; CHECK: [[SUBSWri:%[0-9]+]]:gpr32 = SUBSWri killed [[CSINCWr]], 0, 0, implicit-def $nzcv 189 ; CHECK: Bcc 2, %bb.2, implicit $nzcv 190 ; CHECK: B %bb.1 191 ; CHECK: bb.1: 192 ; CHECK: successors: %bb.2(0x80000000) 193 ; CHECK: B %bb.2 194 ; CHECK: bb.2: 195 ; CHECK: RET_ReallyLR 196 bb.0: 197 liveins: $nzcv 198 successors: %bb.1(0x40000000), %bb.2(0x40000000) 199 %1:gpr32common = CSINCWr $wzr, $wzr, 1, implicit $nzcv 200 %2:gpr32 = SUBSWri killed %1:gpr32common, 0, 0, implicit-def $nzcv 201 Bcc 2, %bb.2, implicit $nzcv 202 B %bb.1 203 204 bb.1: 205 successors: %bb.2(0x80000000) 206 B %bb.2 207 208 bb.2: 209 RET_ReallyLR 210 211... 212--- 213name: csinc_add0 214tracksRegLiveness: true 215body: | 216 ; CHECK-LABEL: name: csinc_add0 217 ; CHECK: bb.0: 218 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 219 ; CHECK: liveins: $nzcv 220 ; CHECK: [[CSINCWr:%[0-9]+]]:gpr32common = CSINCWr $wzr, $wzr, 4, implicit $nzcv 221 ; CHECK: [[ADDSWri:%[0-9]+]]:gpr32 = ADDSWri killed [[CSINCWr]], 0, 0, implicit-def $nzcv 222 ; CHECK: Bcc 1, %bb.2, implicit $nzcv 223 ; CHECK: B %bb.1 224 ; CHECK: bb.1: 225 ; CHECK: successors: %bb.2(0x80000000) 226 ; CHECK: B %bb.2 227 ; CHECK: bb.2: 228 ; CHECK: RET_ReallyLR 229 bb.0: 230 liveins: $nzcv 231 successors: %bb.1(0x40000000), %bb.2(0x40000000) 232 %1:gpr32common = CSINCWr $wzr, $wzr, 4, implicit $nzcv 233 %2:gpr32 = ADDSWri killed %1:gpr32common, 0, 0, implicit-def $nzcv 234 Bcc 1, %bb.2, implicit $nzcv 235 B %bb.1 236 237 bb.1: 238 successors: %bb.2(0x80000000) 239 B %bb.2 240 241 bb.2: 242 RET_ReallyLR 243 244... 245--- 246name: remove_subs1_after_csincN_invertcc 247tracksRegLiveness: true 248body: | 249 ; CHECK-LABEL: name: remove_subs1_after_csincN_invertcc 250 ; CHECK: bb.0: 251 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 252 ; CHECK: liveins: $nzcv 253 ; CHECK: [[CSINCWr:%[0-9]+]]:gpr32common = CSINCWr $wzr, $wzr, 5, implicit $nzcv 254 ; CHECK: Bcc 5, %bb.2, implicit $nzcv 255 ; CHECK: B %bb.1 256 ; CHECK: bb.1: 257 ; CHECK: successors: %bb.2(0x80000000) 258 ; CHECK: B %bb.2 259 ; CHECK: bb.2: 260 ; CHECK: RET_ReallyLR 261 bb.0: 262 liveins: $nzcv 263 successors: %bb.1(0x40000000), %bb.2(0x40000000) 264 %1:gpr32common = CSINCWr $wzr, $wzr, 5, implicit $nzcv 265 %2:gpr32 = SUBSWri killed %1:gpr32common, 1, 0, implicit-def $nzcv 266 Bcc 4, %bb.2, implicit $nzcv 267 B %bb.1 268 269 bb.1: 270 successors: %bb.2(0x80000000) 271 B %bb.2 272 273 bb.2: 274 RET_ReallyLR 275 276... 277--- 278name: csinc_wrong_cc 279tracksRegLiveness: true 280body: | 281 ; CHECK-LABEL: name: csinc_wrong_cc 282 ; CHECK: bb.0: 283 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 284 ; CHECK: liveins: $nzcv 285 ; CHECK: [[CSINCXr:%[0-9]+]]:gpr64common = CSINCXr $xzr, $xzr, 2, implicit $nzcv 286 ; CHECK: [[SUBSXri:%[0-9]+]]:gpr64 = SUBSXri killed [[CSINCXr]], 1, 0, implicit-def $nzcv 287 ; CHECK: Bcc 0, %bb.2, implicit $nzcv 288 ; CHECK: B %bb.1 289 ; CHECK: bb.1: 290 ; CHECK: successors: %bb.2(0x80000000) 291 ; CHECK: B %bb.2 292 ; CHECK: bb.2: 293 ; CHECK: RET_ReallyLR 294 bb.0: 295 liveins: $nzcv 296 successors: %bb.1(0x40000000), %bb.2(0x40000000) 297 %1:gpr64common = CSINCXr $xzr, $xzr, 2, implicit $nzcv 298 %2:gpr64 = SUBSXri killed %1:gpr64common, 1, 0, implicit-def $nzcv 299 Bcc 0, %bb.2, implicit $nzcv 300 B %bb.1 301 302 bb.1: 303 successors: %bb.2(0x80000000) 304 B %bb.2 305 306 bb.2: 307 RET_ReallyLR 308 309... 310--- 311name: subswr_wrong_cmp_value 312tracksRegLiveness: true 313body: | 314 ; CHECK-LABEL: name: subswr_wrong_cmp_value 315 ; CHECK: bb.0: 316 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 317 ; CHECK: liveins: $x1 318 ; CHECK: [[COPY:%[0-9]+]]:gpr64common = COPY $x1 319 ; CHECK: [[DEF:%[0-9]+]]:gpr64 = IMPLICIT_DEF 320 ; CHECK: [[SUBSXrr:%[0-9]+]]:gpr64 = SUBSXrr killed [[DEF]], [[COPY]], implicit-def $nzcv 321 ; CHECK: [[CSINCWr:%[0-9]+]]:gpr32common = CSINCWr $wzr, $wzr, 1, implicit $nzcv 322 ; CHECK: [[SUBSWri:%[0-9]+]]:gpr32 = SUBSWri killed [[CSINCWr]], 3, 0, implicit-def $nzcv 323 ; CHECK: Bcc 1, %bb.2, implicit $nzcv 324 ; CHECK: B %bb.1 325 ; CHECK: bb.1: 326 ; CHECK: successors: %bb.2(0x80000000) 327 ; CHECK: B %bb.2 328 ; CHECK: bb.2: 329 ; CHECK: RET_ReallyLR 330 bb.0: 331 liveins: $x1 332 successors: %bb.1(0x40000000), %bb.2(0x40000000) 333 %1:gpr64common = COPY $x1 334 %2:gpr64 = IMPLICIT_DEF 335 %3:gpr64 = SUBSXrr killed %2:gpr64, %1:gpr64common, implicit-def $nzcv 336 %4:gpr32common = CSINCWr $wzr, $wzr, 1, implicit $nzcv 337 %5:gpr32 = SUBSWri killed %4:gpr32common, 3, 0, implicit-def $nzcv 338 Bcc 1, %bb.2, implicit $nzcv 339 B %bb.1 340 341 bb.1: 342 successors: %bb.2(0x80000000) 343 B %bb.2 344 345 bb.2: 346 RET_ReallyLR 347 348... 349