# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2 # RUN: llc -mtriple aarch64 -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --- name: add tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: add ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 ; CHECK-NEXT: %add:_(s32) = G_ADD [[COPY]], %cst ; CHECK-NEXT: $s0 = COPY %add(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 1 %add:_(s32) = G_ADD %cst, %0 $s0 = COPY %add RET_ReallyLR ... --- name: mul tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: mul ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 ; CHECK-NEXT: %mul:_(s32) = G_MUL [[COPY]], %cst ; CHECK-NEXT: $s0 = COPY %mul(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 3 %mul:_(s32) = G_MUL %cst, %0 $s0 = COPY %mul RET_ReallyLR ... --- name: and tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: and ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 5 ; CHECK-NEXT: %and:_(s32) = G_AND [[COPY]], %cst ; CHECK-NEXT: $s0 = COPY %and(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 5 %and:_(s32) = G_AND %cst, %0 $s0 = COPY %and RET_ReallyLR ... --- name: or tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: or ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 5 ; CHECK-NEXT: %or:_(s32) = G_OR [[COPY]], %cst ; CHECK-NEXT: $s0 = COPY %or(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 5 %or:_(s32) = G_OR %cst, %0 $s0 = COPY %or RET_ReallyLR ... --- name: xor tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: xor ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 5 ; CHECK-NEXT: %xor:_(s32) = G_XOR [[COPY]], %cst ; CHECK-NEXT: $s0 = COPY %xor(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 5 %xor:_(s32) = G_XOR %cst, %0 $s0 = COPY %xor RET_ReallyLR ... --- name: smin tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: smin ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 10 ; CHECK-NEXT: %min:_(s32) = G_SMIN [[COPY]], %cst ; CHECK-NEXT: $s0 = COPY %min(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 10 %min:_(s32) = G_SMIN %cst, %0 $s0 = COPY %min RET_ReallyLR ... --- name: smax tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: smax ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 10 ; CHECK-NEXT: %max:_(s32) = G_SMAX [[COPY]], %cst ; CHECK-NEXT: $s0 = COPY %max(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 10 %max:_(s32) = G_SMAX %cst, %0 $s0 = COPY %max RET_ReallyLR ... --- name: umin tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: umin ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 10 ; CHECK-NEXT: %min:_(s32) = G_UMIN [[COPY]], %cst ; CHECK-NEXT: $s0 = COPY %min(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 10 %min:_(s32) = G_UMIN %cst, %0 $s0 = COPY %min RET_ReallyLR ... --- name: umax tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: umax ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 10 ; CHECK-NEXT: %max:_(s32) = G_UMAX [[COPY]], %cst ; CHECK-NEXT: $s0 = COPY %max(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 10 %max:_(s32) = G_UMAX %cst, %0 $s0 = COPY %max RET_ReallyLR ... --- name: uaddo tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: uaddo ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 ; CHECK-NEXT: %add:_(s32), %overflow:_(s1) = G_UADDO [[COPY]], %cst ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1) ; CHECK-NEXT: $s0 = COPY %ret(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 1 %add:_(s32), %overflow:_(s1) = G_UADDO %cst, %0 %ret:_(s32) = G_ANYEXT %overflow $s0 = COPY %ret RET_ReallyLR ... --- name: saddo tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: saddo ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 ; CHECK-NEXT: %add:_(s32), %overflow:_(s1) = G_SADDO [[COPY]], %cst ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1) ; CHECK-NEXT: $s0 = COPY %ret(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 1 %add:_(s32), %overflow:_(s1) = G_SADDO %cst, %0 %ret:_(s32) = G_ANYEXT %overflow $s0 = COPY %ret RET_ReallyLR ... --- name: umulo tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: umulo ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 ; CHECK-NEXT: %mul:_(s32), %overflow:_(s1) = G_UMULO [[COPY]], %cst ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1) ; CHECK-NEXT: $s0 = COPY %ret(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 3 %mul:_(s32), %overflow:_(s1) = G_UMULO %cst, %0 %ret:_(s32) = G_ANYEXT %overflow $s0 = COPY %ret RET_ReallyLR ... --- name: smulo tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: smulo ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 ; CHECK-NEXT: %mul:_(s32), %overflow:_(s1) = G_SMULO [[COPY]], %cst ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1) ; CHECK-NEXT: $s0 = COPY %ret(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 3 %mul:_(s32), %overflow:_(s1) = G_SMULO %cst, %0 %ret:_(s32) = G_ANYEXT %overflow $s0 = COPY %ret RET_ReallyLR ... --- name: umulh tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: umulh ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 ; CHECK-NEXT: %mul:_(s32) = G_UMULH [[COPY]], %cst ; CHECK-NEXT: $s0 = COPY %mul(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 3 %mul:_(s32) = G_UMULH %cst, %0 $s0 = COPY %mul RET_ReallyLR ... --- name: smulh tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: smulh ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 ; CHECK-NEXT: %mul:_(s32) = G_UMULH [[COPY]], %cst ; CHECK-NEXT: $s0 = COPY %mul(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 3 %mul:_(s32) = G_UMULH %cst, %0 $s0 = COPY %mul RET_ReallyLR ... --- name: uaddsat tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: uaddsat ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 ; CHECK-NEXT: %add:_(s32) = G_UADDSAT [[COPY]], %cst ; CHECK-NEXT: $s0 = COPY %add(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 1 %add:_(s32) = G_UADDSAT %cst, %0 $s0 = COPY %add RET_ReallyLR ... --- name: saddsat tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: saddsat ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 ; CHECK-NEXT: %add:_(s32) = G_SADDSAT [[COPY]], %cst ; CHECK-NEXT: $s0 = COPY %add(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 1 %add:_(s32) = G_SADDSAT %cst, %0 $s0 = COPY %add RET_ReallyLR ... --- name: smulfix tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: smulfix ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 ; CHECK-NEXT: %mul:_(s32) = G_SMULFIX [[COPY]], %cst, 7 ; CHECK-NEXT: $s0 = COPY %mul(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 3 %mul:_(s32) = G_SMULFIX %cst, %0, 7 $s0 = COPY %mul RET_ReallyLR ... --- name: umulfix tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: umulfix ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 ; CHECK-NEXT: %mul:_(s32) = G_UMULFIX [[COPY]], %cst, 7 ; CHECK-NEXT: $s0 = COPY %mul(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 3 %mul:_(s32) = G_UMULFIX %cst, %0, 7 $s0 = COPY %mul RET_ReallyLR ... --- name: smulfixsat tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: smulfixsat ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 ; CHECK-NEXT: %mul:_(s32) = G_SMULFIXSAT [[COPY]], %cst, 7 ; CHECK-NEXT: $s0 = COPY %mul(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 3 %mul:_(s32) = G_SMULFIXSAT %cst, %0, 7 $s0 = COPY %mul RET_ReallyLR ... --- name: umulfixsat tracksRegLiveness: true body: | bb.1: liveins: $s0 ; CHECK-LABEL: name: umulfixsat ; CHECK: liveins: $s0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 3 ; CHECK-NEXT: %mul:_(s32) = G_UMULFIXSAT [[COPY]], %cst, 7 ; CHECK-NEXT: $s0 = COPY %mul(s32) ; CHECK-NEXT: RET_ReallyLR %0:_(s32) = COPY $s0 %cst:_(s32) = G_CONSTANT i32 3 %mul:_(s32) = G_UMULFIXSAT %cst, %0, 7 $s0 = COPY %mul RET_ReallyLR ...