1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2 2# RUN: llc -mtriple aarch64 -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s 3--- 4name: add 5tracksRegLiveness: true 6body: | 7 bb.1: 8 liveins: $s0 9 10 ; CHECK-LABEL: name: add 11 ; CHECK: liveins: $s0 12 ; CHECK-NEXT: {{ $}} 13 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 14 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 15 ; CHECK-NEXT: %add:_(s32) = G_ADD [[COPY]], %cst 16 ; CHECK-NEXT: $s0 = COPY %add(s32) 17 ; CHECK-NEXT: RET_ReallyLR 18 %0:_(s32) = COPY $s0 19 %cst:_(s32) = G_CONSTANT i32 1 20 %add:_(s32) = G_ADD %cst, %0 21 $s0 = COPY %add 22 RET_ReallyLR 23 24... 25--- 26name: mul 27tracksRegLiveness: true 28body: | 29 bb.1: 30 liveins: $s0 31 32 ; CHECK-LABEL: name: mul 33 ; CHECK: liveins: $s0 34 ; CHECK-NEXT: {{ $}} 35 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 36 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 37 ; CHECK-NEXT: %mul:_(s32) = G_MUL [[COPY]], %cst 38 ; CHECK-NEXT: $s0 = COPY %mul(s32) 39 ; CHECK-NEXT: RET_ReallyLR 40 %0:_(s32) = COPY $s0 41 %cst:_(s32) = G_CONSTANT i32 3 42 %mul:_(s32) = G_MUL %cst, %0 43 $s0 = COPY %mul 44 RET_ReallyLR 45... 46--- 47name: and 48tracksRegLiveness: true 49body: | 50 bb.1: 51 liveins: $s0 52 53 ; CHECK-LABEL: name: and 54 ; CHECK: liveins: $s0 55 ; CHECK-NEXT: {{ $}} 56 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 57 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 5 58 ; CHECK-NEXT: %and:_(s32) = G_AND [[COPY]], %cst 59 ; CHECK-NEXT: $s0 = COPY %and(s32) 60 ; CHECK-NEXT: RET_ReallyLR 61 %0:_(s32) = COPY $s0 62 %cst:_(s32) = G_CONSTANT i32 5 63 %and:_(s32) = G_AND %cst, %0 64 $s0 = COPY %and 65 RET_ReallyLR 66... 67--- 68name: or 69tracksRegLiveness: true 70body: | 71 bb.1: 72 liveins: $s0 73 74 ; CHECK-LABEL: name: or 75 ; CHECK: liveins: $s0 76 ; CHECK-NEXT: {{ $}} 77 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 78 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 5 79 ; CHECK-NEXT: %or:_(s32) = G_OR [[COPY]], %cst 80 ; CHECK-NEXT: $s0 = COPY %or(s32) 81 ; CHECK-NEXT: RET_ReallyLR 82 %0:_(s32) = COPY $s0 83 %cst:_(s32) = G_CONSTANT i32 5 84 %or:_(s32) = G_OR %cst, %0 85 $s0 = COPY %or 86 RET_ReallyLR 87... 88--- 89name: xor 90tracksRegLiveness: true 91body: | 92 bb.1: 93 liveins: $s0 94 95 ; CHECK-LABEL: name: xor 96 ; CHECK: liveins: $s0 97 ; CHECK-NEXT: {{ $}} 98 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 99 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 5 100 ; CHECK-NEXT: %xor:_(s32) = G_XOR [[COPY]], %cst 101 ; CHECK-NEXT: $s0 = COPY %xor(s32) 102 ; CHECK-NEXT: RET_ReallyLR 103 %0:_(s32) = COPY $s0 104 %cst:_(s32) = G_CONSTANT i32 5 105 %xor:_(s32) = G_XOR %cst, %0 106 $s0 = COPY %xor 107 RET_ReallyLR 108... 109--- 110name: smin 111tracksRegLiveness: true 112body: | 113 bb.1: 114 liveins: $s0 115 116 ; CHECK-LABEL: name: smin 117 ; CHECK: liveins: $s0 118 ; CHECK-NEXT: {{ $}} 119 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 120 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 10 121 ; CHECK-NEXT: %min:_(s32) = G_SMIN [[COPY]], %cst 122 ; CHECK-NEXT: $s0 = COPY %min(s32) 123 ; CHECK-NEXT: RET_ReallyLR 124 %0:_(s32) = COPY $s0 125 %cst:_(s32) = G_CONSTANT i32 10 126 %min:_(s32) = G_SMIN %cst, %0 127 $s0 = COPY %min 128 RET_ReallyLR 129... 130--- 131name: smax 132tracksRegLiveness: true 133body: | 134 bb.1: 135 liveins: $s0 136 137 ; CHECK-LABEL: name: smax 138 ; CHECK: liveins: $s0 139 ; CHECK-NEXT: {{ $}} 140 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 141 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 10 142 ; CHECK-NEXT: %max:_(s32) = G_SMAX [[COPY]], %cst 143 ; CHECK-NEXT: $s0 = COPY %max(s32) 144 ; CHECK-NEXT: RET_ReallyLR 145 %0:_(s32) = COPY $s0 146 %cst:_(s32) = G_CONSTANT i32 10 147 %max:_(s32) = G_SMAX %cst, %0 148 $s0 = COPY %max 149 RET_ReallyLR 150... 151--- 152name: umin 153tracksRegLiveness: true 154body: | 155 bb.1: 156 liveins: $s0 157 158 ; CHECK-LABEL: name: umin 159 ; CHECK: liveins: $s0 160 ; CHECK-NEXT: {{ $}} 161 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 162 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 10 163 ; CHECK-NEXT: %min:_(s32) = G_UMIN [[COPY]], %cst 164 ; CHECK-NEXT: $s0 = COPY %min(s32) 165 ; CHECK-NEXT: RET_ReallyLR 166 %0:_(s32) = COPY $s0 167 %cst:_(s32) = G_CONSTANT i32 10 168 %min:_(s32) = G_UMIN %cst, %0 169 $s0 = COPY %min 170 RET_ReallyLR 171... 172--- 173name: umax 174tracksRegLiveness: true 175body: | 176 bb.1: 177 liveins: $s0 178 179 ; CHECK-LABEL: name: umax 180 ; CHECK: liveins: $s0 181 ; CHECK-NEXT: {{ $}} 182 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 183 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 10 184 ; CHECK-NEXT: %max:_(s32) = G_UMAX [[COPY]], %cst 185 ; CHECK-NEXT: $s0 = COPY %max(s32) 186 ; CHECK-NEXT: RET_ReallyLR 187 %0:_(s32) = COPY $s0 188 %cst:_(s32) = G_CONSTANT i32 10 189 %max:_(s32) = G_UMAX %cst, %0 190 $s0 = COPY %max 191 RET_ReallyLR 192... 193--- 194name: uaddo 195tracksRegLiveness: true 196body: | 197 bb.1: 198 liveins: $s0 199 200 ; CHECK-LABEL: name: uaddo 201 ; CHECK: liveins: $s0 202 ; CHECK-NEXT: {{ $}} 203 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 204 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 205 ; CHECK-NEXT: %add:_(s32), %overflow:_(s1) = G_UADDO [[COPY]], %cst 206 ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1) 207 ; CHECK-NEXT: $s0 = COPY %ret(s32) 208 ; CHECK-NEXT: RET_ReallyLR 209 %0:_(s32) = COPY $s0 210 %cst:_(s32) = G_CONSTANT i32 1 211 %add:_(s32), %overflow:_(s1) = G_UADDO %cst, %0 212 %ret:_(s32) = G_ANYEXT %overflow 213 $s0 = COPY %ret 214 RET_ReallyLR 215 216... 217--- 218name: saddo 219tracksRegLiveness: true 220body: | 221 bb.1: 222 liveins: $s0 223 224 ; CHECK-LABEL: name: saddo 225 ; CHECK: liveins: $s0 226 ; CHECK-NEXT: {{ $}} 227 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 228 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 229 ; CHECK-NEXT: %add:_(s32), %overflow:_(s1) = G_SADDO [[COPY]], %cst 230 ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1) 231 ; CHECK-NEXT: $s0 = COPY %ret(s32) 232 ; CHECK-NEXT: RET_ReallyLR 233 %0:_(s32) = COPY $s0 234 %cst:_(s32) = G_CONSTANT i32 1 235 %add:_(s32), %overflow:_(s1) = G_SADDO %cst, %0 236 %ret:_(s32) = G_ANYEXT %overflow 237 $s0 = COPY %ret 238 RET_ReallyLR 239 240... 241--- 242name: umulo 243tracksRegLiveness: true 244body: | 245 bb.1: 246 liveins: $s0 247 248 ; CHECK-LABEL: name: umulo 249 ; CHECK: liveins: $s0 250 ; CHECK-NEXT: {{ $}} 251 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 252 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 253 ; CHECK-NEXT: %mul:_(s32), %overflow:_(s1) = G_UMULO [[COPY]], %cst 254 ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1) 255 ; CHECK-NEXT: $s0 = COPY %ret(s32) 256 ; CHECK-NEXT: RET_ReallyLR 257 %0:_(s32) = COPY $s0 258 %cst:_(s32) = G_CONSTANT i32 3 259 %mul:_(s32), %overflow:_(s1) = G_UMULO %cst, %0 260 %ret:_(s32) = G_ANYEXT %overflow 261 $s0 = COPY %ret 262 RET_ReallyLR 263... 264--- 265name: smulo 266tracksRegLiveness: true 267body: | 268 bb.1: 269 liveins: $s0 270 271 ; CHECK-LABEL: name: smulo 272 ; CHECK: liveins: $s0 273 ; CHECK-NEXT: {{ $}} 274 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 275 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 276 ; CHECK-NEXT: %mul:_(s32), %overflow:_(s1) = G_SMULO [[COPY]], %cst 277 ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1) 278 ; CHECK-NEXT: $s0 = COPY %ret(s32) 279 ; CHECK-NEXT: RET_ReallyLR 280 %0:_(s32) = COPY $s0 281 %cst:_(s32) = G_CONSTANT i32 3 282 %mul:_(s32), %overflow:_(s1) = G_SMULO %cst, %0 283 %ret:_(s32) = G_ANYEXT %overflow 284 $s0 = COPY %ret 285 RET_ReallyLR 286... 287--- 288name: umulh 289tracksRegLiveness: true 290body: | 291 bb.1: 292 liveins: $s0 293 294 ; CHECK-LABEL: name: umulh 295 ; CHECK: liveins: $s0 296 ; CHECK-NEXT: {{ $}} 297 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 298 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 299 ; CHECK-NEXT: %mul:_(s32) = G_UMULH [[COPY]], %cst 300 ; CHECK-NEXT: $s0 = COPY %mul(s32) 301 ; CHECK-NEXT: RET_ReallyLR 302 %0:_(s32) = COPY $s0 303 %cst:_(s32) = G_CONSTANT i32 3 304 %mul:_(s32) = G_UMULH %cst, %0 305 $s0 = COPY %mul 306 RET_ReallyLR 307... 308--- 309name: smulh 310tracksRegLiveness: true 311body: | 312 bb.1: 313 liveins: $s0 314 315 ; CHECK-LABEL: name: smulh 316 ; CHECK: liveins: $s0 317 ; CHECK-NEXT: {{ $}} 318 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 319 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 320 ; CHECK-NEXT: %mul:_(s32) = G_UMULH [[COPY]], %cst 321 ; CHECK-NEXT: $s0 = COPY %mul(s32) 322 ; CHECK-NEXT: RET_ReallyLR 323 %0:_(s32) = COPY $s0 324 %cst:_(s32) = G_CONSTANT i32 3 325 %mul:_(s32) = G_UMULH %cst, %0 326 $s0 = COPY %mul 327 RET_ReallyLR 328... 329--- 330name: uaddsat 331tracksRegLiveness: true 332body: | 333 bb.1: 334 liveins: $s0 335 336 ; CHECK-LABEL: name: uaddsat 337 ; CHECK: liveins: $s0 338 ; CHECK-NEXT: {{ $}} 339 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 340 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 341 ; CHECK-NEXT: %add:_(s32) = G_UADDSAT [[COPY]], %cst 342 ; CHECK-NEXT: $s0 = COPY %add(s32) 343 ; CHECK-NEXT: RET_ReallyLR 344 %0:_(s32) = COPY $s0 345 %cst:_(s32) = G_CONSTANT i32 1 346 %add:_(s32) = G_UADDSAT %cst, %0 347 $s0 = COPY %add 348 RET_ReallyLR 349 350... 351--- 352name: saddsat 353tracksRegLiveness: true 354body: | 355 bb.1: 356 liveins: $s0 357 358 ; CHECK-LABEL: name: saddsat 359 ; CHECK: liveins: $s0 360 ; CHECK-NEXT: {{ $}} 361 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 362 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 363 ; CHECK-NEXT: %add:_(s32) = G_SADDSAT [[COPY]], %cst 364 ; CHECK-NEXT: $s0 = COPY %add(s32) 365 ; CHECK-NEXT: RET_ReallyLR 366 %0:_(s32) = COPY $s0 367 %cst:_(s32) = G_CONSTANT i32 1 368 %add:_(s32) = G_SADDSAT %cst, %0 369 $s0 = COPY %add 370 RET_ReallyLR 371 372... 373--- 374name: smulfix 375tracksRegLiveness: true 376body: | 377 bb.1: 378 liveins: $s0 379 380 ; CHECK-LABEL: name: smulfix 381 ; CHECK: liveins: $s0 382 ; CHECK-NEXT: {{ $}} 383 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 384 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 385 ; CHECK-NEXT: %mul:_(s32) = G_SMULFIX [[COPY]], %cst, 7 386 ; CHECK-NEXT: $s0 = COPY %mul(s32) 387 ; CHECK-NEXT: RET_ReallyLR 388 %0:_(s32) = COPY $s0 389 %cst:_(s32) = G_CONSTANT i32 3 390 %mul:_(s32) = G_SMULFIX %cst, %0, 7 391 $s0 = COPY %mul 392 RET_ReallyLR 393... 394--- 395name: umulfix 396tracksRegLiveness: true 397body: | 398 bb.1: 399 liveins: $s0 400 401 ; CHECK-LABEL: name: umulfix 402 ; CHECK: liveins: $s0 403 ; CHECK-NEXT: {{ $}} 404 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 405 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 406 ; CHECK-NEXT: %mul:_(s32) = G_UMULFIX [[COPY]], %cst, 7 407 ; CHECK-NEXT: $s0 = COPY %mul(s32) 408 ; CHECK-NEXT: RET_ReallyLR 409 %0:_(s32) = COPY $s0 410 %cst:_(s32) = G_CONSTANT i32 3 411 %mul:_(s32) = G_UMULFIX %cst, %0, 7 412 $s0 = COPY %mul 413 RET_ReallyLR 414... 415--- 416name: smulfixsat 417tracksRegLiveness: true 418body: | 419 bb.1: 420 liveins: $s0 421 422 ; CHECK-LABEL: name: smulfixsat 423 ; CHECK: liveins: $s0 424 ; CHECK-NEXT: {{ $}} 425 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 426 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 427 ; CHECK-NEXT: %mul:_(s32) = G_SMULFIXSAT [[COPY]], %cst, 7 428 ; CHECK-NEXT: $s0 = COPY %mul(s32) 429 ; CHECK-NEXT: RET_ReallyLR 430 %0:_(s32) = COPY $s0 431 %cst:_(s32) = G_CONSTANT i32 3 432 %mul:_(s32) = G_SMULFIXSAT %cst, %0, 7 433 $s0 = COPY %mul 434 RET_ReallyLR 435... 436--- 437name: umulfixsat 438tracksRegLiveness: true 439body: | 440 bb.1: 441 liveins: $s0 442 443 ; CHECK-LABEL: name: umulfixsat 444 ; CHECK: liveins: $s0 445 ; CHECK-NEXT: {{ $}} 446 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 447 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 448 ; CHECK-NEXT: %mul:_(s32) = G_UMULFIXSAT [[COPY]], %cst, 7 449 ; CHECK-NEXT: $s0 = COPY %mul(s32) 450 ; CHECK-NEXT: RET_ReallyLR 451 %0:_(s32) = COPY $s0 452 %cst:_(s32) = G_CONSTANT i32 3 453 %mul:_(s32) = G_UMULFIXSAT %cst, %0, 7 454 $s0 = COPY %mul 455 RET_ReallyLR 456... 457