# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -o - -mtriple=aarch64 -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s | FileCheck %s
...
---
name: sum_of_vscale
body: |
bb.1:
liveins: $x0, $x1
; CHECK-LABEL: name: sum_of_vscale
; CHECK: liveins: $x0, $x1
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: %sum:_(s64) = G_VSCALE i64 20
; CHECK-NEXT: $x0 = COPY %sum(s64)
; CHECK-NEXT: RET_ReallyLR implicit $x0
%rhs:_(s64) = G_VSCALE i64 11
%lhs:_(s64) = G_VSCALE i64 9
%sum:_(s64) = nsw G_ADD %lhs(s64), %rhs(s64)
$x0 = COPY %sum(s64)
RET_ReallyLR implicit $x0
...
---
name: sum_of_vscale_multi_use
body: |
bb.1:
liveins: $x0, $x1
; CHECK-LABEL: name: sum_of_vscale_multi_use
; CHECK: liveins: $x0, $x1
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: %rhs:_(s64) = G_VSCALE i64 11
; CHECK-NEXT: %lhs:_(s64) = G_VSCALE i64 9
; CHECK-NEXT: %sum:_(s64) = nsw G_ADD %lhs, %rhs
; CHECK-NEXT: $x0 = COPY %sum(s64)
; CHECK-NEXT: $x1 = COPY %rhs(s64)
; CHECK-NEXT: RET_ReallyLR implicit $x0
%rhs:_(s64) = G_VSCALE i64 11
%lhs:_(s64) = G_VSCALE i64 9
%sum:_(s64) = nsw G_ADD %lhs(s64), %rhs(s64)
$x0 = COPY %sum(s64)
$x1 = COPY %rhs(s64)
RET_ReallyLR implicit $x0
...
---
name: mul_of_vscale
body: |
bb.1:
liveins: $x0, $x1
; CHECK-LABEL: name: mul_of_vscale
; CHECK: liveins: $x0, $x1
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: %mul:_(s64) = G_VSCALE i64 99
; CHECK-NEXT: $x0 = COPY %mul(s64)
; CHECK-NEXT: RET_ReallyLR implicit $x0
%rhs:_(s64) = G_CONSTANT i64 11
%lhs:_(s64) = G_VSCALE i64 9
%mul:_(s64) = nsw G_MUL %lhs(s64), %rhs(s64)
$x0 = COPY %mul(s64)
RET_ReallyLR implicit $x0
...
---
name: sub_of_vscale
body: |
bb.1:
liveins: $x0, $x1
; CHECK-LABEL: name: sub_of_vscale
; CHECK: liveins: $x0, $x1
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: %x:_(s64) = COPY $x0
; CHECK-NEXT: [[VSCALE:%[0-9]+]]:_(s64) = G_VSCALE i64 -9
; CHECK-NEXT: %sub:_(s64) = nsw G_ADD %x, [[VSCALE]]
; CHECK-NEXT: $x0 = COPY %sub(s64)
; CHECK-NEXT: RET_ReallyLR implicit $x0
%x:_(s64) = COPY $x0
%rhs:_(s64) = G_VSCALE i64 9
%sub:_(s64) = nsw G_SUB %x(s64), %rhs(s64)
$x0 = COPY %sub(s64)
RET_ReallyLR implicit $x0
...
---
name: shl_of_vscale
body: |
bb.1:
liveins: $x0, $x1
; CHECK-LABEL: name: shl_of_vscale
; CHECK: liveins: $x0, $x1
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: %shl:_(s64) = G_VSCALE i64 44
; CHECK-NEXT: $x0 = COPY %shl(s64)
; CHECK-NEXT: RET_ReallyLR implicit $x0
%rhs:_(s64) = G_CONSTANT i64 2
%lhs:_(s64) = G_VSCALE i64 11
%shl:_(s64) = nsw G_SHL %lhs(s64), %rhs(s64)
$x0 = COPY %shl(s64)
RET_ReallyLR implicit $x0
...
---
name: shl_of_vscale_wrong_flag
body: |
bb.1:
liveins: $x0, $x1
; CHECK-LABEL: name: shl_of_vscale_wrong_flag
; CHECK: liveins: $x0, $x1
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: %rhs:_(s64) = G_CONSTANT i64 2
; CHECK-NEXT: %lhs:_(s64) = G_VSCALE i64 11
; CHECK-NEXT: %shl:_(s64) = nuw G_SHL %lhs, %rhs(s64)
; CHECK-NEXT: $x0 = COPY %shl(s64)
; CHECK-NEXT: RET_ReallyLR implicit $x0
%rhs:_(s64) = G_CONSTANT i64 2
%lhs:_(s64) = G_VSCALE i64 11
%shl:_(s64) = nuw G_SHL %lhs(s64), %rhs(s64)
$x0 = COPY %shl(s64)
RET_ReallyLR implicit $x0