forked from OSchip/llvm-project
[ARM] Reegenerate MVE tests. NFC
The mve-phireg.ll test no longer really tests what it was added for, but the original case was fairly complex. I've left the test in as a general codegen test.
This commit is contained in:
parent
188f9a348d
commit
1b264a8263
|
@ -1,11 +1,101 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||||
; RUN: llc -O3 -mtriple=thumbv8.1m.main-arm-none-eabi -mattr=+mve.fp -verify-machineinstrs %s -o - | FileCheck %s
|
||||
|
||||
; verify-machineinstrs previously caught the incorrect use of QPR in the stack reloads.
|
||||
|
||||
define arm_aapcs_vfpcc void @k() {
|
||||
; CHECK-LABEL: k:
|
||||
; CHECK: vstrw.32
|
||||
; CHECK: vldrw.u32
|
||||
; CHECK: @ %bb.0: @ %entry
|
||||
; CHECK-NEXT: .save {r4, r5, r6, lr}
|
||||
; CHECK-NEXT: push {r4, r5, r6, lr}
|
||||
; CHECK-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}
|
||||
; CHECK-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}
|
||||
; CHECK-NEXT: .pad #16
|
||||
; CHECK-NEXT: sub sp, #16
|
||||
; CHECK-NEXT: adr r5, .LCPI0_0
|
||||
; CHECK-NEXT: adr r4, .LCPI0_1
|
||||
; CHECK-NEXT: vldrw.u32 q5, [r5]
|
||||
; CHECK-NEXT: vldrw.u32 q6, [r4]
|
||||
; CHECK-NEXT: vmov.i32 q0, #0x1
|
||||
; CHECK-NEXT: vmov.i8 q1, #0x0
|
||||
; CHECK-NEXT: vmov.i8 q2, #0xff
|
||||
; CHECK-NEXT: vmov.i16 q3, #0x6
|
||||
; CHECK-NEXT: vmov.i16 q4, #0x3
|
||||
; CHECK-NEXT: movs r0, #0
|
||||
; CHECK-NEXT: .LBB0_1: @ %vector.body
|
||||
; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1
|
||||
; CHECK-NEXT: vand q5, q5, q0
|
||||
; CHECK-NEXT: vand q6, q6, q0
|
||||
; CHECK-NEXT: vcmp.i32 eq, q5, zr
|
||||
; CHECK-NEXT: vpsel q5, q2, q1
|
||||
; CHECK-NEXT: vcmp.i32 eq, q6, zr
|
||||
; CHECK-NEXT: vpsel q7, q2, q1
|
||||
; CHECK-NEXT: vmov r1, s28
|
||||
; CHECK-NEXT: vmov.16 q6[0], r1
|
||||
; CHECK-NEXT: vmov r1, s29
|
||||
; CHECK-NEXT: vmov.16 q6[1], r1
|
||||
; CHECK-NEXT: vmov r1, s30
|
||||
; CHECK-NEXT: vmov.16 q6[2], r1
|
||||
; CHECK-NEXT: vmov r1, s31
|
||||
; CHECK-NEXT: vmov.16 q6[3], r1
|
||||
; CHECK-NEXT: vmov r1, s20
|
||||
; CHECK-NEXT: vmov.16 q6[4], r1
|
||||
; CHECK-NEXT: vmov r1, s21
|
||||
; CHECK-NEXT: vmov.16 q6[5], r1
|
||||
; CHECK-NEXT: vmov r1, s22
|
||||
; CHECK-NEXT: vmov.16 q6[6], r1
|
||||
; CHECK-NEXT: vmov r1, s23
|
||||
; CHECK-NEXT: vmov.16 q6[7], r1
|
||||
; CHECK-NEXT: vcmp.i16 ne, q6, zr
|
||||
; CHECK-NEXT: vmov.i32 q6, #0x0
|
||||
; CHECK-NEXT: vpsel q5, q4, q3
|
||||
; CHECK-NEXT: vstrh.16 q5, [r0]
|
||||
; CHECK-NEXT: vmov q5, q6
|
||||
; CHECK-NEXT: cbz r0, .LBB0_2
|
||||
; CHECK-NEXT: le .LBB0_1
|
||||
; CHECK-NEXT: .LBB0_2: @ %for.cond4.preheader
|
||||
; CHECK-NEXT: movs r6, #0
|
||||
; CHECK-NEXT: cbnz r6, .LBB0_5
|
||||
; CHECK-NEXT: .LBB0_3: @ %for.body10
|
||||
; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1
|
||||
; CHECK-NEXT: cbnz r6, .LBB0_4
|
||||
; CHECK-NEXT: le .LBB0_3
|
||||
; CHECK-NEXT: .LBB0_4: @ %for.cond4.loopexit
|
||||
; CHECK-NEXT: bl l
|
||||
; CHECK-NEXT: .LBB0_5: @ %vector.body105.preheader
|
||||
; CHECK-NEXT: vldrw.u32 q0, [r5]
|
||||
; CHECK-NEXT: vldrw.u32 q1, [r4]
|
||||
; CHECK-NEXT: vmov.i32 q2, #0x8
|
||||
; CHECK-NEXT: .LBB0_6: @ %vector.body105
|
||||
; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1
|
||||
; CHECK-NEXT: vadd.i32 q1, q1, q2
|
||||
; CHECK-NEXT: vadd.i32 q0, q0, q2
|
||||
; CHECK-NEXT: cbz r6, .LBB0_7
|
||||
; CHECK-NEXT: le .LBB0_6
|
||||
; CHECK-NEXT: .LBB0_7: @ %vector.body115.ph
|
||||
; CHECK-NEXT: vldrw.u32 q0, [r4]
|
||||
; CHECK-NEXT: vstrw.32 q0, [sp] @ 16-byte Spill
|
||||
; CHECK-NEXT: @APP
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-NEXT: @NO_APP
|
||||
; CHECK-NEXT: vldrw.u32 q1, [sp] @ 16-byte Reload
|
||||
; CHECK-NEXT: vmov.i32 q0, #0x4
|
||||
; CHECK-NEXT: .LBB0_8: @ %vector.body115
|
||||
; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1
|
||||
; CHECK-NEXT: vadd.i32 q1, q1, q0
|
||||
; CHECK-NEXT: b .LBB0_8
|
||||
; CHECK-NEXT: .p2align 4
|
||||
; CHECK-NEXT: @ %bb.9:
|
||||
; CHECK-NEXT: .LCPI0_0:
|
||||
; CHECK-NEXT: .long 4 @ 0x4
|
||||
; CHECK-NEXT: .long 5 @ 0x5
|
||||
; CHECK-NEXT: .long 6 @ 0x6
|
||||
; CHECK-NEXT: .long 7 @ 0x7
|
||||
; CHECK-NEXT: .LCPI0_1:
|
||||
; CHECK-NEXT: .long 0 @ 0x0
|
||||
; CHECK-NEXT: .long 1 @ 0x1
|
||||
; CHECK-NEXT: .long 2 @ 0x2
|
||||
; CHECK-NEXT: .long 3 @ 0x3
|
||||
entry:
|
||||
br label %vector.body
|
||||
|
||||
|
@ -56,8 +146,90 @@ vector.body115: ; preds = %vector.body115, %ve
|
|||
|
||||
define dso_local i32 @e() #0 {
|
||||
; CHECK-LABEL: e:
|
||||
; CHECK: vstrw.32
|
||||
; CHECK: vldrw.u32
|
||||
; CHECK: @ %bb.0: @ %entry
|
||||
; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||
; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||
; CHECK-NEXT: .pad #4
|
||||
; CHECK-NEXT: sub sp, #4
|
||||
; CHECK-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}
|
||||
; CHECK-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}
|
||||
; CHECK-NEXT: .pad #440
|
||||
; CHECK-NEXT: sub sp, #440
|
||||
; CHECK-NEXT: vldr s20, .LCPI1_0
|
||||
; CHECK-NEXT: movw r9, :lower16:.L_MergedGlobals
|
||||
; CHECK-NEXT: vldr s23, .LCPI1_1
|
||||
; CHECK-NEXT: movt r9, :upper16:.L_MergedGlobals
|
||||
; CHECK-NEXT: mov.w r8, #4
|
||||
; CHECK-NEXT: mov r5, r9
|
||||
; CHECK-NEXT: strh.w r8, [sp, #438]
|
||||
; CHECK-NEXT: movs r6, #0
|
||||
; CHECK-NEXT: vstr s23, [sp, #48]
|
||||
; CHECK-NEXT: mov r7, r9
|
||||
; CHECK-NEXT: vstr s23, [sp, #40]
|
||||
; CHECK-NEXT: movw r4, :lower16:e
|
||||
; CHECK-NEXT: ldr r1, [r5, #4]!
|
||||
; CHECK-NEXT: movt r4, :upper16:e
|
||||
; CHECK-NEXT: str r6, [sp, #76]
|
||||
; CHECK-NEXT: vmov s5, r4
|
||||
; CHECK-NEXT: vmov.32 q7[0], r5
|
||||
; CHECK-NEXT: ldr r0, [r7, #8]!
|
||||
; CHECK-NEXT: vmov q0, q7
|
||||
; CHECK-NEXT: ldr r2, [sp, #48]
|
||||
; CHECK-NEXT: vmov.32 q0[1], r5
|
||||
; CHECK-NEXT: vmov s21, r5
|
||||
; CHECK-NEXT: vmov.32 q0[2], r2
|
||||
; CHECK-NEXT: ldr r2, [sp, #40]
|
||||
; CHECK-NEXT: vdup.32 q2, r5
|
||||
; CHECK-NEXT: vmov.32 q4[0], r7
|
||||
; CHECK-NEXT: vmov q6, q4
|
||||
; CHECK-NEXT: vstrw.32 q2, [sp] @ 16-byte Spill
|
||||
; CHECK-NEXT: vmov.32 q6[1], r2
|
||||
; CHECK-NEXT: vldrw.u32 q3, [sp] @ 16-byte Reload
|
||||
; CHECK-NEXT: vmov.f32 s22, s21
|
||||
; CHECK-NEXT: vmov.32 q6[2], r7
|
||||
; CHECK-NEXT: vmov.f32 s4, s20
|
||||
; CHECK-NEXT: vstrw.32 q2, [sp, #16] @ 16-byte Spill
|
||||
; CHECK-NEXT: vmov.f32 s6, s21
|
||||
; CHECK-NEXT: vmov.32 q3[0], r4
|
||||
; CHECK-NEXT: vmov.32 q2[1], r4
|
||||
; CHECK-NEXT: vmov.32 q6[3], r4
|
||||
; CHECK-NEXT: vmov.32 q0[3], r4
|
||||
; CHECK-NEXT: vmov.f32 s7, s23
|
||||
; CHECK-NEXT: str r1, [sp, #72]
|
||||
; CHECK-NEXT: vstrw.32 q6, [sp, #124]
|
||||
; CHECK-NEXT: str r1, [r0]
|
||||
; CHECK-NEXT: movs r1, #64
|
||||
; CHECK-NEXT: str r0, [r0]
|
||||
; CHECK-NEXT: vstrw.32 q5, [sp, #92]
|
||||
; CHECK-NEXT: vstrw.32 q1, [r0]
|
||||
; CHECK-NEXT: vstrw.32 q2, [r0]
|
||||
; CHECK-NEXT: vstrw.32 q3, [r0]
|
||||
; CHECK-NEXT: vstrw.32 q0, [r0]
|
||||
; CHECK-NEXT: bl __aeabi_memclr4
|
||||
; CHECK-NEXT: vstr s23, [sp, #44]
|
||||
; CHECK-NEXT: vmov.32 q7[1], r7
|
||||
; CHECK-NEXT: ldr r0, [sp, #44]
|
||||
; CHECK-NEXT: vldrw.u32 q0, [sp, #16] @ 16-byte Reload
|
||||
; CHECK-NEXT: vmov.32 q4[1], r4
|
||||
; CHECK-NEXT: vmov.32 q7[2], r5
|
||||
; CHECK-NEXT: vmov.32 q4[2], r5
|
||||
; CHECK-NEXT: vmov.32 q0[0], r6
|
||||
; CHECK-NEXT: vmov.32 q4[3], r7
|
||||
; CHECK-NEXT: vmov.32 q7[3], r0
|
||||
; CHECK-NEXT: vstrw.32 q4, [r0]
|
||||
; CHECK-NEXT: str.w r6, [r9]
|
||||
; CHECK-NEXT: vstrw.32 q0, [r0]
|
||||
; CHECK-NEXT: vstrw.32 q7, [r0]
|
||||
; CHECK-NEXT: str.w r8, [sp, #356]
|
||||
; CHECK-NEXT: .LBB1_1: @ %for.cond
|
||||
; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1
|
||||
; CHECK-NEXT: b .LBB1_1
|
||||
; CHECK-NEXT: .p2align 2
|
||||
; CHECK-NEXT: @ %bb.2:
|
||||
; CHECK-NEXT: .LCPI1_0:
|
||||
; CHECK-NEXT: .long 4 @ float 5.60519386E-45
|
||||
; CHECK-NEXT: .LCPI1_1:
|
||||
; CHECK-NEXT: .long 0 @ float 0
|
||||
entry:
|
||||
%f = alloca i16, align 2
|
||||
%g = alloca [3 x [8 x [4 x i16*]]], align 4
|
||||
|
|
|
@ -12,52 +12,51 @@ body: |
|
|||
bb.0:
|
||||
; CHECK-LABEL: name: func0
|
||||
; CHECK: liveins: $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11, $lr
|
||||
; CHECK-NEXT: {{ }}
|
||||
; CHECK-NEXT: $sp = frame-setup t2STMDB_UPD $sp, 14, $noreg, killed $r4, killed $r5, killed $r6, killed $r7, killed $r8, killed $r9, killed $r10, killed $r11, killed $lr
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 36
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r11, -8
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r10, -12
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r9, -16
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r8, -20
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -24
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r6, -28
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r5, -32
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r4, -36
|
||||
; CHECK-NEXT: $sp = frame-setup tSUBspi $sp, 5, 14, $noreg
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 56
|
||||
; CHECK-NEXT: $r0 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r1 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r2 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r3 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r4 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r5 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r6 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r7 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r8 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r9 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r10 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r11 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r12 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $lr = IMPLICIT_DEF
|
||||
; CHECK-NEXT: t2STRi12 killed $r0, $sp, 0, 14, $noreg :: (store 4 into %stack.1)
|
||||
; CHECK-NEXT: $r0 = tMOVr killed $sp, 14, $noreg
|
||||
; CHECK-NEXT: renamable $q2 = MVE_VLDRBU32 killed $r0, 16, 0, $noreg :: (load 4 from %stack.0 + 12)
|
||||
; CHECK-NEXT: $r0 = t2LDRi12 $sp, 0, 14, $noreg :: (load 4 from %stack.1)
|
||||
; CHECK-NEXT: KILL $r0
|
||||
; CHECK-NEXT: KILL $r1
|
||||
; CHECK-NEXT: KILL $r2
|
||||
; CHECK-NEXT: KILL $r3
|
||||
; CHECK-NEXT: KILL $r4
|
||||
; CHECK-NEXT: KILL $r5
|
||||
; CHECK-NEXT: KILL $r6
|
||||
; CHECK-NEXT: KILL $r7
|
||||
; CHECK-NEXT: KILL $r8
|
||||
; CHECK-NEXT: KILL $r9
|
||||
; CHECK-NEXT: KILL $r10
|
||||
; CHECK-NEXT: KILL $r11
|
||||
; CHECK-NEXT: KILL $r12
|
||||
; CHECK-NEXT: KILL $lr
|
||||
; CHECK: $sp = frame-setup t2STMDB_UPD $sp, 14, $noreg, killed $r4, killed $r5, killed $r6, killed $r7, killed $r8, killed $r9, killed $r10, killed $r11, killed $lr
|
||||
; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 36
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r11, -8
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r10, -12
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r9, -16
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r8, -20
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -24
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r6, -28
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r5, -32
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r4, -36
|
||||
; CHECK: $sp = frame-setup tSUBspi $sp, 5, 14, $noreg
|
||||
; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 56
|
||||
; CHECK: $r0 = IMPLICIT_DEF
|
||||
; CHECK: $r1 = IMPLICIT_DEF
|
||||
; CHECK: $r2 = IMPLICIT_DEF
|
||||
; CHECK: $r3 = IMPLICIT_DEF
|
||||
; CHECK: $r4 = IMPLICIT_DEF
|
||||
; CHECK: $r5 = IMPLICIT_DEF
|
||||
; CHECK: $r6 = IMPLICIT_DEF
|
||||
; CHECK: $r7 = IMPLICIT_DEF
|
||||
; CHECK: $r8 = IMPLICIT_DEF
|
||||
; CHECK: $r9 = IMPLICIT_DEF
|
||||
; CHECK: $r10 = IMPLICIT_DEF
|
||||
; CHECK: $r11 = IMPLICIT_DEF
|
||||
; CHECK: $r12 = IMPLICIT_DEF
|
||||
; CHECK: $lr = IMPLICIT_DEF
|
||||
; CHECK: t2STRi12 killed $r0, $sp, 0, 14, $noreg :: (store 4 into %stack.1)
|
||||
; CHECK: $r0 = tMOVr killed $sp, 14, $noreg
|
||||
; CHECK: renamable $q2 = MVE_VLDRBU32 killed $r0, 16, 0, $noreg :: (load 4 from %stack.0 + 12)
|
||||
; CHECK: $r0 = t2LDRi12 $sp, 0, 14, $noreg :: (load 4 from %stack.1)
|
||||
; CHECK: KILL $r0
|
||||
; CHECK: KILL $r1
|
||||
; CHECK: KILL $r2
|
||||
; CHECK: KILL $r3
|
||||
; CHECK: KILL $r4
|
||||
; CHECK: KILL $r5
|
||||
; CHECK: KILL $r6
|
||||
; CHECK: KILL $r7
|
||||
; CHECK: KILL $r8
|
||||
; CHECK: KILL $r9
|
||||
; CHECK: KILL $r10
|
||||
; CHECK: KILL $r11
|
||||
; CHECK: KILL $r12
|
||||
; CHECK: KILL $lr
|
||||
$r0 = IMPLICIT_DEF
|
||||
$r1 = IMPLICIT_DEF
|
||||
$r2 = IMPLICIT_DEF
|
||||
|
@ -106,52 +105,51 @@ body: |
|
|||
bb.0:
|
||||
; CHECK-LABEL: name: func1
|
||||
; CHECK: liveins: $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11, $lr
|
||||
; CHECK-NEXT: {{ }}
|
||||
; CHECK-NEXT: $sp = frame-setup t2STMDB_UPD $sp, 14, $noreg, killed $r4, killed $r5, killed $r6, killed $r7, killed $r8, killed $r9, killed $r10, killed $r11, killed $lr
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 36
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r11, -8
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r10, -12
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r9, -16
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r8, -20
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -24
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r6, -28
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r5, -32
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r4, -36
|
||||
; CHECK-NEXT: $sp = frame-setup t2SUBspImm12 killed $sp, 1220, 14, $noreg
|
||||
; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 1256
|
||||
; CHECK-NEXT: $r0 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r1 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r2 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r3 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r4 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r5 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r6 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r7 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r8 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r9 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r10 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r11 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $r12 = IMPLICIT_DEF
|
||||
; CHECK-NEXT: $lr = IMPLICIT_DEF
|
||||
; CHECK-NEXT: t2STRi12 killed $r0, $sp, 0, 14, $noreg :: (store 4 into %stack.2)
|
||||
; CHECK-NEXT: $r0 = t2ADDri killed $sp, 1152, 14, $noreg, $noreg
|
||||
; CHECK-NEXT: renamable $q2 = MVE_VLDRBU8 killed $r0, 52, 0, $noreg :: (load 4 from %stack.0)
|
||||
; CHECK-NEXT: $r0 = t2LDRi12 $sp, 0, 14, $noreg :: (load 4 from %stack.2)
|
||||
; CHECK-NEXT: KILL $r0
|
||||
; CHECK-NEXT: KILL $r1
|
||||
; CHECK-NEXT: KILL $r2
|
||||
; CHECK-NEXT: KILL $r3
|
||||
; CHECK-NEXT: KILL $r4
|
||||
; CHECK-NEXT: KILL $r5
|
||||
; CHECK-NEXT: KILL $r6
|
||||
; CHECK-NEXT: KILL $r7
|
||||
; CHECK-NEXT: KILL $r8
|
||||
; CHECK-NEXT: KILL $r9
|
||||
; CHECK-NEXT: KILL $r10
|
||||
; CHECK-NEXT: KILL $r11
|
||||
; CHECK-NEXT: KILL $r12
|
||||
; CHECK-NEXT: KILL $lr
|
||||
; CHECK: $sp = frame-setup t2STMDB_UPD $sp, 14, $noreg, killed $r4, killed $r5, killed $r6, killed $r7, killed $r8, killed $r9, killed $r10, killed $r11, killed $lr
|
||||
; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 36
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r11, -8
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r10, -12
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r9, -16
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r8, -20
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -24
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r6, -28
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r5, -32
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r4, -36
|
||||
; CHECK: $sp = frame-setup t2SUBspImm12 killed $sp, 1220, 14, $noreg
|
||||
; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 1256
|
||||
; CHECK: $r0 = IMPLICIT_DEF
|
||||
; CHECK: $r1 = IMPLICIT_DEF
|
||||
; CHECK: $r2 = IMPLICIT_DEF
|
||||
; CHECK: $r3 = IMPLICIT_DEF
|
||||
; CHECK: $r4 = IMPLICIT_DEF
|
||||
; CHECK: $r5 = IMPLICIT_DEF
|
||||
; CHECK: $r6 = IMPLICIT_DEF
|
||||
; CHECK: $r7 = IMPLICIT_DEF
|
||||
; CHECK: $r8 = IMPLICIT_DEF
|
||||
; CHECK: $r9 = IMPLICIT_DEF
|
||||
; CHECK: $r10 = IMPLICIT_DEF
|
||||
; CHECK: $r11 = IMPLICIT_DEF
|
||||
; CHECK: $r12 = IMPLICIT_DEF
|
||||
; CHECK: $lr = IMPLICIT_DEF
|
||||
; CHECK: t2STRi12 killed $r0, $sp, 0, 14, $noreg :: (store 4 into %stack.2)
|
||||
; CHECK: $r0 = t2ADDri killed $sp, 1152, 14, $noreg, $noreg
|
||||
; CHECK: renamable $q2 = MVE_VLDRBU8 killed $r0, 52, 0, $noreg :: (load 4 from %stack.0)
|
||||
; CHECK: $r0 = t2LDRi12 $sp, 0, 14, $noreg :: (load 4 from %stack.2)
|
||||
; CHECK: KILL $r0
|
||||
; CHECK: KILL $r1
|
||||
; CHECK: KILL $r2
|
||||
; CHECK: KILL $r3
|
||||
; CHECK: KILL $r4
|
||||
; CHECK: KILL $r5
|
||||
; CHECK: KILL $r6
|
||||
; CHECK: KILL $r7
|
||||
; CHECK: KILL $r8
|
||||
; CHECK: KILL $r9
|
||||
; CHECK: KILL $r10
|
||||
; CHECK: KILL $r11
|
||||
; CHECK: KILL $r12
|
||||
; CHECK: KILL $lr
|
||||
$r0 = IMPLICIT_DEF
|
||||
$r1 = IMPLICIT_DEF
|
||||
$r2 = IMPLICIT_DEF
|
||||
|
|
|
@ -62,21 +62,23 @@ body: |
|
|||
bb.0:
|
||||
liveins: $lr, $q0, $q1, $q2, $q3, $q4, $q5, $r0, $r1, $r2, $r7, $r8, $r9, $r10, $r11, $r12
|
||||
|
||||
; CHECK-LABEL: name: vpt_2_blocks_1_pred
|
||||
; CHECK: renamable $r4 = t2ADDrr renamable $r2, renamable $r10, 14, $noreg, $noreg
|
||||
; CHECK: BUNDLE implicit-def $vpr, implicit-def $q6, implicit-def $d12, implicit-def $s24, implicit-def $s25, implicit-def $d13, implicit-def $s26, implicit-def $s27, implicit $q1, implicit $q5, implicit killed $r4 {
|
||||
; CHECK: MVE_VPTv4u32 8, renamable $q1, renamable $q5, 2, implicit-def $vpr
|
||||
; CHECK: renamable $q6 = MVE_VLDRBU32 killed renamable $r4, 0, 1, internal renamable $vpr
|
||||
; CHECK: }
|
||||
; CHECK: renamable $r4 = t2ADDrr renamable $r11, renamable $r10, 14, $noreg, $noreg
|
||||
; CHECK: BUNDLE implicit-def dead $vpr, implicit-def $q7, implicit-def $d14, implicit-def $s28, implicit-def $s29, implicit-def $d15, implicit-def $s30, implicit-def $s31, implicit $q1, implicit $q5, implicit killed $r4 {
|
||||
; CHECK: MVE_VPTv4u32 8, renamable $q1, renamable $q5, 2, implicit-def $vpr
|
||||
; CHECK: renamable $q7 = MVE_VLDRBU32 killed renamable $r4, 0, 1, internal killed renamable $vpr
|
||||
; CHECK: }
|
||||
; CHECK: t2LoopEnd renamable $lr, %bb.0, implicit-def dead $cpsr
|
||||
; CHECK: t2B %bb.0, 14, $noreg
|
||||
|
||||
|
||||
; CHECK-LABEL: name: vpt_2_blocks_1_pred
|
||||
; CHECK: successors: %bb.0(0x80000000)
|
||||
; CHECK: liveins: $lr, $q0, $q1, $q2, $q3, $q4, $q5, $r0, $r1, $r2, $r7, $r8, $r9, $r10, $r11, $r12
|
||||
; CHECK: renamable $r4 = t2ADDrr renamable $r2, renamable $r10, 14, $noreg, $noreg
|
||||
; CHECK: BUNDLE implicit-def $vpr, implicit-def $q6, implicit-def $d12, implicit-def $s24, implicit-def $s25, implicit-def $d13, implicit-def $s26, implicit-def $s27, implicit $q1, implicit $q5, implicit killed $r4 {
|
||||
; CHECK: MVE_VPTv4u32 8, renamable $q1, renamable $q5, 2, implicit-def $vpr
|
||||
; CHECK: renamable $q6 = MVE_VLDRBU32 killed renamable $r4, 0, 1, internal renamable $vpr
|
||||
; CHECK: }
|
||||
; CHECK: renamable $r4 = t2ADDrr renamable $r11, renamable $r10, 14, $noreg, $noreg
|
||||
; CHECK: BUNDLE implicit-def dead $vpr, implicit-def $q7, implicit-def $d14, implicit-def $s28, implicit-def $s29, implicit-def $d15, implicit-def $s30, implicit-def $s31, implicit $q1, implicit $q5, implicit killed $r4 {
|
||||
; CHECK: MVE_VPTv4u32 8, renamable $q1, renamable $q5, 2, implicit-def $vpr
|
||||
; CHECK: renamable $q7 = MVE_VLDRBU32 killed renamable $r4, 0, 1, internal killed renamable $vpr
|
||||
; CHECK: }
|
||||
; CHECK: t2LoopEnd renamable $lr, %bb.0, implicit-def dead $cpsr
|
||||
; CHECK: t2B %bb.0, 14, $noreg
|
||||
renamable $vpr = MVE_VCMPu32 renamable $q1, renamable $q5, 2, 0, $noreg
|
||||
renamable $r4 = t2ADDrr renamable $r2, renamable $r10, 14, $noreg, $noreg
|
||||
renamable $q6 = MVE_VLDRBU32 killed renamable $r4, 0, 1, renamable $vpr
|
||||
|
|
|
@ -64,6 +64,7 @@ body: |
|
|||
bb.0.entry:
|
||||
liveins: $q0, $q1, $q2, $r0
|
||||
|
||||
|
||||
; CHECK-LABEL: name: vpt_2_blocks_non_consecutive_ins
|
||||
; CHECK: liveins: $q0, $q1, $q2, $r0
|
||||
; CHECK: $vpr = VMSR_P0 killed $r0, 14, $noreg
|
||||
|
@ -80,7 +81,6 @@ body: |
|
|||
; CHECK: renamable $q0 = nnan ninf nsz MVE_VMINNMf32 internal killed renamable $q3, killed renamable $q2, 1, killed renamable $vpr, killed renamable $q0
|
||||
; CHECK: }
|
||||
; CHECK: tBX_RET 14, $noreg, implicit $q0
|
||||
|
||||
$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
|
||||
|
|
|
@ -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
|
||||
|
||||
--- |
|
||||
|
@ -94,19 +95,31 @@ body: |
|
|||
bb.0.entry:
|
||||
liveins: $q0, $r0, $r1, $r2, $lr
|
||||
|
||||
; CHECK: BUNDLE implicit-def $vpr, implicit-def dead $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit $q0, implicit $zr, implicit killed $r0, implicit killed $r3, implicit killed $r1, implicit killed $lr {
|
||||
; CHECK: MVE_VPTv4f32r 1, renamable $q0, $zr, 10, implicit-def $vpr
|
||||
; CHECK: renamable $q0 = MVE_VLDRWU32 killed renamable $r0, 0, 1, internal renamable $vpr :: (load 16 from %ir.src, align 4)
|
||||
; CHECK: MVE_VSTRWU32 internal killed renamable $q0, killed renamable $r3, 0, 1, internal renamable $vpr :: (store 16 into %ir.dest, align 4)
|
||||
; CHECK: renamable $q0 = MVE_VLDRWU32 killed renamable $r1, 0, 1, internal renamable $vpr :: (load 16 from %ir.src2, align 4)
|
||||
; CHECK: MVE_VSTRWU32 internal killed renamable $q0, killed renamable $lr, 0, 1, internal renamable $vpr :: (store 16 into %ir.dest2, align 4)
|
||||
; CHECK: }
|
||||
; CHECK: BUNDLE implicit-def $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit killed $vpr, implicit killed $r2, implicit killed $r12 {
|
||||
; CHECK: MVE_VPST 4, implicit $vpr
|
||||
; CHECK: renamable $q0 = MVE_VLDRWU32 killed renamable $r2, 0, 1, renamable $vpr :: (load 16 from %ir.src3, align 4)
|
||||
; CHECK: MVE_VSTRWU32 internal renamable $q0, killed renamable $r12, 0, 1, killed renamable $vpr :: (store 16 into %ir.dest3, align 4)
|
||||
; CHECK: }
|
||||
|
||||
; CHECK-LABEL: name: foo
|
||||
; CHECK: liveins: $q0, $r0, $r1, $r2, $lr
|
||||
; CHECK: $sp = frame-setup t2STMDB_UPD $sp, 14, $noreg, killed $r7, killed $lr
|
||||
; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4
|
||||
; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8
|
||||
; CHECK: $r7 = frame-setup tMOVr killed $sp, 14, $noreg
|
||||
; CHECK: frame-setup CFI_INSTRUCTION def_cfa_register $r7
|
||||
; CHECK: renamable $r12 = t2LDRi12 $r7, 16, 14, $noreg :: (load 4 from %fixed-stack.2)
|
||||
; CHECK: renamable $lr = t2LDRi12 $r7, 12, 14, $noreg :: (load 4 from %fixed-stack.1)
|
||||
; CHECK: renamable $r3 = t2LDRi12 $r7, 8, 14, $noreg :: (load 4 from %fixed-stack.0)
|
||||
; CHECK: BUNDLE implicit-def $vpr, implicit-def dead $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit $q0, implicit $zr, implicit killed $r0, implicit killed $r3, implicit killed $r1, implicit killed $lr {
|
||||
; CHECK: MVE_VPTv4f32r 1, renamable $q0, $zr, 10, implicit-def $vpr
|
||||
; CHECK: renamable $q0 = MVE_VLDRWU32 killed renamable $r0, 0, 1, internal renamable $vpr :: (load 16 from %ir.src, align 4)
|
||||
; CHECK: MVE_VSTRWU32 internal killed renamable $q0, killed renamable $r3, 0, 1, internal renamable $vpr :: (store 16 into %ir.dest, align 4)
|
||||
; CHECK: renamable $q0 = MVE_VLDRWU32 killed renamable $r1, 0, 1, internal renamable $vpr :: (load 16 from %ir.src2, align 4)
|
||||
; CHECK: MVE_VSTRWU32 internal killed renamable $q0, killed renamable $lr, 0, 1, internal renamable $vpr :: (store 16 into %ir.dest2, align 4)
|
||||
; CHECK: }
|
||||
; CHECK: BUNDLE implicit-def $q0, implicit-def $d0, implicit-def $s0, implicit-def $s1, implicit-def $d1, implicit-def $s2, implicit-def $s3, implicit killed $vpr, implicit killed $r2, implicit killed $r12 {
|
||||
; CHECK: MVE_VPST 4, implicit $vpr
|
||||
; CHECK: renamable $q0 = MVE_VLDRWU32 killed renamable $r2, 0, 1, renamable $vpr :: (load 16 from %ir.src3, align 4)
|
||||
; CHECK: MVE_VSTRWU32 internal renamable $q0, killed renamable $r12, 0, 1, killed renamable $vpr :: (store 16 into %ir.dest3, align 4)
|
||||
; CHECK: }
|
||||
; CHECK: $sp = t2LDMIA_RET $sp, 14, $noreg, def $r7, def $pc, implicit $q0
|
||||
$sp = frame-setup t2STMDB_UPD $sp, 14, $noreg, killed $r7, killed $lr
|
||||
frame-setup CFI_INSTRUCTION def_cfa_offset 8
|
||||
frame-setup CFI_INSTRUCTION offset $lr, -4
|
||||
|
|
|
@ -62,12 +62,12 @@ 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: 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 $q0
|
||||
|
||||
$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
|
||||
tBX_RET 14, $noreg, implicit $q0
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||||
; RUN: opt -instcombine %s | llc -mtriple=thumbv8.1m.main-none-eabi -mattr=+mve --verify-machineinstrs -o - | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
|
|
Loading…
Reference in New Issue