370 lines
9.7 KiB
YAML
370 lines
9.7 KiB
YAML
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
|
# RUN: llc -mtriple aarch64 -run-pass=aarch64-prelegalizer-combiner %s -o - | FileCheck %s
|
|
|
|
|
|
---
|
|
name: ZeroMinusAPlusB
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: ZeroMinusAPlusB
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %a:_(s32) = COPY $w0
|
|
; CHECK-NEXT: %b:_(s32) = COPY $w0
|
|
; CHECK-NEXT: %add:_(s32) = G_SUB %b, %a
|
|
; CHECK-NEXT: $w0 = COPY %add(s32)
|
|
; CHECK-NEXT: RET_ReallyLR implicit $w0
|
|
%x:_(s32) = COPY $w0
|
|
%a:_(s32) = COPY $w0
|
|
%b:_(s32) = COPY $w0
|
|
%zero:_(s32) = G_CONSTANT i32 0
|
|
%sub:_(s32) = G_SUB %zero, %a
|
|
%add:_(s32) = G_ADD %sub, %b
|
|
$w0 = COPY %add
|
|
RET_ReallyLR implicit $w0
|
|
|
|
...
|
|
---
|
|
name: ZeroMinusAPlusB_multi_use
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: ZeroMinusAPlusB_multi_use
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %a:_(s32) = COPY $w0
|
|
; CHECK-NEXT: %b:_(s32) = COPY $w0
|
|
; CHECK-NEXT: %zero:_(s32) = G_CONSTANT i32 0
|
|
; CHECK-NEXT: %sub:_(s32) = G_SUB %zero, %a
|
|
; CHECK-NEXT: %add:_(s32) = G_SUB %b, %a
|
|
; CHECK-NEXT: $w0 = COPY %add(s32)
|
|
; CHECK-NEXT: $w0 = COPY %sub(s32)
|
|
; CHECK-NEXT: RET_ReallyLR implicit $w0
|
|
%x:_(s32) = COPY $w0
|
|
%a:_(s32) = COPY $w0
|
|
%b:_(s32) = COPY $w0
|
|
%zero:_(s32) = G_CONSTANT i32 0
|
|
%sub:_(s32) = G_SUB %zero, %a
|
|
%add:_(s32) = G_ADD %sub, %b
|
|
$w0 = COPY %add
|
|
$w0 = COPY %sub
|
|
RET_ReallyLR implicit $w0
|
|
|
|
...
|
|
---
|
|
name: APlusZeroMiunusB
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: APlusZeroMiunusB
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %a:_(s64) = COPY $x1
|
|
; CHECK-NEXT: %b:_(s64) = COPY $x2
|
|
; CHECK-NEXT: %add:_(s64) = G_SUB %a, %b
|
|
; CHECK-NEXT: $x0 = COPY %add(s64)
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
|
%x:_(s64) = COPY $x0
|
|
%a:_(s64) = COPY $x1
|
|
%b:_(s64) = COPY $x2
|
|
%zero:_(s64) = G_CONSTANT i64 0
|
|
%sub:_(s64) = G_SUB %zero, %b
|
|
%add:_(s64) = G_ADD %a, %sub
|
|
$x0 = COPY %add
|
|
RET_ReallyLR implicit $x0
|
|
|
|
...
|
|
---
|
|
name: APlusBMinusB
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: APlusBMinusB
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %b:_(s64) = COPY $x1
|
|
; CHECK-NEXT: $x0 = COPY %b(s64)
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
|
%a:_(s64) = COPY $x0
|
|
%b:_(s64) = COPY $x1
|
|
%zero:_(s64) = G_CONSTANT i64 0
|
|
%sub:_(s64) = G_SUB %b, %a
|
|
%add:_(s64) = G_ADD %a, %sub
|
|
$x0 = COPY %add
|
|
RET_ReallyLR implicit $x0
|
|
|
|
...
|
|
---
|
|
name: BMinusAPlusA
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: BMinusAPlusA
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %b:_(s64) = COPY $x1
|
|
; CHECK-NEXT: $x0 = COPY %b(s64)
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
|
%a:_(s64) = COPY $x0
|
|
%b:_(s64) = COPY $x1
|
|
%zero:_(s64) = G_CONSTANT i64 0
|
|
%sub:_(s64) = G_SUB %b, %a
|
|
%add:_(s64) = G_ADD %sub, %a
|
|
$x0 = COPY %add
|
|
RET_ReallyLR implicit $x0
|
|
|
|
...
|
|
---
|
|
name: AMinusBPlusCMinusA
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: AMinusBPlusCMinusA
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %b:_(s64) = COPY $x1
|
|
; CHECK-NEXT: %c:_(s64) = COPY $x2
|
|
; CHECK-NEXT: %add:_(s64) = G_SUB %c, %b
|
|
; CHECK-NEXT: $x0 = COPY %add(s64)
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
|
%a:_(s64) = COPY $x0
|
|
%b:_(s64) = COPY $x1
|
|
%c:_(s64) = COPY $x2
|
|
%zero:_(s64) = G_CONSTANT i64 0
|
|
%sub2:_(s64) = G_SUB %c, %a
|
|
%sub1:_(s64) = G_SUB %a, %b
|
|
%add:_(s64) = G_ADD %sub1, %sub2
|
|
$x0 = COPY %add
|
|
RET_ReallyLR implicit $x0
|
|
|
|
...
|
|
---
|
|
name: AMinusBPlusBMinusC
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: AMinusBPlusBMinusC
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %a:_(s64) = COPY $x0
|
|
; CHECK-NEXT: %c:_(s64) = COPY $x2
|
|
; CHECK-NEXT: %add:_(s64) = G_SUB %a, %c
|
|
; CHECK-NEXT: $x0 = COPY %add(s64)
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
|
%a:_(s64) = COPY $x0
|
|
%b:_(s64) = COPY $x1
|
|
%c:_(s64) = COPY $x2
|
|
%zero:_(s64) = G_CONSTANT i64 0
|
|
%sub2:_(s64) = G_SUB %b, %c
|
|
%sub1:_(s64) = G_SUB %a, %b
|
|
%add:_(s64) = G_ADD %sub1, %sub2
|
|
$x0 = COPY %add
|
|
RET_ReallyLR implicit $x0
|
|
|
|
|
|
...
|
|
---
|
|
name: APlusBMinusAplusC
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: APlusBMinusAplusC
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %b:_(s64) = COPY $x1
|
|
; CHECK-NEXT: %c:_(s64) = COPY $x2
|
|
; CHECK-NEXT: %add:_(s64) = G_SUB %b, %c
|
|
; CHECK-NEXT: $x0 = COPY %add(s64)
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
|
%a:_(s64) = COPY $x0
|
|
%b:_(s64) = COPY $x1
|
|
%c:_(s64) = COPY $x2
|
|
%zero:_(s64) = G_CONSTANT i64 0
|
|
%add1:_(s64) = G_ADD %a, %c
|
|
%sub1:_(s64) = G_SUB %b, %add1
|
|
%add:_(s64) = G_ADD %a, %sub1
|
|
$x0 = COPY %add
|
|
RET_ReallyLR implicit $x0
|
|
|
|
...
|
|
---
|
|
name: APlusBMinusCPlusA
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: APlusBMinusCPlusA
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %b:_(s64) = COPY $x1
|
|
; CHECK-NEXT: %c:_(s64) = COPY $x2
|
|
; CHECK-NEXT: %add:_(s64) = G_SUB %b, %c
|
|
; CHECK-NEXT: $x0 = COPY %add(s64)
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
|
%a:_(s64) = COPY $x0
|
|
%b:_(s64) = COPY $x1
|
|
%c:_(s64) = COPY $x2
|
|
%zero:_(s64) = G_CONSTANT i64 0
|
|
%add1:_(s64) = G_ADD %c, %a
|
|
%sub1:_(s64) = G_SUB %b, %add1
|
|
%add:_(s64) = G_ADD %a, %sub1
|
|
$x0 = COPY %add
|
|
RET_ReallyLR implicit $x0
|
|
|
|
...
|
|
---
|
|
name: APlusBMinusCPlusA_BV
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: APlusBMinusCPlusA_BV
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %a1:_(s64) = COPY $x0
|
|
; CHECK-NEXT: %b1:_(s64) = COPY $x1
|
|
; CHECK-NEXT: %c1:_(s64) = COPY $x2
|
|
; CHECK-NEXT: %b:_(<2 x s64>) = G_BUILD_VECTOR %b1(s64), %ba:_(s64)
|
|
; CHECK-NEXT: %c:_(<2 x s64>) = G_BUILD_VECTOR %a1(s64), %c1(s64)
|
|
; CHECK-NEXT: %add:_(<2 x s64>) = G_SUB %b, %c
|
|
; CHECK-NEXT: $q0 = COPY %add(<2 x s64>)
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
|
%a1:_(s64) = COPY $x0
|
|
%b1:_(s64) = COPY $x1
|
|
%c1:_(s64) = COPY $x2
|
|
%a:_(<2 x s64>) = G_BUILD_VECTOR %a1:_(s64), %b1:_(s64)
|
|
%b:_(<2 x s64>) = G_BUILD_VECTOR %b1:_(s64), %ba:_(s64)
|
|
%c:_(<2 x s64>) = G_BUILD_VECTOR %a1:_(s64), %c1:_(s64)
|
|
%zero:_(s64) = G_CONSTANT i64 0
|
|
%add1:_(<2 x s64>) = G_ADD %c, %a
|
|
%sub1:_(<2 x s64>) = G_SUB %b, %add1
|
|
%add:_(<2 x s64>) = G_ADD %a, %sub1
|
|
$q0 = COPY %add
|
|
RET_ReallyLR implicit $x0
|
|
|
|
...
|
|
---
|
|
name: APlusC1MinusC2
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: APlusC1MinusC2
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %a:_(s64) = COPY $x0
|
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -2
|
|
; CHECK-NEXT: %sub:_(s64) = G_ADD %a, [[C]]
|
|
; CHECK-NEXT: $x0 = COPY %sub(s64)
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
|
%a:_(s64) = COPY $x0
|
|
%c1:_(s64) = G_CONSTANT i64 5
|
|
%c2:_(s64) = G_CONSTANT i64 7
|
|
%add:_(s64) = G_ADD %a, %c1
|
|
%sub:_(s64) = G_SUB %add, %c2
|
|
$x0 = COPY %sub
|
|
RET_ReallyLR implicit $x0
|
|
|
|
...
|
|
---
|
|
name: C2MinusAPlusC1
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: C2MinusAPlusC1
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %a:_(s64) = COPY $x0
|
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 5
|
|
; CHECK-NEXT: %sub:_(s64) = G_SUB [[C]], %a
|
|
; CHECK-NEXT: $x0 = COPY %sub(s64)
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
|
%a:_(s64) = COPY $x0
|
|
%c1:_(s64) = G_CONSTANT i64 4
|
|
%c2:_(s64) = G_CONSTANT i64 9
|
|
%add:_(s64) = G_ADD %a, %c1
|
|
%sub:_(s64) = G_SUB %c2, %add
|
|
$x0 = COPY %sub
|
|
RET_ReallyLR implicit $x0
|
|
|
|
...
|
|
---
|
|
name: AMinusC1MinusC2
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: AMinusC1MinusC2
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %a:_(s64) = COPY $x0
|
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 71
|
|
; CHECK-NEXT: %sub:_(s64) = G_SUB %a, [[C]]
|
|
; CHECK-NEXT: $x0 = COPY %sub(s64)
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
|
%a:_(s64) = COPY $x0
|
|
%c1:_(s64) = G_CONSTANT i64 11
|
|
%c2:_(s64) = G_CONSTANT i64 60
|
|
%sub1:_(s64) = G_SUB %a, %c1
|
|
%sub:_(s64) = G_SUB %sub1, %c2
|
|
$x0 = COPY %sub
|
|
RET_ReallyLR implicit $x0
|
|
|
|
...
|
|
---
|
|
name: C1Minus2MinusC2
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: C1Minus2MinusC2
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %a:_(s64) = COPY $x0
|
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -49
|
|
; CHECK-NEXT: %sub:_(s64) = G_SUB [[C]], %a
|
|
; CHECK-NEXT: $x0 = COPY %sub(s64)
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
|
%a:_(s64) = COPY $x0
|
|
%c1:_(s64) = G_CONSTANT i64 11
|
|
%c2:_(s64) = G_CONSTANT i64 60
|
|
%sub1:_(s64) = G_SUB %c1, %a
|
|
%sub:_(s64) = G_SUB %sub1, %c2
|
|
$x0 = COPY %sub
|
|
RET_ReallyLR implicit $x0
|
|
|
|
|
|
...
|
|
---
|
|
name: AMinusC2PlusC2
|
|
body: |
|
|
bb.0:
|
|
liveins: $w0, $w1
|
|
|
|
; CHECK-LABEL: name: AMinusC2PlusC2
|
|
; CHECK: liveins: $w0, $w1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %a:_(s64) = COPY $x0
|
|
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 43
|
|
; CHECK-NEXT: %add:_(s64) = G_ADD %a, [[C]]
|
|
; CHECK-NEXT: $x0 = COPY %add(s64)
|
|
; CHECK-NEXT: RET_ReallyLR implicit $x0
|
|
%a:_(s64) = COPY $x0
|
|
%c1:_(s64) = G_CONSTANT i64 13
|
|
%c2:_(s64) = G_CONSTANT i64 56
|
|
%sub:_(s64) = G_SUB %a, %c1
|
|
%add:_(s64) = G_ADD %sub, %c2
|
|
$x0 = COPY %add
|
|
RET_ReallyLR implicit $x0
|
|
|