| # 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 |
| ... |