forked from OSchip/llvm-project
[ARM] Masked load and store and predicate tests. NFC
llvm-svn: 370325
This commit is contained in:
parent
f13b0e3ed8
commit
e9211b764c
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -384,4 +384,24 @@ entry:
|
||||||
ret <2 x i64> %s
|
ret <2 x i64> %s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
define arm_aapcs_vfpcc <4 x i32> @vpnot_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
|
||||||
|
; CHECK-LABEL: vpnot_v4i1:
|
||||||
|
; CHECK: @ %bb.0: @ %entry
|
||||||
|
; CHECK-NEXT: vcmp.s32 lt, q0, zr
|
||||||
|
; CHECK-NEXT: vpst
|
||||||
|
; CHECK-NEXT: vcmpt.s32 gt, q1, zr
|
||||||
|
; CHECK-NEXT: vpnot
|
||||||
|
; CHECK-NEXT: vpst
|
||||||
|
; CHECK-NEXT: vcmpt.i32 eq, q2, zr
|
||||||
|
; CHECK-NEXT: vpsel q0, q0, q1
|
||||||
|
; CHECK-NEXT: bx lr
|
||||||
|
entry:
|
||||||
|
%c1 = icmp slt <4 x i32> %a, zeroinitializer
|
||||||
|
%c2 = icmp sgt <4 x i32> %b, zeroinitializer
|
||||||
|
%c3 = icmp eq <4 x i32> %c, zeroinitializer
|
||||||
|
%o1 = and <4 x i1> %c1, %c2
|
||||||
|
%o2 = xor <4 x i1> %o1, <i1 -1, i1 -1, i1 -1, i1 -1>
|
||||||
|
%o = and <4 x i1> %c3, %o2
|
||||||
|
%s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
|
||||||
|
ret <4 x i32> %s
|
||||||
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||||||
# RUN: llc -run-pass arm-mve-vpt %s -o - | FileCheck %s
|
# RUN: llc -run-pass arm-mve-vpt %s -o - | FileCheck %s
|
||||||
|
|
||||||
--- |
|
--- |
|
||||||
|
@ -61,9 +62,14 @@ body: |
|
||||||
bb.0.entry:
|
bb.0.entry:
|
||||||
liveins: $q0, $q1, $q2, $r0
|
liveins: $q0, $q1, $q2, $r0
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: test_vminnmq_m_f32_v2
|
||||||
|
; CHECK: liveins: $q0, $q1, $q2, $r0
|
||||||
|
; CHECK: $vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit killed $q1, implicit killed $q2, implicit killed $vpr, implicit killed $q0 {
|
||||||
; CHECK: MVE_VPST 8, implicit-def $p0
|
; CHECK: MVE_VPST 8, implicit-def $p0
|
||||||
; CHECK-NEXT: $q0 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, killed renamable $q2, 1, killed renamable $vpr, killed renamable $q0
|
; CHECK: renamable $q0 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, killed renamable $q2, 1, killed renamable $vpr, killed renamable $q0
|
||||||
|
; CHECK: tBX_RET 14, $noreg, implicit internal $q0
|
||||||
|
; CHECK: }
|
||||||
$vpr = VMSR_P0 killed $r0, 14, $noreg
|
$vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||||
renamable $q0 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, killed renamable $q2, 1, killed renamable $vpr, killed renamable $q0
|
renamable $q0 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, killed renamable $q2, 1, killed renamable $vpr, killed renamable $q0
|
||||||
tBX_RET 14, $noreg, implicit $q0
|
tBX_RET 14, $noreg, implicit $q0
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||||||
# RUN: llc -run-pass arm-mve-vpt %s -o - | FileCheck %s
|
# RUN: llc -run-pass arm-mve-vpt %s -o - | FileCheck %s
|
||||||
|
|
||||||
--- |
|
--- |
|
||||||
|
@ -64,10 +65,16 @@ body: |
|
||||||
bb.0.entry:
|
bb.0.entry:
|
||||||
liveins: $q0, $q1, $q2, $q3, $r0
|
liveins: $q0, $q1, $q2, $q3, $r0
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: test_vminnmq_m_f32_v2
|
||||||
|
; CHECK: liveins: $q0, $q1, $q2, $q3, $r0
|
||||||
|
; CHECK: $vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit-def dead $q1, implicit-def $d2, implicit-def $s4, implicit-def $s5, implicit-def $d3, implicit-def $s6, implicit-def $s7, implicit killed $q2, implicit killed $q3, implicit killed $vpr, implicit killed $q0, implicit killed $q1 {
|
||||||
; CHECK: MVE_VPST 4, implicit-def $p0
|
; CHECK: MVE_VPST 4, implicit-def $p0
|
||||||
; CHECK-NEXT: renamable $q0 = nnan ninf nsz MVE_VMINNMf32
|
; CHECK: renamable $q0 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q2, renamable $q3, 1, renamable $vpr, killed renamable $q0
|
||||||
; CHECK-NEXT: renamable $q1 = nnan ninf nsz MVE_VMINNMf32
|
; CHECK: renamable $q1 = nnan ninf nsz MVE_VMINNMf32 internal killed renamable $q0, killed renamable $q3, 1, killed renamable $vpr, killed renamable $q1
|
||||||
|
; CHECK: $q0 = MVE_VORR internal killed $q1, internal killed $q1, 0, $noreg, internal undef $q0
|
||||||
|
; CHECK: }
|
||||||
|
; CHECK: tBX_RET 14, $noreg, implicit $q0
|
||||||
$vpr = VMSR_P0 killed $r0, 14, $noreg
|
$vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||||
renamable $q0 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q2, renamable $q3, 1, renamable $vpr, killed renamable $q0
|
renamable $q0 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q2, renamable $q3, 1, renamable $vpr, killed renamable $q0
|
||||||
renamable $q1 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q0, killed renamable $q3, 1, killed renamable $vpr, killed renamable $q1
|
renamable $q1 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q0, killed renamable $q3, 1, killed renamable $vpr, killed renamable $q1
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||||||
# RUN: llc -run-pass arm-mve-vpt %s -o - | FileCheck %s
|
# RUN: llc -run-pass arm-mve-vpt %s -o - | FileCheck %s
|
||||||
|
|
||||||
--- |
|
--- |
|
||||||
|
@ -65,12 +66,18 @@ body: |
|
||||||
bb.0.entry:
|
bb.0.entry:
|
||||||
liveins: $q0, $q1, $q2, $q3, $r0
|
liveins: $q0, $q1, $q2, $q3, $r0
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: test_vminnmq_m_f32_v2
|
||||||
|
; CHECK: liveins: $q0, $q1, $q2, $q3, $r0
|
||||||
|
; CHECK: $vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def dead $q2, implicit-def $d4, implicit-def $s8, implicit-def $s9, implicit-def $d5, implicit-def $s10, implicit-def $s11, implicit-def dead $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit-def $q1, implicit-def $d2, implicit-def $s4, implicit-def $s5, implicit-def $d3, implicit-def $s6, implicit-def $s7, implicit killed $q2, implicit killed $q3, implicit killed $vpr, implicit killed $q0, implicit killed $q1 {
|
||||||
; CHECK: MVE_VPST 1, implicit-def $p0
|
; CHECK: MVE_VPST 1, implicit-def $p0
|
||||||
; CHECK-NEXT: renamable $q2 = nnan ninf nsz MVE_VMINNMf32
|
; CHECK: renamable $q2 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q2, renamable $q3, 1, renamable $vpr, undef renamable $q2
|
||||||
; CHECK-NEXT: renamable $q2 = nnan ninf nsz MVE_VMINNMf32
|
; CHECK: renamable $q2 = nnan ninf nsz MVE_VMINNMf32 internal killed renamable $q2, internal renamable $q2, 1, renamable $vpr, internal undef renamable $q2
|
||||||
; CHECK-NEXT: renamable $q0 = nnan ninf nsz MVE_VMINNMf32
|
; CHECK: renamable $q0 = nnan ninf nsz MVE_VMINNMf32 internal killed renamable $q2, renamable $q3, 1, renamable $vpr, killed renamable $q0
|
||||||
; CHECK-NEXT: renamable $q1 = nnan ninf nsz MVE_VMINNMf32
|
; CHECK: renamable $q1 = nnan ninf nsz MVE_VMINNMf32 internal killed renamable $q0, killed renamable $q3, 1, killed renamable $vpr, killed renamable $q1
|
||||||
|
; CHECK: }
|
||||||
|
; CHECK: $q0 = MVE_VORR killed $q1, killed $q1, 0, $noreg, undef $q0
|
||||||
|
; CHECK: tBX_RET 14, $noreg, implicit $q0
|
||||||
$vpr = VMSR_P0 killed $r0, 14, $noreg
|
$vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||||
renamable $q2 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q2, renamable $q3, 1, renamable $vpr, undef renamable $q2
|
renamable $q2 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q2, renamable $q3, 1, renamable $vpr, undef renamable $q2
|
||||||
renamable $q2 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q2, renamable $q2, 1, renamable $vpr, undef renamable $q2
|
renamable $q2 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q2, renamable $q2, 1, renamable $vpr, undef renamable $q2
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||||||
# RUN: llc -run-pass arm-mve-vpt %s -o - | FileCheck %s
|
# RUN: llc -run-pass arm-mve-vpt %s -o - | FileCheck %s
|
||||||
|
|
||||||
--- |
|
--- |
|
||||||
|
@ -66,18 +67,22 @@ body: |
|
||||||
bb.0.entry:
|
bb.0.entry:
|
||||||
liveins: $q0, $q1, $q2, $q3, $r0
|
liveins: $q0, $q1, $q2, $q3, $r0
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: test_vminnmq_m_f32_v2
|
||||||
|
; CHECK: liveins: $q0, $q1, $q2, $q3, $r0
|
||||||
|
; CHECK: $vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def dead $q2, implicit-def $d4, implicit-def $s8, implicit-def $s9, implicit-def $d5, implicit-def $s10, implicit-def $s11, implicit-def $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit killed $q2, implicit $q3, implicit $vpr, implicit killed $q0 {
|
||||||
; CHECK: MVE_VPST 1, implicit-def $p0
|
; CHECK: MVE_VPST 1, implicit-def $p0
|
||||||
; CHECK-NEXT: renamable $q2 = nnan ninf nsz MVE_VMINNMf32
|
; CHECK: renamable $q2 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q2, renamable $q3, 1, renamable $vpr, undef renamable $q2
|
||||||
; CHECK-NEXT: renamable $q2 = nnan ninf nsz MVE_VMINNMf32
|
; CHECK: renamable $q2 = nnan ninf nsz MVE_VMINNMf32 internal killed renamable $q2, internal renamable $q2, 1, renamable $vpr, internal undef renamable $q2
|
||||||
; CHECK-NEXT: renamable $q0 = nnan ninf nsz MVE_VMINNMf32
|
; CHECK: renamable $q0 = nnan ninf nsz MVE_VMINNMf32 internal killed renamable $q2, renamable $q3, 1, renamable $vpr, killed renamable $q0
|
||||||
; CHECK-NEXT: renamable $q0 = nnan ninf nsz MVE_VMINNMf32
|
; CHECK: renamable $q0 = nnan ninf nsz MVE_VMINNMf32 internal killed renamable $q0, renamable $q3, 1, renamable $vpr, internal undef renamable $q0
|
||||||
; CHECK-NEXT: }
|
; CHECK: }
|
||||||
; CHECK-NEXT: BUNDLE {{.*}} {
|
; CHECK: BUNDLE implicit-def $p0, implicit-def dead $q1, implicit-def $d2, implicit-def $s4, implicit-def $s5, implicit-def $d3, implicit-def $s6, implicit-def $s7, implicit-def $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit killed $q0, implicit killed $q3, implicit killed $vpr, implicit killed $q1 {
|
||||||
; CHECK-NEXT: MVE_VPST 8, implicit-def $p0
|
; CHECK: MVE_VPST 8, implicit-def $p0
|
||||||
; CHECK-NEXT: renamable $q1 = nnan ninf nsz MVE_VMINNMf32
|
; CHECK: renamable $q1 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q0, killed renamable $q3, 1, killed renamable $vpr, killed renamable $q1
|
||||||
; CHECK-NEXT: $q0 = MVE_VORR
|
; CHECK: $q0 = MVE_VORR internal killed $q1, internal killed $q1, 0, $noreg, undef $q0
|
||||||
; CHECK-NEXT: }
|
; CHECK: }
|
||||||
|
; CHECK: tBX_RET 14, $noreg, implicit $q0
|
||||||
$vpr = VMSR_P0 killed $r0, 14, $noreg
|
$vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||||
renamable $q2 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q2, renamable $q3, 1, renamable $vpr, undef renamable $q2
|
renamable $q2 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q2, renamable $q3, 1, renamable $vpr, undef renamable $q2
|
||||||
renamable $q2 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q2, renamable $q2, 1, renamable $vpr, undef renamable $q2
|
renamable $q2 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q2, renamable $q2, 1, renamable $vpr, undef renamable $q2
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||||||
# RUN: llc -run-pass arm-mve-vpt %s -o - | FileCheck %s
|
# RUN: llc -run-pass arm-mve-vpt %s -o - | FileCheck %s
|
||||||
|
|
||||||
--- |
|
--- |
|
||||||
|
@ -63,19 +64,22 @@ body: |
|
||||||
bb.0.entry:
|
bb.0.entry:
|
||||||
liveins: $q0, $q1, $q2, $r0
|
liveins: $q0, $q1, $q2, $r0
|
||||||
|
|
||||||
; CHECK: BUNDLE {{.*}} {
|
; CHECK-LABEL: name: test_vminnmq_m_f32_v2
|
||||||
; CHECK-NEXT: MVE_VPST 4, implicit-def $p0
|
; CHECK: liveins: $q0, $q1, $q2, $r0
|
||||||
; CHECK-NEXT: renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, renamable $vpr, killed renamable $q3
|
; CHECK: $vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||||
; CHECK-NEXT: renamable $q1 = nnan ninf nsz MVE_VMINNMf32 internal killed renamable $q3, internal renamable $q3, 1, renamable $vpr, undef renamable $q1
|
; CHECK: $q3 = MVE_VORR $q0, $q0, 0, $noreg, undef $q3
|
||||||
; CHECK-NEXT: $q3 = MVE_VORR $q0, $q0, 0, $noreg, internal undef $q3
|
; CHECK: BUNDLE implicit-def $p0, implicit-def $q3, implicit-def $d6, implicit-def $s12, implicit-def $s13, implicit-def $d7, implicit-def $s14, implicit-def $s15, implicit-def $q1, implicit-def $d2, implicit-def $s4, implicit-def $s5, implicit-def $d3, implicit-def $s6, implicit-def $s7, implicit killed $q1, implicit $q2, implicit $vpr, implicit killed $q3, implicit $q0 {
|
||||||
; CHECK-NEXT: }
|
; CHECK: MVE_VPST 4, implicit-def $p0
|
||||||
; CHECK-NEXT: BUNDLE {{.*}} {
|
; CHECK: renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, renamable $vpr, killed renamable $q3
|
||||||
; CHECK-NEXT: MVE_VPST 4, implicit-def $p0
|
; CHECK: renamable $q1 = nnan ninf nsz MVE_VMINNMf32 internal killed renamable $q3, internal renamable $q3, 1, renamable $vpr, undef renamable $q1
|
||||||
; CHECK-NEXT: renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, renamable $vpr, killed renamable $q3
|
; CHECK: $q3 = MVE_VORR $q0, $q0, 0, $noreg, internal undef $q3
|
||||||
; CHECK-NEXT: renamable $q0 = nnan ninf nsz MVE_VMINNMf32 internal killed renamable $q3, killed renamable $q2, 1, killed renamable $vpr, killed renamable $q0
|
; CHECK: }
|
||||||
; CHECK-NEXT: tBX_RET 14, $noreg, implicit internal $q0
|
; CHECK: BUNDLE implicit-def $p0, implicit-def dead $q3, implicit-def $d6, implicit-def $s12, implicit-def $s13, implicit-def $d7, implicit-def $s14, implicit-def $s15, implicit-def $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit killed $q1, implicit killed $q2, implicit killed $vpr, implicit killed $q3, implicit killed $q0 {
|
||||||
; CHECK-NEXT: }
|
; CHECK: MVE_VPST 4, implicit-def $p0
|
||||||
|
; CHECK: renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, renamable $vpr, killed renamable $q3
|
||||||
|
; CHECK: renamable $q0 = nnan ninf nsz MVE_VMINNMf32 internal killed renamable $q3, killed renamable $q2, 1, killed renamable $vpr, killed renamable $q0
|
||||||
|
; CHECK: tBX_RET 14, $noreg, implicit internal $q0
|
||||||
|
; CHECK: }
|
||||||
$vpr = VMSR_P0 killed $r0, 14, $noreg
|
$vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||||
$q3 = MVE_VORR $q0, $q0, 0, $noreg, undef $q3
|
$q3 = MVE_VORR $q0, $q0, 0, $noreg, undef $q3
|
||||||
renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, renamable $vpr, killed renamable $q3
|
renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, renamable $vpr, killed renamable $q3
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||||||
# RUN: llc -run-pass arm-mve-vpt %s -o - | FileCheck %s
|
# RUN: llc -run-pass arm-mve-vpt %s -o - | FileCheck %s
|
||||||
|
|
||||||
--- |
|
--- |
|
||||||
|
@ -63,17 +64,20 @@ body: |
|
||||||
bb.0.entry:
|
bb.0.entry:
|
||||||
liveins: $q0, $q1, $q2, $r0, $r1
|
liveins: $q0, $q1, $q2, $r0, $r1
|
||||||
|
|
||||||
; CHECK: BUNDLE {{.*}} {
|
; CHECK-LABEL: name: test_vminnmq_m_f32_v2
|
||||||
; CHECK-NEXT: MVE_VPST 8, implicit-def $p0
|
; CHECK: liveins: $q0, $q1, $q2, $r0, $r1
|
||||||
; CHECK-NEXT: renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, killed renamable $vpr, killed renamable $q3
|
; CHECK: $vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||||
; CHECK-NEXT: $vpr = VMSR_P0 killed $r1, 14, $noreg
|
; CHECK: $q3 = MVE_VORR $q0, $q0, 0, $noreg, undef $q3
|
||||||
; CHECK-NEXT: }
|
; CHECK: BUNDLE implicit-def $p0, implicit-def $q3, implicit-def $d6, implicit-def $s12, implicit-def $s13, implicit-def $d7, implicit-def $s14, implicit-def $s15, implicit-def $vpr, implicit killed $q1, implicit $q2, implicit killed $vpr, implicit killed $q3, implicit killed $r1 {
|
||||||
; CHECK-NEXT: BUNDLE {{.*}} {
|
; CHECK: MVE_VPST 8, implicit-def $p0
|
||||||
; CHECK-NEXT: MVE_VPST 8, implicit-def $p0
|
; CHECK: renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, killed renamable $vpr, killed renamable $q3
|
||||||
; CHECK-NEXT: renamable $q0 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q3, killed renamable $q2, 1, killed renamable $vpr, killed renamable $q0
|
; CHECK: $vpr = VMSR_P0 killed $r1, 14, $noreg
|
||||||
; CHECK-NEXT: tBX_RET 14, $noreg, implicit internal $q0
|
; CHECK: }
|
||||||
; CHECK-NEXT: }
|
; CHECK: BUNDLE implicit-def $p0, implicit-def $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit killed $q3, implicit killed $q2, implicit killed $vpr, implicit killed $q0 {
|
||||||
|
; CHECK: MVE_VPST 8, implicit-def $p0
|
||||||
|
; CHECK: renamable $q0 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q3, killed renamable $q2, 1, killed renamable $vpr, killed renamable $q0
|
||||||
|
; CHECK: tBX_RET 14, $noreg, implicit internal $q0
|
||||||
|
; CHECK: }
|
||||||
$vpr = VMSR_P0 killed $r0, 14, $noreg
|
$vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||||
$q3 = MVE_VORR $q0, $q0, 0, $noreg, undef $q3
|
$q3 = MVE_VORR $q0, $q0, 0, $noreg, undef $q3
|
||||||
renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, killed renamable $vpr, killed renamable $q3
|
renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, killed renamable $vpr, killed renamable $q3
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||||||
|
# RUN: llc -run-pass arm-mve-vpt %s -o - | FileCheck %s
|
||||||
|
|
||||||
|
--- |
|
||||||
|
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||||
|
target triple = "thumbv8.1m.main-arm-none-eabi"
|
||||||
|
|
||||||
|
define hidden arm_aapcs_vfpcc <4 x float> @test_vminnmq_m_f32_v2(<4 x float> %inactive1, <4 x float> %a, <4 x float> %b, i16 zeroext %p) local_unnamed_addr #0 {
|
||||||
|
entry:
|
||||||
|
%conv.i = zext i16 %p to i32
|
||||||
|
%0 = tail call nnan ninf nsz <4 x float> @llvm.arm.mve.vminnm.m.v4f32.v4f32.v4f32.v4f32.i32(<4 x float> %inactive1, <4 x float> %a, <4 x float> %b, i32 %conv.i) #2
|
||||||
|
%1 = tail call nnan ninf nsz <4 x float> @llvm.arm.mve.vminnm.m.v4f32.v4f32.v4f32.v4f32.i32(<4 x float> undef, <4 x float> %0, <4 x float> %0, i32 %conv.i) #2
|
||||||
|
br label %bb2
|
||||||
|
bb2:
|
||||||
|
%2 = tail call nnan ninf nsz <4 x float> @llvm.arm.mve.vminnm.m.v4f32.v4f32.v4f32.v4f32.i32(<4 x float> %inactive1, <4 x float> %1, <4 x float> %b, i32 %conv.i) #2
|
||||||
|
%3 = tail call nnan ninf nsz <4 x float> @llvm.arm.mve.vminnm.m.v4f32.v4f32.v4f32.v4f32.i32(<4 x float> %inactive1, <4 x float> %2, <4 x float> %b, i32 %conv.i) #2
|
||||||
|
ret <4 x float> %3
|
||||||
|
}
|
||||||
|
|
||||||
|
declare <4 x float> @llvm.arm.mve.vminnm.m.v4f32.v4f32.v4f32.v4f32.i32(<4 x float>, <4 x float>, <4 x float>, i32) #1
|
||||||
|
|
||||||
|
attributes #0 = { nounwind readnone "correctly-rounded-divide-sqrt-fp-math"="false" "denormal-fp-math"="preserve-sign" "disable-tail-calls"="false" "less-precise-fpmad"="false" "min-legal-vector-width"="128" "no-frame-pointer-elim"="false" "no-infs-fp-math"="true" "no-jump-tables"="false" "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" "target-features"="+armv8.1-m.main,+hwdiv,+mve.fp,+ras,+thumb-mode" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
||||||
|
attributes #1 = { nounwind readnone }
|
||||||
|
attributes #2 = { nounwind }
|
||||||
|
|
||||||
|
...
|
||||||
|
---
|
||||||
|
name: test_vminnmq_m_f32_v2
|
||||||
|
alignment: 2
|
||||||
|
exposesReturnsTwice: false
|
||||||
|
legalized: false
|
||||||
|
regBankSelected: false
|
||||||
|
selected: false
|
||||||
|
failedISel: false
|
||||||
|
tracksRegLiveness: true
|
||||||
|
hasWinCFI: false
|
||||||
|
registers: []
|
||||||
|
liveins:
|
||||||
|
- { reg: '$q0', virtual-reg: '' }
|
||||||
|
- { reg: '$q1', virtual-reg: '' }
|
||||||
|
- { reg: '$q2', virtual-reg: '' }
|
||||||
|
- { reg: '$r0', virtual-reg: '' }
|
||||||
|
frameInfo:
|
||||||
|
isFrameAddressTaken: false
|
||||||
|
isReturnAddressTaken: false
|
||||||
|
hasStackMap: false
|
||||||
|
hasPatchPoint: false
|
||||||
|
stackSize: 0
|
||||||
|
offsetAdjustment: 0
|
||||||
|
maxAlignment: 0
|
||||||
|
adjustsStack: false
|
||||||
|
hasCalls: false
|
||||||
|
stackProtector: ''
|
||||||
|
maxCallFrameSize: 0
|
||||||
|
cvBytesOfCalleeSavedRegisters: 0
|
||||||
|
hasOpaqueSPAdjustment: false
|
||||||
|
hasVAStart: false
|
||||||
|
hasMustTailInVarArgFunc: false
|
||||||
|
localFrameSize: 0
|
||||||
|
savePoint: ''
|
||||||
|
restorePoint: ''
|
||||||
|
fixedStack: []
|
||||||
|
stack: []
|
||||||
|
constants: []
|
||||||
|
body: |
|
||||||
|
; CHECK-LABEL: name: test_vminnmq_m_f32_v2
|
||||||
|
; CHECK: bb.0.entry:
|
||||||
|
; CHECK: successors: %bb.1(0x80000000)
|
||||||
|
; CHECK: liveins: $q0, $q1, $q2, $r0
|
||||||
|
; CHECK: $vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||||
|
; CHECK: $q3 = MVE_VORR $q0, $q0, 0, $noreg, undef $q3
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def dead $q3, implicit-def $d6, implicit-def $s12, implicit-def $s13, implicit-def $d7, implicit-def $s14, implicit-def $s15, implicit-def $q1, implicit-def $d2, implicit-def $s4, implicit-def $s5, implicit-def $d3, implicit-def $s6, implicit-def $s7, implicit-def $vpr, implicit killed $q1, implicit $q2, implicit killed $vpr, implicit killed $q3 {
|
||||||
|
; CHECK: MVE_VPST 4, implicit-def $p0
|
||||||
|
; CHECK: renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, renamable $vpr, killed renamable $q3
|
||||||
|
; CHECK: renamable $q1 = nnan ninf nsz MVE_VMINNMf32 internal killed renamable $q3, internal renamable $q3, 1, renamable $vpr, undef renamable $q1
|
||||||
|
; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
; CHECK: }
|
||||||
|
; CHECK: bb.1.bb2:
|
||||||
|
; CHECK: liveins: $q0, $q1, $q2, $q3, $vpr
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def dead $q3, implicit-def $d6, implicit-def $s12, implicit-def $s13, implicit-def $d7, implicit-def $s14, implicit-def $s15, implicit-def $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit killed $q1, implicit killed $q2, implicit killed $vpr, implicit killed $q3, implicit killed $q0 {
|
||||||
|
; CHECK: MVE_VPST 4, implicit-def $p0
|
||||||
|
; CHECK: renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, renamable $vpr, killed renamable $q3
|
||||||
|
; CHECK: renamable $q0 = nnan ninf nsz MVE_VMINNMf32 internal killed renamable $q3, killed renamable $q2, 1, killed renamable $vpr, killed renamable $q0
|
||||||
|
; CHECK: tBX_RET 14, $noreg, implicit internal $q0
|
||||||
|
; CHECK: }
|
||||||
|
bb.0.entry:
|
||||||
|
liveins: $q0, $q1, $q2, $r0
|
||||||
|
|
||||||
|
$vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||||
|
$q3 = MVE_VORR $q0, $q0, 0, $noreg, undef $q3
|
||||||
|
renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, renamable $vpr, killed renamable $q3
|
||||||
|
renamable $q1 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q3, renamable $q3, 1, renamable $vpr, undef renamable $q1
|
||||||
|
renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
|
||||||
|
bb.1.bb2:
|
||||||
|
liveins: $q0, $q1, $q2, $q3, $vpr
|
||||||
|
|
||||||
|
renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, renamable $vpr, killed renamable $q3
|
||||||
|
renamable $q0 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q3, killed renamable $q2, 1, killed renamable $vpr, killed renamable $q0
|
||||||
|
tBX_RET 14, $noreg, implicit $q0
|
||||||
|
|
||||||
|
...
|
|
@ -0,0 +1,97 @@
|
||||||
|
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||||||
|
# RUN: llc -run-pass arm-mve-vpt %s -o - | FileCheck %s
|
||||||
|
|
||||||
|
--- |
|
||||||
|
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||||
|
target triple = "thumbv8.1m.main-arm-none-eabi"
|
||||||
|
|
||||||
|
define hidden arm_aapcs_vfpcc <4 x float> @test_vminnmq_m_f32_v2(<4 x float> %inactive1, <4 x float> %a, <4 x float> %b, i16 zeroext %p) local_unnamed_addr #0 {
|
||||||
|
entry:
|
||||||
|
%conv.i = zext i16 %p to i32
|
||||||
|
%0 = tail call nnan ninf nsz <4 x float> @llvm.arm.mve.vminnm.m.v4f32.v4f32.v4f32.v4f32.i32(<4 x float> %inactive1, <4 x float> %a, <4 x float> %b, i32 %conv.i) #2
|
||||||
|
%1 = tail call nnan ninf nsz <4 x float> @llvm.arm.mve.vminnm.m.v4f32.v4f32.v4f32.v4f32.i32(<4 x float> undef, <4 x float> %0, <4 x float> %0, i32 %conv.i) #2
|
||||||
|
%2 = tail call nnan ninf nsz <4 x float> @llvm.arm.mve.vminnm.m.v4f32.v4f32.v4f32.v4f32.i32(<4 x float> %inactive1, <4 x float> %1, <4 x float> %b, i32 %conv.i) #2
|
||||||
|
%3 = tail call nnan ninf nsz <4 x float> @llvm.arm.mve.vminnm.m.v4f32.v4f32.v4f32.v4f32.i32(<4 x float> %inactive1, <4 x float> %2, <4 x float> %b, i32 %conv.i) #2
|
||||||
|
ret <4 x float> %3
|
||||||
|
}
|
||||||
|
|
||||||
|
declare <4 x float> @llvm.arm.mve.vminnm.m.v4f32.v4f32.v4f32.v4f32.i32(<4 x float>, <4 x float>, <4 x float>, i32) #1
|
||||||
|
|
||||||
|
attributes #0 = { nounwind readnone "correctly-rounded-divide-sqrt-fp-math"="false" "denormal-fp-math"="preserve-sign" "disable-tail-calls"="false" "less-precise-fpmad"="false" "min-legal-vector-width"="128" "no-frame-pointer-elim"="false" "no-infs-fp-math"="true" "no-jump-tables"="false" "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" "target-features"="+armv8.1-m.main,+hwdiv,+mve.fp,+ras,+thumb-mode" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
||||||
|
attributes #1 = { nounwind readnone }
|
||||||
|
attributes #2 = { nounwind }
|
||||||
|
|
||||||
|
...
|
||||||
|
---
|
||||||
|
name: test_vminnmq_m_f32_v2
|
||||||
|
alignment: 2
|
||||||
|
exposesReturnsTwice: false
|
||||||
|
legalized: false
|
||||||
|
regBankSelected: false
|
||||||
|
selected: false
|
||||||
|
failedISel: false
|
||||||
|
tracksRegLiveness: true
|
||||||
|
hasWinCFI: false
|
||||||
|
registers: []
|
||||||
|
liveins:
|
||||||
|
- { reg: '$q0', virtual-reg: '' }
|
||||||
|
- { reg: '$q1', virtual-reg: '' }
|
||||||
|
- { reg: '$q2', virtual-reg: '' }
|
||||||
|
- { reg: '$r0', virtual-reg: '' }
|
||||||
|
frameInfo:
|
||||||
|
isFrameAddressTaken: false
|
||||||
|
isReturnAddressTaken: false
|
||||||
|
hasStackMap: false
|
||||||
|
hasPatchPoint: false
|
||||||
|
stackSize: 0
|
||||||
|
offsetAdjustment: 0
|
||||||
|
maxAlignment: 0
|
||||||
|
adjustsStack: false
|
||||||
|
hasCalls: false
|
||||||
|
stackProtector: ''
|
||||||
|
maxCallFrameSize: 0
|
||||||
|
cvBytesOfCalleeSavedRegisters: 0
|
||||||
|
hasOpaqueSPAdjustment: false
|
||||||
|
hasVAStart: false
|
||||||
|
hasMustTailInVarArgFunc: false
|
||||||
|
localFrameSize: 0
|
||||||
|
savePoint: ''
|
||||||
|
restorePoint: ''
|
||||||
|
fixedStack: []
|
||||||
|
stack: []
|
||||||
|
constants: []
|
||||||
|
body: |
|
||||||
|
bb.0.entry:
|
||||||
|
liveins: $q0, $q1, $q2, $r0
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: test_vminnmq_m_f32_v2
|
||||||
|
; CHECK: liveins: $q0, $q1, $q2, $r0
|
||||||
|
; CHECK: $vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||||
|
; CHECK: $q3 = MVE_VORR $q0, $q0, 0, $noreg, undef $q3
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def $q3, implicit-def $d6, implicit-def $s12, implicit-def $s13, implicit-def $d7, implicit-def $s14, implicit-def $s15, implicit-def $vpr, implicit killed $q1, implicit $q2, implicit killed $vpr, implicit killed $q3 {
|
||||||
|
; CHECK: MVE_VPST 8, implicit-def $p0
|
||||||
|
; CHECK: renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, renamable $vpr, killed renamable $q3
|
||||||
|
; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
; CHECK: }
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def $q1, implicit-def $d2, implicit-def $s4, implicit-def $s5, implicit-def $d3, implicit-def $s6, implicit-def $s7, implicit-def $q3, implicit-def $d6, implicit-def $s12, implicit-def $s13, implicit-def $d7, implicit-def $s14, implicit-def $s15, implicit killed $q3, implicit $vpr, implicit undef $q1, implicit $q0 {
|
||||||
|
; CHECK: MVE_VPST 8, implicit-def $p0
|
||||||
|
; CHECK: renamable $q1 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q3, renamable $q3, 1, renamable $vpr, undef renamable $q1
|
||||||
|
; CHECK: $q3 = MVE_VORR $q0, $q0, 0, $noreg, undef $q3
|
||||||
|
; CHECK: }
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def dead $q3, implicit-def $d6, implicit-def $s12, implicit-def $s13, implicit-def $d7, implicit-def $s14, implicit-def $s15, implicit-def $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit killed $q1, implicit killed $q2, implicit killed $vpr, implicit killed $q3, implicit killed $q0 {
|
||||||
|
; CHECK: MVE_VPST 4, implicit-def $p0
|
||||||
|
; CHECK: renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, renamable $vpr, killed renamable $q3
|
||||||
|
; CHECK: renamable $q0 = nnan ninf nsz MVE_VMINNMf32 internal killed renamable $q3, killed renamable $q2, 1, killed renamable $vpr, killed renamable $q0
|
||||||
|
; CHECK: tBX_RET 14, $noreg, implicit internal $q0
|
||||||
|
; CHECK: }
|
||||||
|
$vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||||
|
$q3 = MVE_VORR $q0, $q0, 0, $noreg, undef $q3
|
||||||
|
renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, renamable $vpr, killed renamable $q3
|
||||||
|
renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
renamable $q1 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q3, renamable $q3, 1, renamable $vpr, undef renamable $q1
|
||||||
|
$q3 = MVE_VORR $q0, $q0, 0, $noreg, undef $q3
|
||||||
|
renamable $q3 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q1, renamable $q2, 1, renamable $vpr, killed renamable $q3
|
||||||
|
renamable $q0 = nnan ninf nsz MVE_VMINNMf32 killed renamable $q3, killed renamable $q2, 1, killed renamable $vpr, killed renamable $q0
|
||||||
|
tBX_RET 14, $noreg, implicit $q0
|
||||||
|
|
||||||
|
...
|
|
@ -0,0 +1,272 @@
|
||||||
|
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||||||
|
# RUN: llc -mtriple=thumbv8.1-m.main-none-eabi -mattr=+mve -run-pass arm-mve-vpt %s -o - | FileCheck %s
|
||||||
|
|
||||||
|
--- |
|
||||||
|
|
||||||
|
define arm_aapcs_vfpcc <4 x i32> @vpnot(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
|
||||||
|
entry:
|
||||||
|
%0 = icmp slt <4 x i32> %a, zeroinitializer
|
||||||
|
%c2 = icmp sgt <4 x i32> %b, zeroinitializer
|
||||||
|
%c3 = icmp eq <4 x i32> %c, zeroinitializer
|
||||||
|
%o1 = and <4 x i1> %0, %c2
|
||||||
|
%o2 = xor <4 x i1> %o1, <i1 true, i1 true, i1 true, i1 true>
|
||||||
|
%o = and <4 x i1> %c3, %o2
|
||||||
|
%s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
|
||||||
|
ret <4 x i32> %s
|
||||||
|
}
|
||||||
|
|
||||||
|
define arm_aapcs_vfpcc <4 x i32> @vpnot_end(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
|
||||||
|
entry:
|
||||||
|
%0 = icmp slt <4 x i32> %a, zeroinitializer
|
||||||
|
%c2 = icmp sgt <4 x i32> %b, zeroinitializer
|
||||||
|
%c3 = icmp eq <4 x i32> %c, zeroinitializer
|
||||||
|
%o1 = and <4 x i1> %0, %c2
|
||||||
|
%o2 = xor <4 x i1> %o1, <i1 true, i1 true, i1 true, i1 true>
|
||||||
|
br label %bb2
|
||||||
|
bb2:
|
||||||
|
%o = and <4 x i1> %c3, %o2
|
||||||
|
%s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
|
||||||
|
ret <4 x i32> %s
|
||||||
|
}
|
||||||
|
|
||||||
|
define arm_aapcs_vfpcc <4 x i32> @vpnot_two(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
|
||||||
|
entry:
|
||||||
|
unreachable
|
||||||
|
}
|
||||||
|
define arm_aapcs_vfpcc <4 x i32> @vpnot_lots(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
|
||||||
|
entry:
|
||||||
|
unreachable
|
||||||
|
}
|
||||||
|
define arm_aapcs_vfpcc <4 x i32> @vpnot_first(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
|
||||||
|
entry:
|
||||||
|
unreachable
|
||||||
|
}
|
||||||
|
define arm_aapcs_vfpcc <4 x i32> @vpnot_many(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
|
||||||
|
entry:
|
||||||
|
unreachable
|
||||||
|
}
|
||||||
|
|
||||||
|
...
|
||||||
|
---
|
||||||
|
name: vpnot
|
||||||
|
alignment: 2
|
||||||
|
tracksRegLiveness: true
|
||||||
|
liveins:
|
||||||
|
- { reg: '$q0', virtual-reg: '' }
|
||||||
|
- { reg: '$q1', virtual-reg: '' }
|
||||||
|
- { reg: '$q2', virtual-reg: '' }
|
||||||
|
body: |
|
||||||
|
bb.0.entry:
|
||||||
|
liveins: $q0, $q1, $q2
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: vpnot
|
||||||
|
; CHECK: liveins: $q0, $q1, $q2
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def $vpr, implicit $q1, implicit $zr, implicit killed $vpr {
|
||||||
|
; CHECK: MVE_VPST 8, implicit-def $p0
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr
|
||||||
|
; CHECK: renamable $vpr = MVE_VPNOT internal killed renamable $vpr, 0, $noreg
|
||||||
|
; CHECK: }
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def dead $vpr, implicit-def $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit killed $q2, implicit $zr, implicit killed $vpr, implicit killed $q0, implicit killed $q1 {
|
||||||
|
; CHECK: MVE_VPST 8, implicit-def $p0
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr
|
||||||
|
; CHECK: renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, internal killed renamable $vpr
|
||||||
|
; CHECK: }
|
||||||
|
; CHECK: tBX_RET 14, $noreg, implicit $q0
|
||||||
|
renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr
|
||||||
|
renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr
|
||||||
|
renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr
|
||||||
|
tBX_RET 14, $noreg, implicit $q0
|
||||||
|
|
||||||
|
...
|
||||||
|
---
|
||||||
|
name: vpnot_end
|
||||||
|
alignment: 2
|
||||||
|
tracksRegLiveness: true
|
||||||
|
liveins:
|
||||||
|
- { reg: '$q0', virtual-reg: '' }
|
||||||
|
- { reg: '$q1', virtual-reg: '' }
|
||||||
|
- { reg: '$q2', virtual-reg: '' }
|
||||||
|
body: |
|
||||||
|
; CHECK-LABEL: name: vpnot_end
|
||||||
|
; CHECK: bb.0.entry:
|
||||||
|
; CHECK: successors: %bb.1(0x80000000)
|
||||||
|
; CHECK: liveins: $q0, $q1, $q2
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def $vpr, implicit $q1, implicit $zr, implicit killed $vpr {
|
||||||
|
; CHECK: MVE_VPST 8, implicit-def $p0
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr
|
||||||
|
; CHECK: renamable $vpr = MVE_VPNOT internal killed renamable $vpr, 0, $noreg
|
||||||
|
; CHECK: }
|
||||||
|
; CHECK: bb.1.bb2:
|
||||||
|
; CHECK: liveins: $q0, $q1, $q2, $vpr
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def dead $vpr, implicit-def $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit killed $q2, implicit $zr, implicit killed $vpr, implicit killed $q0, implicit killed $q1 {
|
||||||
|
; CHECK: MVE_VPST 8, implicit-def $p0
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr
|
||||||
|
; CHECK: renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, internal killed renamable $vpr
|
||||||
|
; CHECK: }
|
||||||
|
; CHECK: tBX_RET 14, $noreg, implicit $q0
|
||||||
|
bb.0.entry:
|
||||||
|
liveins: $q0, $q1, $q2
|
||||||
|
|
||||||
|
renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr
|
||||||
|
renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
|
||||||
|
bb.1.bb2:
|
||||||
|
liveins: $q0, $q1, $q2, $vpr
|
||||||
|
|
||||||
|
renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr
|
||||||
|
renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr
|
||||||
|
tBX_RET 14, $noreg, implicit $q0
|
||||||
|
|
||||||
|
...
|
||||||
|
---
|
||||||
|
name: vpnot_two
|
||||||
|
alignment: 2
|
||||||
|
tracksRegLiveness: true
|
||||||
|
liveins:
|
||||||
|
- { reg: '$q0', virtual-reg: '' }
|
||||||
|
- { reg: '$q1', virtual-reg: '' }
|
||||||
|
- { reg: '$q2', virtual-reg: '' }
|
||||||
|
body: |
|
||||||
|
bb.0.entry:
|
||||||
|
liveins: $q0, $q1, $q2
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: vpnot_two
|
||||||
|
; CHECK: liveins: $q0, $q1, $q2
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def $vpr, implicit $q1, implicit $zr, implicit killed $vpr {
|
||||||
|
; CHECK: MVE_VPST 8, implicit-def $p0
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr
|
||||||
|
; CHECK: renamable $vpr = MVE_VPNOT internal killed renamable $vpr, 0, $noreg
|
||||||
|
; CHECK: }
|
||||||
|
; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def dead $vpr, implicit-def $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit killed $q2, implicit $zr, implicit killed $vpr, implicit killed $q0, implicit killed $q1 {
|
||||||
|
; CHECK: MVE_VPST 8, implicit-def $p0
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr
|
||||||
|
; CHECK: renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, internal killed renamable $vpr
|
||||||
|
; CHECK: }
|
||||||
|
; CHECK: tBX_RET 14, $noreg, implicit $q0
|
||||||
|
renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr
|
||||||
|
renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr
|
||||||
|
renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr
|
||||||
|
tBX_RET 14, $noreg, implicit $q0
|
||||||
|
|
||||||
|
...
|
||||||
|
---
|
||||||
|
name: vpnot_lots
|
||||||
|
alignment: 2
|
||||||
|
tracksRegLiveness: true
|
||||||
|
liveins:
|
||||||
|
- { reg: '$q0', virtual-reg: '' }
|
||||||
|
- { reg: '$q1', virtual-reg: '' }
|
||||||
|
- { reg: '$q2', virtual-reg: '' }
|
||||||
|
body: |
|
||||||
|
bb.0.entry:
|
||||||
|
liveins: $q0, $q1, $q2
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: vpnot_lots
|
||||||
|
; CHECK: liveins: $q0, $q1, $q2
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def $vpr, implicit $q1, implicit $zr, implicit killed $vpr {
|
||||||
|
; CHECK: MVE_VPST 8, implicit-def $p0
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr
|
||||||
|
; CHECK: renamable $vpr = MVE_VPNOT internal killed renamable $vpr, 0, $noreg
|
||||||
|
; CHECK: }
|
||||||
|
; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def dead $vpr, implicit-def $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit killed $q2, implicit $zr, implicit killed $vpr, implicit killed $q0, implicit killed $q1 {
|
||||||
|
; CHECK: MVE_VPST 8, implicit-def $p0
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr
|
||||||
|
; CHECK: renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, internal killed renamable $vpr
|
||||||
|
; CHECK: }
|
||||||
|
; CHECK: tBX_RET 14, $noreg, implicit $q0
|
||||||
|
renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr
|
||||||
|
renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr
|
||||||
|
renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr
|
||||||
|
tBX_RET 14, $noreg, implicit $q0
|
||||||
|
|
||||||
|
...
|
||||||
|
---
|
||||||
|
name: vpnot_first
|
||||||
|
alignment: 2
|
||||||
|
tracksRegLiveness: true
|
||||||
|
liveins:
|
||||||
|
- { reg: '$q0', virtual-reg: '' }
|
||||||
|
- { reg: '$q1', virtual-reg: '' }
|
||||||
|
- { reg: '$q2', virtual-reg: '' }
|
||||||
|
body: |
|
||||||
|
bb.0.entry:
|
||||||
|
liveins: $q0, $q1, $q2
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: vpnot_first
|
||||||
|
; CHECK: liveins: $q0, $q1, $q2
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg
|
||||||
|
; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def dead $vpr, implicit-def $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit killed $q1, implicit $zr, implicit killed $vpr, implicit killed $q2, implicit killed $q0 {
|
||||||
|
; CHECK: MVE_VPST 4, implicit-def $p0
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, internal killed renamable $vpr
|
||||||
|
; CHECK: renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, internal killed renamable $vpr
|
||||||
|
; CHECK: }
|
||||||
|
; CHECK: tBX_RET 14, $noreg, implicit $q0
|
||||||
|
renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr
|
||||||
|
renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr
|
||||||
|
renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr
|
||||||
|
tBX_RET 14, $noreg, implicit $q0
|
||||||
|
|
||||||
|
...
|
||||||
|
---
|
||||||
|
name: vpnot_many
|
||||||
|
alignment: 2
|
||||||
|
tracksRegLiveness: true
|
||||||
|
liveins:
|
||||||
|
- { reg: '$q0', virtual-reg: '' }
|
||||||
|
- { reg: '$q1', virtual-reg: '' }
|
||||||
|
- { reg: '$q2', virtual-reg: '' }
|
||||||
|
body: |
|
||||||
|
bb.0.entry:
|
||||||
|
liveins: $q0, $q1, $q2
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: vpnot_many
|
||||||
|
; CHECK: liveins: $q0, $q1, $q2
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg
|
||||||
|
; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def $vpr, implicit $q1, implicit $zr, implicit killed $vpr {
|
||||||
|
; CHECK: MVE_VPST 8, implicit-def $p0
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr
|
||||||
|
; CHECK: renamable $vpr = MVE_VPNOT internal killed renamable $vpr, 0, $noreg
|
||||||
|
; CHECK: }
|
||||||
|
; CHECK: BUNDLE implicit-def $p0, implicit-def $vpr, implicit killed $q2, implicit $zr, implicit killed $vpr {
|
||||||
|
; CHECK: MVE_VPST 8, implicit-def $p0
|
||||||
|
; CHECK: renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr
|
||||||
|
; CHECK: renamable $vpr = MVE_VPNOT internal killed renamable $vpr, 0, $noreg
|
||||||
|
; CHECK: }
|
||||||
|
; CHECK: renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr
|
||||||
|
; CHECK: tBX_RET 14, $noreg, implicit $q0
|
||||||
|
renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr
|
||||||
|
renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr
|
||||||
|
renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg
|
||||||
|
renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr
|
||||||
|
tBX_RET 14, $noreg, implicit $q0
|
||||||
|
|
||||||
|
...
|
Loading…
Reference in New Issue