1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple aarch64 -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s 3 4# Test: 5# (X + Y) == X --> Y == 0 6# (X - Y) == X --> Y == 0 7# (X ^ Y) == X --> Y == 0 8# (X + Y) != X --> Y != 0 9# (X - Y) != X --> Y != 0 10# (X ^ Y) != X --> Y != 0 11# 12# And all commuted cases. 13 14... 15--- 16name: add_scalar_eq 17tracksRegLiveness: true 18body: | 19 bb.0: 20 liveins: $w0, $w1 21 ; CHECK-LABEL: name: add_scalar_eq 22 ; CHECK: liveins: $w0, $w1 23 ; CHECK-NEXT: {{ $}} 24 ; CHECK-NEXT: %y:_(s32) = COPY $w1 25 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 26 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %y(s32), [[C]] 27 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 28 ; CHECK-NEXT: $w0 = COPY %ext(s32) 29 ; CHECK-NEXT: RET_ReallyLR implicit $w0 30 %x:_(s32) = COPY $w0 31 %y:_(s32) = COPY $w1 32 %op:_(s32) = G_ADD %x, %y 33 %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %x 34 %ext:_(s32) = G_ZEXT %cmp(s1) 35 $w0 = COPY %ext(s32) 36 RET_ReallyLR implicit $w0 37... 38--- 39name: add_vector_eq 40tracksRegLiveness: true 41body: | 42 bb.0: 43 liveins: $q0, $q1 44 ; CHECK-LABEL: name: add_vector_eq 45 ; CHECK: liveins: $q0, $q1 46 ; CHECK-NEXT: {{ $}} 47 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 48 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 49 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 50 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %y(<4 x s32>), [[BUILD_VECTOR]] 51 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 52 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 53 ; CHECK-NEXT: RET_ReallyLR implicit $d0 54 %x:_(<4 x s32>) = COPY $q0 55 %y:_(<4 x s32>) = COPY $q1 56 %op:_(<4 x s32>) = G_ADD %x, %y 57 %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %op(<4 x s32>), %x 58 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 59 $d0 = COPY %ext(<4 x s16>) 60 RET_ReallyLR implicit $d0 61... 62--- 63name: add_scalar_eq_commuted_in_op 64tracksRegLiveness: true 65body: | 66 bb.0: 67 liveins: $w0, $w1 68 ; CHECK-LABEL: name: add_scalar_eq_commuted_in_op 69 ; CHECK: liveins: $w0, $w1 70 ; CHECK-NEXT: {{ $}} 71 ; CHECK-NEXT: %y:_(s32) = COPY $w1 72 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 73 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %y(s32), [[C]] 74 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 75 ; CHECK-NEXT: $w0 = COPY %ext(s32) 76 ; CHECK-NEXT: RET_ReallyLR implicit $w0 77 %x:_(s32) = COPY $w0 78 %y:_(s32) = COPY $w1 79 %op:_(s32) = G_ADD %y, %x 80 %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %x 81 %ext:_(s32) = G_ZEXT %cmp(s1) 82 $w0 = COPY %ext(s32) 83 RET_ReallyLR implicit $w0 84... 85--- 86name: add_vector_eq_commuted_in_op 87tracksRegLiveness: true 88body: | 89 bb.0: 90 liveins: $q0, $q1 91 ; CHECK-LABEL: name: add_vector_eq_commuted_in_op 92 ; CHECK: liveins: $q0, $q1 93 ; CHECK-NEXT: {{ $}} 94 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 95 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 96 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 97 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %y(<4 x s32>), [[BUILD_VECTOR]] 98 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 99 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 100 ; CHECK-NEXT: RET_ReallyLR implicit $d0 101 %x:_(<4 x s32>) = COPY $q0 102 %y:_(<4 x s32>) = COPY $q1 103 %op:_(<4 x s32>) = G_ADD %y, %x 104 %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %op(<4 x s32>), %x 105 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 106 $d0 = COPY %ext(<4 x s16>) 107 RET_ReallyLR implicit $d0 108... 109--- 110name: add_scalar_eq_commuted_in_cmp 111tracksRegLiveness: true 112body: | 113 bb.0: 114 liveins: $w0, $w1 115 ; CHECK-LABEL: name: add_scalar_eq_commuted_in_cmp 116 ; CHECK: liveins: $w0, $w1 117 ; CHECK-NEXT: {{ $}} 118 ; CHECK-NEXT: %y:_(s32) = COPY $w1 119 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 120 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %y(s32), [[C]] 121 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 122 ; CHECK-NEXT: $w0 = COPY %ext(s32) 123 ; CHECK-NEXT: RET_ReallyLR implicit $w0 124 %x:_(s32) = COPY $w0 125 %y:_(s32) = COPY $w1 126 %op:_(s32) = G_ADD %x, %y 127 %cmp:_(s1) = G_ICMP intpred(eq), %x(s32), %op 128 %ext:_(s32) = G_ZEXT %cmp(s1) 129 $w0 = COPY %ext(s32) 130 RET_ReallyLR implicit $w0 131... 132--- 133name: add_vector_eq_commuted_in_cmp 134tracksRegLiveness: true 135body: | 136 bb.0: 137 liveins: $q0, $q1 138 ; CHECK-LABEL: name: add_vector_eq_commuted_in_cmp 139 ; CHECK: liveins: $q0, $q1 140 ; CHECK-NEXT: {{ $}} 141 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 142 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 143 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 144 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %y(<4 x s32>), [[BUILD_VECTOR]] 145 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 146 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 147 ; CHECK-NEXT: RET_ReallyLR implicit $d0 148 %x:_(<4 x s32>) = COPY $q0 149 %y:_(<4 x s32>) = COPY $q1 150 %op:_(<4 x s32>) = G_ADD %x, %y 151 %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %x(<4 x s32>), %op 152 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 153 $d0 = COPY %ext(<4 x s16>) 154 RET_ReallyLR implicit $d0 155... 156--- 157name: xor_scalar_eq 158tracksRegLiveness: true 159body: | 160 bb.0: 161 liveins: $w0, $w1 162 ; CHECK-LABEL: name: xor_scalar_eq 163 ; CHECK: liveins: $w0, $w1 164 ; CHECK-NEXT: {{ $}} 165 ; CHECK-NEXT: %y:_(s32) = COPY $w1 166 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 167 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %y(s32), [[C]] 168 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 169 ; CHECK-NEXT: $w0 = COPY %ext(s32) 170 ; CHECK-NEXT: RET_ReallyLR implicit $w0 171 %x:_(s32) = COPY $w0 172 %y:_(s32) = COPY $w1 173 %op:_(s32) = G_XOR %x, %y 174 %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %x 175 %ext:_(s32) = G_ZEXT %cmp(s1) 176 $w0 = COPY %ext(s32) 177 RET_ReallyLR implicit $w0 178... 179--- 180name: xor_vector_eq 181tracksRegLiveness: true 182body: | 183 bb.0: 184 liveins: $q0, $q1 185 ; CHECK-LABEL: name: xor_vector_eq 186 ; CHECK: liveins: $q0, $q1 187 ; CHECK-NEXT: {{ $}} 188 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 189 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 190 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 191 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %y(<4 x s32>), [[BUILD_VECTOR]] 192 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 193 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 194 ; CHECK-NEXT: RET_ReallyLR implicit $d0 195 %x:_(<4 x s32>) = COPY $q0 196 %y:_(<4 x s32>) = COPY $q1 197 %op:_(<4 x s32>) = G_XOR %x, %y 198 %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %op(<4 x s32>), %x 199 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 200 $d0 = COPY %ext(<4 x s16>) 201 RET_ReallyLR implicit $d0 202... 203--- 204name: xor_scalar_eq_commuted_in_op 205tracksRegLiveness: true 206body: | 207 bb.0: 208 liveins: $w0, $w1 209 ; CHECK-LABEL: name: xor_scalar_eq_commuted_in_op 210 ; CHECK: liveins: $w0, $w1 211 ; CHECK-NEXT: {{ $}} 212 ; CHECK-NEXT: %y:_(s32) = COPY $w1 213 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 214 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %y(s32), [[C]] 215 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 216 ; CHECK-NEXT: $w0 = COPY %ext(s32) 217 ; CHECK-NEXT: RET_ReallyLR implicit $w0 218 %x:_(s32) = COPY $w0 219 %y:_(s32) = COPY $w1 220 %op:_(s32) = G_XOR %y, %x 221 %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %x 222 %ext:_(s32) = G_ZEXT %cmp(s1) 223 $w0 = COPY %ext(s32) 224 RET_ReallyLR implicit $w0 225... 226--- 227name: xor_vector_eq_commuted_in_op 228tracksRegLiveness: true 229body: | 230 bb.0: 231 liveins: $q0, $q1 232 ; CHECK-LABEL: name: xor_vector_eq_commuted_in_op 233 ; CHECK: liveins: $q0, $q1 234 ; CHECK-NEXT: {{ $}} 235 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 236 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 237 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 238 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %y(<4 x s32>), [[BUILD_VECTOR]] 239 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 240 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 241 ; CHECK-NEXT: RET_ReallyLR implicit $d0 242 %x:_(<4 x s32>) = COPY $q0 243 %y:_(<4 x s32>) = COPY $q1 244 %op:_(<4 x s32>) = G_XOR %y, %x 245 %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %op(<4 x s32>), %x 246 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 247 $d0 = COPY %ext(<4 x s16>) 248 RET_ReallyLR implicit $d0 249... 250--- 251name: xor_scalar_eq_commuted_in_cmp 252tracksRegLiveness: true 253body: | 254 bb.0: 255 liveins: $w0, $w1 256 ; CHECK-LABEL: name: xor_scalar_eq_commuted_in_cmp 257 ; CHECK: liveins: $w0, $w1 258 ; CHECK-NEXT: {{ $}} 259 ; CHECK-NEXT: %y:_(s32) = COPY $w1 260 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 261 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %y(s32), [[C]] 262 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 263 ; CHECK-NEXT: $w0 = COPY %ext(s32) 264 ; CHECK-NEXT: RET_ReallyLR implicit $w0 265 %x:_(s32) = COPY $w0 266 %y:_(s32) = COPY $w1 267 %op:_(s32) = G_XOR %x, %y 268 %cmp:_(s1) = G_ICMP intpred(eq), %x(s32), %op 269 %ext:_(s32) = G_ZEXT %cmp(s1) 270 $w0 = COPY %ext(s32) 271 RET_ReallyLR implicit $w0 272... 273--- 274name: xor_vector_eq_commuted_in_cmp 275tracksRegLiveness: true 276body: | 277 bb.0: 278 liveins: $q0, $q1 279 ; CHECK-LABEL: name: xor_vector_eq_commuted_in_cmp 280 ; CHECK: liveins: $q0, $q1 281 ; CHECK-NEXT: {{ $}} 282 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 283 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 284 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 285 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %y(<4 x s32>), [[BUILD_VECTOR]] 286 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 287 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 288 ; CHECK-NEXT: RET_ReallyLR implicit $d0 289 %x:_(<4 x s32>) = COPY $q0 290 %y:_(<4 x s32>) = COPY $q1 291 %op:_(<4 x s32>) = G_XOR %x, %y 292 %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %x(<4 x s32>), %op 293 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 294 $d0 = COPY %ext(<4 x s16>) 295 RET_ReallyLR implicit $d0 296... 297--- 298name: sub_scalar_eq 299tracksRegLiveness: true 300body: | 301 bb.0: 302 liveins: $w0, $w1 303 ; CHECK-LABEL: name: sub_scalar_eq 304 ; CHECK: liveins: $w0, $w1 305 ; CHECK-NEXT: {{ $}} 306 ; CHECK-NEXT: %y:_(s32) = COPY $w1 307 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 308 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %y(s32), [[C]] 309 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 310 ; CHECK-NEXT: $w0 = COPY %ext(s32) 311 ; CHECK-NEXT: RET_ReallyLR implicit $w0 312 %x:_(s32) = COPY $w0 313 %y:_(s32) = COPY $w1 314 %op:_(s32) = G_SUB %x, %y 315 %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %x 316 %ext:_(s32) = G_ZEXT %cmp(s1) 317 $w0 = COPY %ext(s32) 318 RET_ReallyLR implicit $w0 319... 320--- 321name: sub_vector_eq 322tracksRegLiveness: true 323body: | 324 bb.0: 325 liveins: $q0, $q1 326 ; CHECK-LABEL: name: sub_vector_eq 327 ; CHECK: liveins: $q0, $q1 328 ; CHECK-NEXT: {{ $}} 329 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 330 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 331 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 332 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %y(<4 x s32>), [[BUILD_VECTOR]] 333 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 334 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 335 ; CHECK-NEXT: RET_ReallyLR implicit $d0 336 %x:_(<4 x s32>) = COPY $q0 337 %y:_(<4 x s32>) = COPY $q1 338 %op:_(<4 x s32>) = G_SUB %x, %y 339 %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %op(<4 x s32>), %x 340 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 341 $d0 = COPY %ext(<4 x s16>) 342 RET_ReallyLR implicit $d0 343... 344--- 345name: sub_scalar_eq_commuted_in_cmp 346tracksRegLiveness: true 347body: | 348 bb.0: 349 liveins: $w0, $w1 350 ; CHECK-LABEL: name: sub_scalar_eq_commuted_in_cmp 351 ; CHECK: liveins: $w0, $w1 352 ; CHECK-NEXT: {{ $}} 353 ; CHECK-NEXT: %y:_(s32) = COPY $w1 354 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 355 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %y(s32), [[C]] 356 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 357 ; CHECK-NEXT: $w0 = COPY %ext(s32) 358 ; CHECK-NEXT: RET_ReallyLR implicit $w0 359 %x:_(s32) = COPY $w0 360 %y:_(s32) = COPY $w1 361 %op:_(s32) = G_SUB %x, %y 362 %cmp:_(s1) = G_ICMP intpred(eq), %x(s32), %op 363 %ext:_(s32) = G_ZEXT %cmp(s1) 364 $w0 = COPY %ext(s32) 365 RET_ReallyLR implicit $w0 366... 367--- 368name: sub_vector_eq_commuted_in_cmp 369tracksRegLiveness: true 370body: | 371 bb.0: 372 liveins: $q0, $q1 373 ; CHECK-LABEL: name: sub_vector_eq_commuted_in_cmp 374 ; CHECK: liveins: $q0, $q1 375 ; CHECK-NEXT: {{ $}} 376 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 377 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 378 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 379 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %y(<4 x s32>), [[BUILD_VECTOR]] 380 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 381 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 382 ; CHECK-NEXT: RET_ReallyLR implicit $d0 383 %x:_(<4 x s32>) = COPY $q0 384 %y:_(<4 x s32>) = COPY $q1 385 %op:_(<4 x s32>) = G_SUB %x, %y 386 %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %x(<4 x s32>), %op 387 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 388 $d0 = COPY %ext(<4 x s16>) 389 RET_ReallyLR implicit $d0 390... 391--- 392name: add_scalar_ne 393tracksRegLiveness: true 394body: | 395 bb.0: 396 liveins: $w0, $w1 397 ; CHECK-LABEL: name: add_scalar_ne 398 ; CHECK: liveins: $w0, $w1 399 ; CHECK-NEXT: {{ $}} 400 ; CHECK-NEXT: %y:_(s32) = COPY $w1 401 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 402 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(ne), %y(s32), [[C]] 403 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 404 ; CHECK-NEXT: $w0 = COPY %ext(s32) 405 ; CHECK-NEXT: RET_ReallyLR implicit $w0 406 %x:_(s32) = COPY $w0 407 %y:_(s32) = COPY $w1 408 %op:_(s32) = G_ADD %x, %y 409 %cmp:_(s1) = G_ICMP intpred(ne), %op(s32), %x 410 %ext:_(s32) = G_ZEXT %cmp(s1) 411 $w0 = COPY %ext(s32) 412 RET_ReallyLR implicit $w0 413... 414--- 415name: add_vector_ne 416tracksRegLiveness: true 417body: | 418 bb.0: 419 liveins: $q0, $q1 420 ; CHECK-LABEL: name: add_vector_ne 421 ; CHECK: liveins: $q0, $q1 422 ; CHECK-NEXT: {{ $}} 423 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 424 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 425 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 426 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %y(<4 x s32>), [[BUILD_VECTOR]] 427 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 428 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 429 ; CHECK-NEXT: RET_ReallyLR implicit $d0 430 %x:_(<4 x s32>) = COPY $q0 431 %y:_(<4 x s32>) = COPY $q1 432 %op:_(<4 x s32>) = G_ADD %x, %y 433 %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %op(<4 x s32>), %x 434 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 435 $d0 = COPY %ext(<4 x s16>) 436 RET_ReallyLR implicit $d0 437... 438--- 439name: add_scalar_ne_commuted_in_op 440tracksRegLiveness: true 441body: | 442 bb.0: 443 liveins: $w0, $w1 444 ; CHECK-LABEL: name: add_scalar_ne_commuted_in_op 445 ; CHECK: liveins: $w0, $w1 446 ; CHECK-NEXT: {{ $}} 447 ; CHECK-NEXT: %y:_(s32) = COPY $w1 448 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 449 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(ne), %y(s32), [[C]] 450 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 451 ; CHECK-NEXT: $w0 = COPY %ext(s32) 452 ; CHECK-NEXT: RET_ReallyLR implicit $w0 453 %x:_(s32) = COPY $w0 454 %y:_(s32) = COPY $w1 455 %op:_(s32) = G_ADD %y, %x 456 %cmp:_(s1) = G_ICMP intpred(ne), %op(s32), %x 457 %ext:_(s32) = G_ZEXT %cmp(s1) 458 $w0 = COPY %ext(s32) 459 RET_ReallyLR implicit $w0 460... 461--- 462name: add_vector_ne_commuted_in_op 463tracksRegLiveness: true 464body: | 465 bb.0: 466 liveins: $q0, $q1 467 ; CHECK-LABEL: name: add_vector_ne_commuted_in_op 468 ; CHECK: liveins: $q0, $q1 469 ; CHECK-NEXT: {{ $}} 470 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 471 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 472 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 473 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %y(<4 x s32>), [[BUILD_VECTOR]] 474 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 475 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 476 ; CHECK-NEXT: RET_ReallyLR implicit $d0 477 %x:_(<4 x s32>) = COPY $q0 478 %y:_(<4 x s32>) = COPY $q1 479 %op:_(<4 x s32>) = G_ADD %y, %x 480 %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %op(<4 x s32>), %x 481 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 482 $d0 = COPY %ext(<4 x s16>) 483 RET_ReallyLR implicit $d0 484... 485--- 486name: add_scalar_ne_commuted_in_cmp 487tracksRegLiveness: true 488body: | 489 bb.0: 490 liveins: $w0, $w1 491 ; CHECK-LABEL: name: add_scalar_ne_commuted_in_cmp 492 ; CHECK: liveins: $w0, $w1 493 ; CHECK-NEXT: {{ $}} 494 ; CHECK-NEXT: %y:_(s32) = COPY $w1 495 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 496 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(ne), %y(s32), [[C]] 497 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 498 ; CHECK-NEXT: $w0 = COPY %ext(s32) 499 ; CHECK-NEXT: RET_ReallyLR implicit $w0 500 %x:_(s32) = COPY $w0 501 %y:_(s32) = COPY $w1 502 %op:_(s32) = G_ADD %x, %y 503 %cmp:_(s1) = G_ICMP intpred(ne), %x(s32), %op 504 %ext:_(s32) = G_ZEXT %cmp(s1) 505 $w0 = COPY %ext(s32) 506 RET_ReallyLR implicit $w0 507... 508--- 509name: add_vector_ne_commuted_in_cmp 510tracksRegLiveness: true 511body: | 512 bb.0: 513 liveins: $q0, $q1 514 ; CHECK-LABEL: name: add_vector_ne_commuted_in_cmp 515 ; CHECK: liveins: $q0, $q1 516 ; CHECK-NEXT: {{ $}} 517 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 518 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 519 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 520 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %y(<4 x s32>), [[BUILD_VECTOR]] 521 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 522 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 523 ; CHECK-NEXT: RET_ReallyLR implicit $d0 524 %x:_(<4 x s32>) = COPY $q0 525 %y:_(<4 x s32>) = COPY $q1 526 %op:_(<4 x s32>) = G_ADD %x, %y 527 %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %x(<4 x s32>), %op 528 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 529 $d0 = COPY %ext(<4 x s16>) 530 RET_ReallyLR implicit $d0 531... 532--- 533name: xor_scalar_ne 534tracksRegLiveness: true 535body: | 536 bb.0: 537 liveins: $w0, $w1 538 ; CHECK-LABEL: name: xor_scalar_ne 539 ; CHECK: liveins: $w0, $w1 540 ; CHECK-NEXT: {{ $}} 541 ; CHECK-NEXT: %y:_(s32) = COPY $w1 542 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 543 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(ne), %y(s32), [[C]] 544 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 545 ; CHECK-NEXT: $w0 = COPY %ext(s32) 546 ; CHECK-NEXT: RET_ReallyLR implicit $w0 547 %x:_(s32) = COPY $w0 548 %y:_(s32) = COPY $w1 549 %op:_(s32) = G_XOR %x, %y 550 %cmp:_(s1) = G_ICMP intpred(ne), %op(s32), %x 551 %ext:_(s32) = G_ZEXT %cmp(s1) 552 $w0 = COPY %ext(s32) 553 RET_ReallyLR implicit $w0 554... 555--- 556name: xor_vector_ne 557tracksRegLiveness: true 558body: | 559 bb.0: 560 liveins: $q0, $q1 561 ; CHECK-LABEL: name: xor_vector_ne 562 ; CHECK: liveins: $q0, $q1 563 ; CHECK-NEXT: {{ $}} 564 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 565 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 566 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 567 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %y(<4 x s32>), [[BUILD_VECTOR]] 568 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 569 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 570 ; CHECK-NEXT: RET_ReallyLR implicit $d0 571 %x:_(<4 x s32>) = COPY $q0 572 %y:_(<4 x s32>) = COPY $q1 573 %op:_(<4 x s32>) = G_XOR %x, %y 574 %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %op(<4 x s32>), %x 575 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 576 $d0 = COPY %ext(<4 x s16>) 577 RET_ReallyLR implicit $d0 578... 579--- 580name: xor_scalar_ne_commuted_in_op 581tracksRegLiveness: true 582body: | 583 bb.0: 584 liveins: $w0, $w1 585 ; CHECK-LABEL: name: xor_scalar_ne_commuted_in_op 586 ; CHECK: liveins: $w0, $w1 587 ; CHECK-NEXT: {{ $}} 588 ; CHECK-NEXT: %y:_(s32) = COPY $w1 589 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 590 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(ne), %y(s32), [[C]] 591 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 592 ; CHECK-NEXT: $w0 = COPY %ext(s32) 593 ; CHECK-NEXT: RET_ReallyLR implicit $w0 594 %x:_(s32) = COPY $w0 595 %y:_(s32) = COPY $w1 596 %op:_(s32) = G_XOR %y, %x 597 %cmp:_(s1) = G_ICMP intpred(ne), %op(s32), %x 598 %ext:_(s32) = G_ZEXT %cmp(s1) 599 $w0 = COPY %ext(s32) 600 RET_ReallyLR implicit $w0 601... 602--- 603name: xor_vector_ne_commuted_in_op 604tracksRegLiveness: true 605body: | 606 bb.0: 607 liveins: $q0, $q1 608 ; CHECK-LABEL: name: xor_vector_ne_commuted_in_op 609 ; CHECK: liveins: $q0, $q1 610 ; CHECK-NEXT: {{ $}} 611 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 612 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 613 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 614 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %y(<4 x s32>), [[BUILD_VECTOR]] 615 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 616 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 617 ; CHECK-NEXT: RET_ReallyLR implicit $d0 618 %x:_(<4 x s32>) = COPY $q0 619 %y:_(<4 x s32>) = COPY $q1 620 %op:_(<4 x s32>) = G_XOR %y, %x 621 %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %op(<4 x s32>), %x 622 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 623 $d0 = COPY %ext(<4 x s16>) 624 RET_ReallyLR implicit $d0 625... 626--- 627name: xor_scalar_ne_commuted_in_cmp 628tracksRegLiveness: true 629body: | 630 bb.0: 631 liveins: $w0, $w1 632 ; CHECK-LABEL: name: xor_scalar_ne_commuted_in_cmp 633 ; CHECK: liveins: $w0, $w1 634 ; CHECK-NEXT: {{ $}} 635 ; CHECK-NEXT: %y:_(s32) = COPY $w1 636 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 637 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(ne), %y(s32), [[C]] 638 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 639 ; CHECK-NEXT: $w0 = COPY %ext(s32) 640 ; CHECK-NEXT: RET_ReallyLR implicit $w0 641 %x:_(s32) = COPY $w0 642 %y:_(s32) = COPY $w1 643 %op:_(s32) = G_XOR %x, %y 644 %cmp:_(s1) = G_ICMP intpred(ne), %x(s32), %op 645 %ext:_(s32) = G_ZEXT %cmp(s1) 646 $w0 = COPY %ext(s32) 647 RET_ReallyLR implicit $w0 648... 649--- 650name: xor_vector_ne_commuted_in_cmp 651tracksRegLiveness: true 652body: | 653 bb.0: 654 liveins: $q0, $q1 655 ; CHECK-LABEL: name: xor_vector_ne_commuted_in_cmp 656 ; CHECK: liveins: $q0, $q1 657 ; CHECK-NEXT: {{ $}} 658 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 659 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 660 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 661 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %y(<4 x s32>), [[BUILD_VECTOR]] 662 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 663 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 664 ; CHECK-NEXT: RET_ReallyLR implicit $d0 665 %x:_(<4 x s32>) = COPY $q0 666 %y:_(<4 x s32>) = COPY $q1 667 %op:_(<4 x s32>) = G_XOR %x, %y 668 %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %x(<4 x s32>), %op 669 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 670 $d0 = COPY %ext(<4 x s16>) 671 RET_ReallyLR implicit $d0 672... 673--- 674name: sub_scalar_ne 675tracksRegLiveness: true 676body: | 677 bb.0: 678 liveins: $w0, $w1 679 ; CHECK-LABEL: name: sub_scalar_ne 680 ; CHECK: liveins: $w0, $w1 681 ; CHECK-NEXT: {{ $}} 682 ; CHECK-NEXT: %y:_(s32) = COPY $w1 683 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 684 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(ne), %y(s32), [[C]] 685 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 686 ; CHECK-NEXT: $w0 = COPY %ext(s32) 687 ; CHECK-NEXT: RET_ReallyLR implicit $w0 688 %x:_(s32) = COPY $w0 689 %y:_(s32) = COPY $w1 690 %op:_(s32) = G_SUB %x, %y 691 %cmp:_(s1) = G_ICMP intpred(ne), %op(s32), %x 692 %ext:_(s32) = G_ZEXT %cmp(s1) 693 $w0 = COPY %ext(s32) 694 RET_ReallyLR implicit $w0 695... 696--- 697name: sub_vector_ne 698tracksRegLiveness: true 699body: | 700 bb.0: 701 liveins: $q0, $q1 702 ; CHECK-LABEL: name: sub_vector_ne 703 ; CHECK: liveins: $q0, $q1 704 ; CHECK-NEXT: {{ $}} 705 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 706 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 707 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 708 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %y(<4 x s32>), [[BUILD_VECTOR]] 709 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 710 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 711 ; CHECK-NEXT: RET_ReallyLR implicit $d0 712 %x:_(<4 x s32>) = COPY $q0 713 %y:_(<4 x s32>) = COPY $q1 714 %op:_(<4 x s32>) = G_SUB %x, %y 715 %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %op(<4 x s32>), %x 716 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 717 $d0 = COPY %ext(<4 x s16>) 718 RET_ReallyLR implicit $d0 719... 720--- 721name: sub_scalar_ne_commuted_in_cmp 722tracksRegLiveness: true 723body: | 724 bb.0: 725 liveins: $w0, $w1 726 ; CHECK-LABEL: name: sub_scalar_ne_commuted_in_cmp 727 ; CHECK: liveins: $w0, $w1 728 ; CHECK-NEXT: {{ $}} 729 ; CHECK-NEXT: %y:_(s32) = COPY $w1 730 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 731 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(ne), %y(s32), [[C]] 732 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 733 ; CHECK-NEXT: $w0 = COPY %ext(s32) 734 ; CHECK-NEXT: RET_ReallyLR implicit $w0 735 %x:_(s32) = COPY $w0 736 %y:_(s32) = COPY $w1 737 %op:_(s32) = G_SUB %x, %y 738 %cmp:_(s1) = G_ICMP intpred(ne), %x(s32), %op 739 %ext:_(s32) = G_ZEXT %cmp(s1) 740 $w0 = COPY %ext(s32) 741 RET_ReallyLR implicit $w0 742... 743--- 744name: sub_vector_ne_commuted_in_cmp 745tracksRegLiveness: true 746body: | 747 bb.0: 748 liveins: $q0, $q1 749 ; CHECK-LABEL: name: sub_vector_ne_commuted_in_cmp 750 ; CHECK: liveins: $q0, $q1 751 ; CHECK-NEXT: {{ $}} 752 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 753 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 754 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 755 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %y(<4 x s32>), [[BUILD_VECTOR]] 756 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 757 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 758 ; CHECK-NEXT: RET_ReallyLR implicit $d0 759 %x:_(<4 x s32>) = COPY $q0 760 %y:_(<4 x s32>) = COPY $q1 761 %op:_(<4 x s32>) = G_SUB %x, %y 762 %cmp:_(<4 x s1>) = G_ICMP intpred(ne), %x(<4 x s32>), %op 763 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 764 $d0 = COPY %ext(<4 x s16>) 765 RET_ReallyLR implicit $d0 766... 767--- 768name: dont_combine_sub_scalar_eq_commuted_in_op 769tracksRegLiveness: true 770body: | 771 bb.0: 772 liveins: $w0, $w1 773 ; CHECK-LABEL: name: dont_combine_sub_scalar_eq_commuted_in_op 774 ; CHECK: liveins: $w0, $w1 775 ; CHECK-NEXT: {{ $}} 776 ; CHECK-NEXT: %x:_(s32) = COPY $w0 777 ; CHECK-NEXT: %y:_(s32) = COPY $w1 778 ; CHECK-NEXT: %op:_(s32) = G_SUB %y, %x 779 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %x 780 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 781 ; CHECK-NEXT: $w0 = COPY %ext(s32) 782 ; CHECK-NEXT: RET_ReallyLR implicit $w0 783 %x:_(s32) = COPY $w0 784 %y:_(s32) = COPY $w1 785 %op:_(s32) = G_SUB %y, %x 786 %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %x 787 %ext:_(s32) = G_ZEXT %cmp(s1) 788 $w0 = COPY %ext(s32) 789 RET_ReallyLR implicit $w0 790... 791--- 792name: dont_combine_sub_vector_eq_commuted_in_op 793tracksRegLiveness: true 794body: | 795 bb.0: 796 liveins: $q0, $q1 797 ; CHECK-LABEL: name: dont_combine_sub_vector_eq_commuted_in_op 798 ; CHECK: liveins: $q0, $q1 799 ; CHECK-NEXT: {{ $}} 800 ; CHECK-NEXT: %x:_(<4 x s32>) = COPY $q0 801 ; CHECK-NEXT: %y:_(<4 x s32>) = COPY $q1 802 ; CHECK-NEXT: %op:_(<4 x s32>) = G_SUB %y, %x 803 ; CHECK-NEXT: %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %op(<4 x s32>), %x 804 ; CHECK-NEXT: %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 805 ; CHECK-NEXT: $d0 = COPY %ext(<4 x s16>) 806 ; CHECK-NEXT: RET_ReallyLR implicit $d0 807 %x:_(<4 x s32>) = COPY $q0 808 %y:_(<4 x s32>) = COPY $q1 809 %op:_(<4 x s32>) = G_SUB %y, %x 810 %cmp:_(<4 x s1>) = G_ICMP intpred(eq), %op(<4 x s32>), %x 811 %ext:_(<4 x s16>) = G_ANYEXT %cmp(<4 x s1>) 812 $d0 = COPY %ext(<4 x s16>) 813 RET_ReallyLR implicit $d0 814... 815--- 816name: dont_combine_not_equality 817tracksRegLiveness: true 818body: | 819 bb.0: 820 liveins: $w0, $w1 821 ; CHECK-LABEL: name: dont_combine_not_equality 822 ; CHECK: liveins: $w0, $w1 823 ; CHECK-NEXT: {{ $}} 824 ; CHECK-NEXT: %x:_(s32) = COPY $w0 825 ; CHECK-NEXT: %y:_(s32) = COPY $w1 826 ; CHECK-NEXT: %op:_(s32) = G_ADD %x, %y 827 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(slt), %op(s32), %x 828 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 829 ; CHECK-NEXT: $w0 = COPY %ext(s32) 830 ; CHECK-NEXT: RET_ReallyLR implicit $w0 831 %x:_(s32) = COPY $w0 832 %y:_(s32) = COPY $w1 833 %op:_(s32) = G_ADD %x, %y 834 %cmp:_(s1) = G_ICMP intpred(slt), %op(s32), %x 835 %ext:_(s32) = G_ZEXT %cmp(s1) 836 $w0 = COPY %ext(s32) 837 RET_ReallyLR implicit $w0 838... 839--- 840name: dont_combine_unique_operands 841tracksRegLiveness: true 842body: | 843 bb.0: 844 liveins: $w0, $w1, $w2 845 ; CHECK-LABEL: name: dont_combine_unique_operands 846 ; CHECK: liveins: $w0, $w1, $w2 847 ; CHECK-NEXT: {{ $}} 848 ; CHECK-NEXT: %x:_(s32) = COPY $w0 849 ; CHECK-NEXT: %y:_(s32) = COPY $w1 850 ; CHECK-NEXT: %z:_(s32) = COPY $w2 851 ; CHECK-NEXT: %op:_(s32) = G_ADD %x, %y 852 ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %z 853 ; CHECK-NEXT: %ext:_(s32) = G_ZEXT %cmp(s1) 854 ; CHECK-NEXT: $w0 = COPY %ext(s32) 855 ; CHECK-NEXT: RET_ReallyLR implicit $w0 856 %x:_(s32) = COPY $w0 857 %y:_(s32) = COPY $w1 858 %z:_(s32) = COPY $w2 859 %op:_(s32) = G_ADD %x, %y 860 %cmp:_(s1) = G_ICMP intpred(eq), %op(s32), %z 861 %ext:_(s32) = G_ZEXT %cmp(s1) 862 $w0 = COPY %ext(s32) 863 RET_ReallyLR implicit $w0 864