CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
912 lines
46 KiB
YAML
912 lines
46 KiB
YAML
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --print-fixed-stack --version 5
|
|
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5 --print-fixed-stack
|
|
# RUN: llc -mattr=+sve -mtriple=aarch64-windows-msvc -run-pass=prologepilog %s -o - | FileCheck %s
|
|
|
|
--- |
|
|
|
|
define void @test_allocate_sve() uwtable { entry: unreachable }
|
|
define void @test_allocate_sve_gpr_callee_saves() uwtable { entry: unreachable }
|
|
define void @test_allocate_sve_gpr_realigned() uwtable { entry: unreachable }
|
|
define void @test_address_sve() uwtable { entry: unreachable }
|
|
define void @test_address_sve_fp() uwtable { entry: unreachable }
|
|
define void @test_stack_arg_sve() uwtable { entry: unreachable }
|
|
define void @test_address_sve_out_of_range() uwtable { entry: unreachable }
|
|
define void @test_address_gpr_vla() uwtable { entry: unreachable }
|
|
define aarch64_sve_vector_pcs void @save_restore_pregs_sve() uwtable { entry: unreachable }
|
|
define aarch64_sve_vector_pcs void @save_restore_zregs_sve() uwtable { entry: unreachable }
|
|
define aarch64_sve_vector_pcs void @save_restore_sve() uwtable { entry: unreachable }
|
|
define aarch64_sve_vector_pcs void @save_restore_sve_realign() uwtable { entry: unreachable }
|
|
define aarch64_sve_vector_pcs void @frame_layout() uwtable { entry: unreachable }
|
|
define aarch64_sve_vector_pcs void @test_nounwind_layout() nounwind { entry: unreachable }
|
|
...
|
|
---
|
|
name: test_allocate_sve
|
|
stack:
|
|
- { id: 0, stack-id: scalable-vector, size: 18, alignment: 2 }
|
|
- { id: 1, stack-id: default, size: 16, alignment: 8 }
|
|
body: |
|
|
bb.0.entry:
|
|
; CHECK-LABEL: name: test_allocate_sve
|
|
; CHECK: fixedStack:
|
|
; CHECK: liveins: $lr
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.2)
|
|
; CHECK-NEXT: frame-setup SEH_SaveReg_X 30, -16
|
|
; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 16, 0
|
|
; CHECK-NEXT: frame-setup SEH_StackAlloc 16
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -2, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 2
|
|
; CHECK-NEXT: frame-setup SEH_PrologEnd
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogStart
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 2, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 2
|
|
; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 16, 0
|
|
; CHECK-NEXT: frame-destroy SEH_StackAlloc 16
|
|
; CHECK-NEXT: early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.2)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveReg_X 30, -16
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogEnd
|
|
; CHECK-NEXT: RET_ReallyLR
|
|
RET_ReallyLR
|
|
...
|
|
---
|
|
name: test_allocate_sve_gpr_callee_saves
|
|
stack:
|
|
- { id: 0, stack-id: scalable-vector, size: 18, alignment: 2 }
|
|
- { id: 1, stack-id: default, size: 16, alignment: 8 }
|
|
body: |
|
|
bb.0.entry:
|
|
; CHECK-LABEL: name: test_allocate_sve_gpr_callee_saves
|
|
; CHECK: fixedStack:
|
|
; CHECK: liveins: $x21, $x20, $lr
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: early-clobber $sp = frame-setup STPXpre killed $x20, killed $x21, $sp, -4 :: (store (s64) into %stack.3), (store (s64) into %stack.4)
|
|
; CHECK-NEXT: frame-setup SEH_SaveRegP_X 20, 21, -32
|
|
; CHECK-NEXT: frame-setup STRXui killed $lr, $sp, 2 :: (store (s64) into %stack.2)
|
|
; CHECK-NEXT: frame-setup SEH_SaveReg 30, 16
|
|
; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 16, 0
|
|
; CHECK-NEXT: frame-setup SEH_StackAlloc 16
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -2, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 2
|
|
; CHECK-NEXT: frame-setup SEH_PrologEnd
|
|
; CHECK-NEXT: $x20 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $x21 = IMPLICIT_DEF
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogStart
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 2, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 2
|
|
; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 16, 0
|
|
; CHECK-NEXT: frame-destroy SEH_StackAlloc 16
|
|
; CHECK-NEXT: $lr = frame-destroy LDRXui $sp, 2 :: (load (s64) from %stack.2)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveReg 30, 16
|
|
; CHECK-NEXT: early-clobber $sp, $x20, $x21 = frame-destroy LDPXpost $sp, 4 :: (load (s64) from %stack.3), (load (s64) from %stack.4)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveRegP_X 20, 21, -32
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogEnd
|
|
; CHECK-NEXT: RET_ReallyLR
|
|
$x20 = IMPLICIT_DEF
|
|
$x21 = IMPLICIT_DEF
|
|
RET_ReallyLR
|
|
...
|
|
---
|
|
name: test_allocate_sve_gpr_realigned
|
|
stack:
|
|
- { id: 0, stack-id: scalable-vector, size: 18, alignment: 2 }
|
|
- { id: 1, stack-id: default, size: 16, alignment: 32 }
|
|
body: |
|
|
bb.0.entry:
|
|
; CHECK-LABEL: name: test_allocate_sve_gpr_realigned
|
|
; CHECK: fixedStack:
|
|
; CHECK: liveins: $lr
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: early-clobber $sp = frame-setup STPXpre killed $fp, killed $lr, $sp, -2 :: (store (s64) into %stack.2), (store (s64) into %stack.3)
|
|
; CHECK-NEXT: frame-setup SEH_SaveFPLR_X -16
|
|
; CHECK-NEXT: $fp = frame-setup ADDXri $sp, 0, 0
|
|
; CHECK-NEXT: frame-setup SEH_SetFP
|
|
; CHECK-NEXT: frame-setup SEH_PrologEnd
|
|
; CHECK-NEXT: $x9 = frame-setup SUBXri $sp, 16, 0
|
|
; CHECK-NEXT: $x9 = frame-setup ADDVL_XXI $x9, -2, implicit $vg
|
|
; CHECK-NEXT: $sp = frame-setup ANDXri killed $x9, 7930
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogStart
|
|
; CHECK-NEXT: $sp = frame-destroy ADDXri $fp, 0, 0
|
|
; CHECK-NEXT: frame-destroy SEH_SetFP
|
|
; CHECK-NEXT: early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.3)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveFPLR_X -16
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogEnd
|
|
; CHECK-NEXT: RET_ReallyLR
|
|
RET_ReallyLR
|
|
...
|
|
---
|
|
name: test_address_sve
|
|
frameInfo:
|
|
maxAlignment: 16
|
|
stack:
|
|
- { id: 0, stack-id: scalable-vector, size: 16, alignment: 8 }
|
|
- { id: 1, stack-id: scalable-vector, size: 16, alignment: 8 }
|
|
- { id: 2, stack-id: scalable-vector, size: 2, alignment: 2 }
|
|
- { id: 3, stack-id: default, size: 16, alignment: 8 }
|
|
body: |
|
|
bb.0.entry:
|
|
liveins: $z0, $z1, $p0
|
|
|
|
; CHECK-LABEL: name: test_address_sve
|
|
; CHECK: fixedStack:
|
|
; CHECK: liveins: $z0, $z1, $p0, $lr
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.4)
|
|
; CHECK-NEXT: frame-setup SEH_SaveReg_X 30, -16
|
|
; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 16, 0
|
|
; CHECK-NEXT: frame-setup SEH_StackAlloc 16
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -3, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 3
|
|
; CHECK-NEXT: frame-setup SEH_PrologEnd
|
|
; CHECK-NEXT: $x8 = ADDXri $sp, 16, 0
|
|
; CHECK-NEXT: STR_ZXI $z0, killed $x8, 2
|
|
; CHECK-NEXT: $x8 = ADDXri $sp, 16, 0
|
|
; CHECK-NEXT: STR_ZXI $z1, killed $x8, 1
|
|
; CHECK-NEXT: $x8 = ADDXri $sp, 16, 0
|
|
; CHECK-NEXT: STR_PXI $p0, killed $x8, 7
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogStart
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 3, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 3
|
|
; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 16, 0
|
|
; CHECK-NEXT: frame-destroy SEH_StackAlloc 16
|
|
; CHECK-NEXT: early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.4)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveReg_X 30, -16
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogEnd
|
|
; CHECK-NEXT: RET_ReallyLR
|
|
STR_ZXI $z0, %stack.0, 0
|
|
STR_ZXI $z1, %stack.1, 0
|
|
STR_PXI $p0, %stack.2, 0
|
|
|
|
RET_ReallyLR
|
|
...
|
|
---
|
|
name: test_address_sve_fp
|
|
frameInfo:
|
|
maxAlignment: 16
|
|
isFrameAddressTaken: true
|
|
stack:
|
|
- { id: 0, stack-id: scalable-vector, size: 16, alignment: 8 }
|
|
- { id: 1, stack-id: scalable-vector, size: 16, alignment: 8 }
|
|
- { id: 2, stack-id: scalable-vector, size: 2, alignment: 2 }
|
|
- { id: 3, stack-id: default, size: 16, alignment: 8 }
|
|
body: |
|
|
bb.0.entry:
|
|
liveins: $z0, $z1, $p0
|
|
|
|
; CHECK-LABEL: name: test_address_sve_fp
|
|
; CHECK: fixedStack:
|
|
; CHECK: liveins: $z0, $z1, $p0, $lr
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: early-clobber $sp = frame-setup STPXpre killed $fp, killed $lr, $sp, -2 :: (store (s64) into %stack.4), (store (s64) into %stack.5)
|
|
; CHECK-NEXT: frame-setup SEH_SaveFPLR_X -16
|
|
; CHECK-NEXT: $fp = frame-setup ADDXri $sp, 0, 0
|
|
; CHECK-NEXT: frame-setup SEH_SetFP
|
|
; CHECK-NEXT: frame-setup SEH_PrologEnd
|
|
; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 16, 0
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -3, implicit $vg
|
|
; CHECK-NEXT: STR_ZXI $z0, $fp, -1
|
|
; CHECK-NEXT: STR_ZXI $z1, $fp, -2
|
|
; CHECK-NEXT: STR_PXI $p0, $fp, -17
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogStart
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 3, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 3
|
|
; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 16, 0
|
|
; CHECK-NEXT: frame-destroy SEH_StackAlloc 16
|
|
; CHECK-NEXT: early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.4), (load (s64) from %stack.5)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveFPLR_X -16
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogEnd
|
|
; CHECK-NEXT: RET_ReallyLR
|
|
STR_ZXI $z0, %stack.0, 0
|
|
STR_ZXI $z1, %stack.1, 0
|
|
STR_PXI $p0, %stack.2, 0
|
|
|
|
RET_ReallyLR
|
|
...
|
|
---
|
|
name: test_stack_arg_sve
|
|
fixedStack:
|
|
- { id: 0, stack-id: default, size: 16, alignment: 16, offset: 0 }
|
|
stack:
|
|
- { id: 0, stack-id: scalable-vector, size: 16, alignment: 16 }
|
|
- { id: 1, stack-id: default, size: 16, alignment: 16 }
|
|
body: |
|
|
bb.0.entry:
|
|
liveins: $x0
|
|
|
|
; CHECK-LABEL: name: test_stack_arg_sve
|
|
; CHECK: fixedStack:
|
|
; CHECK-NEXT: - { id: 0, type: default, offset: 0, size: 16, alignment: 16, stack-id: default,
|
|
; CHECK-NEXT: isImmutable: false, isAliased: false, callee-saved-register: '',
|
|
; CHECK-NEXT: callee-saved-restored: true, debug-info-variable: '', debug-info-expression: '',
|
|
; CHECK-NEXT: debug-info-location: '' }
|
|
; CHECK: liveins: $x0, $lr
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.2)
|
|
; CHECK-NEXT: frame-setup SEH_SaveReg_X 30, -16
|
|
; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 16, 0
|
|
; CHECK-NEXT: frame-setup SEH_StackAlloc 16
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -1, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 1
|
|
; CHECK-NEXT: frame-setup SEH_PrologEnd
|
|
; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 1, implicit $vg
|
|
; CHECK-NEXT: $x0 = LDRXui killed $x8, 4
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogStart
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 1, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 1
|
|
; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 16, 0
|
|
; CHECK-NEXT: frame-destroy SEH_StackAlloc 16
|
|
; CHECK-NEXT: early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.2)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveReg_X 30, -16
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogEnd
|
|
; CHECK-NEXT: RET_ReallyLR
|
|
$x0 = LDRXui %fixed-stack.0, 0
|
|
RET_ReallyLR
|
|
...
|
|
---
|
|
name: test_address_sve_out_of_range
|
|
frameInfo:
|
|
maxAlignment: 16
|
|
stack:
|
|
- { id: 0, stack-id: scalable-vector, size: 16, alignment: 16 }
|
|
- { id: 1, stack-id: scalable-vector, size: 3584, alignment: 16 }
|
|
- { id: 2, stack-id: scalable-vector, size: 512, alignment: 16 }
|
|
|
|
body: |
|
|
bb.0.entry:
|
|
liveins: $z0, $p0
|
|
|
|
; CHECK-LABEL: name: test_address_sve_out_of_range
|
|
; CHECK: fixedStack:
|
|
; CHECK: liveins: $z0, $p0, $lr
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.3)
|
|
; CHECK-NEXT: frame-setup SEH_SaveReg_X 30, -16
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -32, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 32
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -32, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 32
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -32, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 32
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -32, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 32
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -32, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 32
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -32, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 32
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -32, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 32
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -32, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 32
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -1, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 1
|
|
; CHECK-NEXT: frame-setup SEH_PrologEnd
|
|
; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 1, implicit $vg
|
|
; CHECK-NEXT: STR_ZXI $z0, killed $x8, 255
|
|
; CHECK-NEXT: $x8 = ADDPL_XXI $sp, 1, implicit $vg
|
|
; CHECK-NEXT: STR_PXI $p0, killed $x8, 255
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogStart
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 31, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 31
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 31, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 31
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 31, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 31
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 31, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 31
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 31, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 31
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 31, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 31
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 31, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 31
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 31, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 31
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 9, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 9
|
|
; CHECK-NEXT: early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.3)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveReg_X 30, -16
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogEnd
|
|
; CHECK-NEXT: RET_ReallyLR
|
|
STR_ZXI $z0, %stack.0, 0
|
|
STR_PXI $p0, %stack.1, 0
|
|
|
|
RET_ReallyLR
|
|
...
|
|
---
|
|
name: test_address_gpr_vla
|
|
frameInfo:
|
|
maxAlignment: 16
|
|
stack:
|
|
- { id: 0, stack-id: scalable-vector, size: 16, alignment: 8 }
|
|
- { id: 1, stack-id: default, size: 16, alignment: 8 }
|
|
- { id: 2, stack-id: default, type: variable-sized }
|
|
body: |
|
|
bb.0.entry:
|
|
liveins: $xzr
|
|
|
|
; CHECK-LABEL: name: test_address_gpr_vla
|
|
; CHECK: fixedStack:
|
|
; CHECK: liveins: $xzr, $lr
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $x19, $sp, -32 :: (store (s64) into %stack.5)
|
|
; CHECK-NEXT: frame-setup SEH_SaveReg_X 19, -32
|
|
; CHECK-NEXT: frame-setup STPXi killed $fp, killed $lr, $sp, 1 :: (store (s64) into %stack.3), (store (s64) into %stack.4)
|
|
; CHECK-NEXT: frame-setup SEH_SaveFPLR 8
|
|
; CHECK-NEXT: $fp = frame-setup ADDXri $sp, 8, 0
|
|
; CHECK-NEXT: frame-setup SEH_AddFP 8
|
|
; CHECK-NEXT: frame-setup SEH_PrologEnd
|
|
; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 16, 0
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -1, implicit $vg
|
|
; CHECK-NEXT: $x19 = ADDXri $sp, 0, 0
|
|
; CHECK-NEXT: STRXui $xzr, $x19, 0
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogStart
|
|
; CHECK-NEXT: $sp = frame-destroy SUBXri $fp, 8, 0
|
|
; CHECK-NEXT: frame-destroy SEH_AddFP 8
|
|
; CHECK-NEXT: $fp, $lr = frame-destroy LDPXi $sp, 1 :: (load (s64) from %stack.3), (load (s64) from %stack.4)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveFPLR 8
|
|
; CHECK-NEXT: early-clobber $sp, $x19 = frame-destroy LDRXpost $sp, 32 :: (load (s64) from %stack.5)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveReg_X 19, -32
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogEnd
|
|
; CHECK-NEXT: RET_ReallyLR
|
|
STRXui $xzr, %stack.1, 0
|
|
|
|
RET_ReallyLR
|
|
...
|
|
---
|
|
name: save_restore_pregs_sve
|
|
stack:
|
|
- { id: 0, stack-id: default, size: 32, alignment: 16 }
|
|
body: |
|
|
bb.0.entry:
|
|
|
|
; CHECK-LABEL: name: save_restore_pregs_sve
|
|
; CHECK: fixedStack:
|
|
; CHECK: liveins: $p4, $p5, $p6, $lr
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -1, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 1
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p4, $sp, 0 :: (store (s16) into %stack.4)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 4, 0
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p5, $sp, 1 :: (store (s16) into %stack.3)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 5, 1
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p6, $sp, 2 :: (store (s16) into %stack.2)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 6, 2
|
|
; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.1)
|
|
; CHECK-NEXT: frame-setup SEH_SaveReg_X 30, -16
|
|
; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 32, 0
|
|
; CHECK-NEXT: frame-setup SEH_StackAlloc 32
|
|
; CHECK-NEXT: frame-setup SEH_PrologEnd
|
|
; CHECK-NEXT: $p4 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p5 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p6 = IMPLICIT_DEF
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogStart
|
|
; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 32, 0
|
|
; CHECK-NEXT: frame-destroy SEH_StackAlloc 32
|
|
; CHECK-NEXT: early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.1)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveReg_X 30, -16
|
|
; CHECK-NEXT: $p4 = frame-destroy LDR_PXI $sp, 0 :: (load (s16) from %stack.4)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 4, 0
|
|
; CHECK-NEXT: $p5 = frame-destroy LDR_PXI $sp, 1 :: (load (s16) from %stack.3)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 5, 1
|
|
; CHECK-NEXT: $p6 = frame-destroy LDR_PXI $sp, 2 :: (load (s16) from %stack.2)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 6, 2
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 1, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 1
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogEnd
|
|
; CHECK-NEXT: RET_ReallyLR
|
|
$p4 = IMPLICIT_DEF
|
|
$p5 = IMPLICIT_DEF
|
|
$p6 = IMPLICIT_DEF
|
|
|
|
RET_ReallyLR
|
|
...
|
|
---
|
|
name: save_restore_zregs_sve
|
|
stack:
|
|
- { id: 0, stack-id: default, size: 32, alignment: 16 }
|
|
body: |
|
|
bb.0.entry:
|
|
|
|
; CHECK-LABEL: name: save_restore_zregs_sve
|
|
; CHECK: fixedStack:
|
|
; CHECK: liveins: $z8, $z9, $z10, $lr
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -3, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 3
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z8, $sp, 0 :: (store (s128) into %stack.4)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 8, 0
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z9, $sp, 1 :: (store (s128) into %stack.3)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 9, 1
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z10, $sp, 2 :: (store (s128) into %stack.2)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 10, 2
|
|
; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.1)
|
|
; CHECK-NEXT: frame-setup SEH_SaveReg_X 30, -16
|
|
; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 32, 0
|
|
; CHECK-NEXT: frame-setup SEH_StackAlloc 32
|
|
; CHECK-NEXT: frame-setup SEH_PrologEnd
|
|
; CHECK-NEXT: $z8 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $z9 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $z10 = IMPLICIT_DEF
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogStart
|
|
; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 32, 0
|
|
; CHECK-NEXT: frame-destroy SEH_StackAlloc 32
|
|
; CHECK-NEXT: early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.1)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveReg_X 30, -16
|
|
; CHECK-NEXT: $z8 = frame-destroy LDR_ZXI $sp, 0 :: (load (s128) from %stack.4)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 8, 0
|
|
; CHECK-NEXT: $z9 = frame-destroy LDR_ZXI $sp, 1 :: (load (s128) from %stack.3)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 9, 1
|
|
; CHECK-NEXT: $z10 = frame-destroy LDR_ZXI $sp, 2 :: (load (s128) from %stack.2)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 10, 2
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 3, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 3
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogEnd
|
|
; CHECK-NEXT: RET_ReallyLR
|
|
$z8 = IMPLICIT_DEF
|
|
$z9 = IMPLICIT_DEF
|
|
$z10 = IMPLICIT_DEF
|
|
|
|
RET_ReallyLR
|
|
...
|
|
---
|
|
name: save_restore_sve
|
|
stack:
|
|
- { id: 0, stack-id: scalable-vector, size: 16, alignment: 16 }
|
|
- { id: 1, stack-id: default, size: 32, alignment: 16 }
|
|
body: |
|
|
bb.0.entry:
|
|
|
|
; CHECK-LABEL: name: save_restore_sve
|
|
; CHECK: fixedStack:
|
|
; CHECK: liveins: $p4, $p5, $p6, $p7, $p8, $p9, $p10, $p11, $p12, $p13, $p14, $p15, $z8, $z9, $z10, $z11, $z12, $z13, $z14, $z15, $z16, $z17, $z18, $z19, $z20, $z21, $z22, $z23, $x20, $x19, $lr, $x21
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -18, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 18
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p4, $sp, 0 :: (store (s16) into %stack.33)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 4, 0
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p5, $sp, 1 :: (store (s16) into %stack.32)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 5, 1
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p6, $sp, 2 :: (store (s16) into %stack.31)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 6, 2
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p7, $sp, 3 :: (store (s16) into %stack.30)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 7, 3
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p8, $sp, 4 :: (store (s16) into %stack.29)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 8, 4
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p9, $sp, 5 :: (store (s16) into %stack.28)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 9, 5
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p10, $sp, 6 :: (store (s16) into %stack.27)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 10, 6
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p11, $sp, 7 :: (store (s16) into %stack.26)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 11, 7
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p12, $sp, 8 :: (store (s16) into %stack.25)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 12, 8
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p13, $sp, 9 :: (store (s16) into %stack.24)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 13, 9
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p14, $sp, 10 :: (store (s16) into %stack.23)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 14, 10
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p15, $sp, 11 :: (store (s16) into %stack.22)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 15, 11
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z8, $sp, 2 :: (store (s128) into %stack.21)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 8, 2
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z9, $sp, 3 :: (store (s128) into %stack.20)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 9, 3
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z10, $sp, 4 :: (store (s128) into %stack.19)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 10, 4
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z11, $sp, 5 :: (store (s128) into %stack.18)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 11, 5
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z12, $sp, 6 :: (store (s128) into %stack.17)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 12, 6
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z13, $sp, 7 :: (store (s128) into %stack.16)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 13, 7
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z14, $sp, 8 :: (store (s128) into %stack.15)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 14, 8
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z15, $sp, 9 :: (store (s128) into %stack.14)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 15, 9
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z16, $sp, 10 :: (store (s128) into %stack.13)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 16, 10
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z17, $sp, 11 :: (store (s128) into %stack.12)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 17, 11
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z18, $sp, 12 :: (store (s128) into %stack.11)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 18, 12
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z19, $sp, 13 :: (store (s128) into %stack.10)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 19, 13
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z20, $sp, 14 :: (store (s128) into %stack.9)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 20, 14
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z21, $sp, 15 :: (store (s128) into %stack.8)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 21, 15
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z22, $sp, 16 :: (store (s128) into %stack.7)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 22, 16
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z23, $sp, 17 :: (store (s128) into %stack.6)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 23, 17
|
|
; CHECK-NEXT: early-clobber $sp = frame-setup STPXpre killed $x19, killed $x20, $sp, -4 :: (store (s64) into %stack.4), (store (s64) into %stack.5)
|
|
; CHECK-NEXT: frame-setup SEH_SaveRegP_X 19, 20, -32
|
|
; CHECK-NEXT: frame-setup STPXi killed $x21, killed $lr, $sp, 2 :: (store (s64) into %stack.2), (store (s64) into %stack.3)
|
|
; CHECK-NEXT: frame-setup SEH_SaveRegP 21, 30, 16
|
|
; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 32, 0
|
|
; CHECK-NEXT: frame-setup SEH_StackAlloc 32
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -1, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 1
|
|
; CHECK-NEXT: frame-setup SEH_PrologEnd
|
|
; CHECK-NEXT: $z8_z9_z10_z11 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $z12_z13_z14_z15 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $z16_z17_z18_z19 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $z20_z21_z22_z23 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $z24_z25_z26_z27 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $z28_z29_z30_z31 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p4 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p5 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p6 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p7 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p8 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p9 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p10 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p11 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p12 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p13 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p14 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p15 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $x19 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $x20 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $x21 = IMPLICIT_DEF
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogStart
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 1, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 1
|
|
; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 32, 0
|
|
; CHECK-NEXT: frame-destroy SEH_StackAlloc 32
|
|
; CHECK-NEXT: $x21, $lr = frame-destroy LDPXi $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.3)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveRegP 21, 30, 16
|
|
; CHECK-NEXT: early-clobber $sp, $x19, $x20 = frame-destroy LDPXpost $sp, 4 :: (load (s64) from %stack.4), (load (s64) from %stack.5)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveRegP_X 19, 20, -32
|
|
; CHECK-NEXT: $z8 = frame-destroy LDR_ZXI $sp, 2 :: (load (s128) from %stack.21)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 8, 2
|
|
; CHECK-NEXT: $z9 = frame-destroy LDR_ZXI $sp, 3 :: (load (s128) from %stack.20)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 9, 3
|
|
; CHECK-NEXT: $z10 = frame-destroy LDR_ZXI $sp, 4 :: (load (s128) from %stack.19)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 10, 4
|
|
; CHECK-NEXT: $z11 = frame-destroy LDR_ZXI $sp, 5 :: (load (s128) from %stack.18)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 11, 5
|
|
; CHECK-NEXT: $z12 = frame-destroy LDR_ZXI $sp, 6 :: (load (s128) from %stack.17)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 12, 6
|
|
; CHECK-NEXT: $z13 = frame-destroy LDR_ZXI $sp, 7 :: (load (s128) from %stack.16)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 13, 7
|
|
; CHECK-NEXT: $z14 = frame-destroy LDR_ZXI $sp, 8 :: (load (s128) from %stack.15)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 14, 8
|
|
; CHECK-NEXT: $z15 = frame-destroy LDR_ZXI $sp, 9 :: (load (s128) from %stack.14)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 15, 9
|
|
; CHECK-NEXT: $z16 = frame-destroy LDR_ZXI $sp, 10 :: (load (s128) from %stack.13)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 16, 10
|
|
; CHECK-NEXT: $z17 = frame-destroy LDR_ZXI $sp, 11 :: (load (s128) from %stack.12)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 17, 11
|
|
; CHECK-NEXT: $z18 = frame-destroy LDR_ZXI $sp, 12 :: (load (s128) from %stack.11)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 18, 12
|
|
; CHECK-NEXT: $z19 = frame-destroy LDR_ZXI $sp, 13 :: (load (s128) from %stack.10)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 19, 13
|
|
; CHECK-NEXT: $z20 = frame-destroy LDR_ZXI $sp, 14 :: (load (s128) from %stack.9)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 20, 14
|
|
; CHECK-NEXT: $z21 = frame-destroy LDR_ZXI $sp, 15 :: (load (s128) from %stack.8)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 21, 15
|
|
; CHECK-NEXT: $z22 = frame-destroy LDR_ZXI $sp, 16 :: (load (s128) from %stack.7)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 22, 16
|
|
; CHECK-NEXT: $z23 = frame-destroy LDR_ZXI $sp, 17 :: (load (s128) from %stack.6)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 23, 17
|
|
; CHECK-NEXT: $p4 = frame-destroy LDR_PXI $sp, 0 :: (load (s16) from %stack.33)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 4, 0
|
|
; CHECK-NEXT: $p5 = frame-destroy LDR_PXI $sp, 1 :: (load (s16) from %stack.32)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 5, 1
|
|
; CHECK-NEXT: $p6 = frame-destroy LDR_PXI $sp, 2 :: (load (s16) from %stack.31)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 6, 2
|
|
; CHECK-NEXT: $p7 = frame-destroy LDR_PXI $sp, 3 :: (load (s16) from %stack.30)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 7, 3
|
|
; CHECK-NEXT: $p8 = frame-destroy LDR_PXI $sp, 4 :: (load (s16) from %stack.29)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 8, 4
|
|
; CHECK-NEXT: $p9 = frame-destroy LDR_PXI $sp, 5 :: (load (s16) from %stack.28)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 9, 5
|
|
; CHECK-NEXT: $p10 = frame-destroy LDR_PXI $sp, 6 :: (load (s16) from %stack.27)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 10, 6
|
|
; CHECK-NEXT: $p11 = frame-destroy LDR_PXI $sp, 7 :: (load (s16) from %stack.26)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 11, 7
|
|
; CHECK-NEXT: $p12 = frame-destroy LDR_PXI $sp, 8 :: (load (s16) from %stack.25)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 12, 8
|
|
; CHECK-NEXT: $p13 = frame-destroy LDR_PXI $sp, 9 :: (load (s16) from %stack.24)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 13, 9
|
|
; CHECK-NEXT: $p14 = frame-destroy LDR_PXI $sp, 10 :: (load (s16) from %stack.23)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 14, 10
|
|
; CHECK-NEXT: $p15 = frame-destroy LDR_PXI $sp, 11 :: (load (s16) from %stack.22)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 15, 11
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 18, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 18
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogEnd
|
|
; CHECK-NEXT: RET_ReallyLR
|
|
$z8_z9_z10_z11 = IMPLICIT_DEF
|
|
$z12_z13_z14_z15 = IMPLICIT_DEF
|
|
$z16_z17_z18_z19 = IMPLICIT_DEF
|
|
$z20_z21_z22_z23 = IMPLICIT_DEF
|
|
$z24_z25_z26_z27 = IMPLICIT_DEF
|
|
$z28_z29_z30_z31 = IMPLICIT_DEF
|
|
$p4 = IMPLICIT_DEF
|
|
$p5 = IMPLICIT_DEF
|
|
$p6 = IMPLICIT_DEF
|
|
$p7 = IMPLICIT_DEF
|
|
$p8 = IMPLICIT_DEF
|
|
$p9 = IMPLICIT_DEF
|
|
$p10 = IMPLICIT_DEF
|
|
$p11 = IMPLICIT_DEF
|
|
$p12 = IMPLICIT_DEF
|
|
$p13 = IMPLICIT_DEF
|
|
$p14 = IMPLICIT_DEF
|
|
$p15 = IMPLICIT_DEF
|
|
|
|
$x19 = IMPLICIT_DEF
|
|
$x20 = IMPLICIT_DEF
|
|
$x21 = IMPLICIT_DEF
|
|
|
|
RET_ReallyLR
|
|
...
|
|
---
|
|
name: save_restore_sve_realign
|
|
stack:
|
|
- { id: 0, stack-id: scalable-vector, size: 16, alignment: 16 }
|
|
- { id: 1, stack-id: default, size: 16, alignment: 32 }
|
|
body: |
|
|
bb.0.entry:
|
|
|
|
; CHECK-LABEL: name: save_restore_sve_realign
|
|
; CHECK: fixedStack:
|
|
; CHECK: liveins: $p4, $p5, $p6, $p7, $p8, $p9, $p10, $p11, $p12, $p13, $p14, $p15, $z8, $z9, $z10, $z11, $z12, $z13, $z14, $z15, $z16, $z17, $z18, $z19, $z20, $z21, $z22, $z23, $lr
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -18, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 18
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p4, $sp, 0 :: (store (s16) into %stack.31)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 4, 0
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p5, $sp, 1 :: (store (s16) into %stack.30)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 5, 1
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p6, $sp, 2 :: (store (s16) into %stack.29)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 6, 2
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p7, $sp, 3 :: (store (s16) into %stack.28)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 7, 3
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p8, $sp, 4 :: (store (s16) into %stack.27)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 8, 4
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p9, $sp, 5 :: (store (s16) into %stack.26)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 9, 5
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p10, $sp, 6 :: (store (s16) into %stack.25)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 10, 6
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p11, $sp, 7 :: (store (s16) into %stack.24)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 11, 7
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p12, $sp, 8 :: (store (s16) into %stack.23)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 12, 8
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p13, $sp, 9 :: (store (s16) into %stack.22)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 13, 9
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p14, $sp, 10 :: (store (s16) into %stack.21)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 14, 10
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p15, $sp, 11 :: (store (s16) into %stack.20)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 15, 11
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z8, $sp, 2 :: (store (s128) into %stack.19)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 8, 2
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z9, $sp, 3 :: (store (s128) into %stack.18)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 9, 3
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z10, $sp, 4 :: (store (s128) into %stack.17)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 10, 4
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z11, $sp, 5 :: (store (s128) into %stack.16)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 11, 5
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z12, $sp, 6 :: (store (s128) into %stack.15)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 12, 6
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z13, $sp, 7 :: (store (s128) into %stack.14)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 13, 7
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z14, $sp, 8 :: (store (s128) into %stack.13)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 14, 8
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z15, $sp, 9 :: (store (s128) into %stack.12)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 15, 9
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z16, $sp, 10 :: (store (s128) into %stack.11)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 16, 10
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z17, $sp, 11 :: (store (s128) into %stack.10)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 17, 11
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z18, $sp, 12 :: (store (s128) into %stack.9)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 18, 12
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z19, $sp, 13 :: (store (s128) into %stack.8)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 19, 13
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z20, $sp, 14 :: (store (s128) into %stack.7)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 20, 14
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z21, $sp, 15 :: (store (s128) into %stack.6)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 21, 15
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z22, $sp, 16 :: (store (s128) into %stack.5)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 22, 16
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z23, $sp, 17 :: (store (s128) into %stack.4)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 23, 17
|
|
; CHECK-NEXT: early-clobber $sp = frame-setup STPXpre killed $fp, killed $lr, $sp, -2 :: (store (s64) into %stack.2), (store (s64) into %stack.3)
|
|
; CHECK-NEXT: frame-setup SEH_SaveFPLR_X -16
|
|
; CHECK-NEXT: $fp = frame-setup ADDXri $sp, 0, 0
|
|
; CHECK-NEXT: frame-setup SEH_SetFP
|
|
; CHECK-NEXT: frame-setup SEH_PrologEnd
|
|
; CHECK-NEXT: $x9 = frame-setup SUBXri $sp, 16, 0
|
|
; CHECK-NEXT: $x9 = frame-setup ADDVL_XXI $x9, -1, implicit $vg
|
|
; CHECK-NEXT: $sp = frame-setup ANDXri killed $x9, 7930
|
|
; CHECK-NEXT: $z8_z9_z10_z11 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $z12_z13_z14_z15 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $z16_z17_z18_z19 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $z20_z21_z22_z23 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $z24_z25_z26_z27 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $z28_z29_z30_z31 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p4 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p5 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p6 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p7 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p8 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p9 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p10 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p11 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p12 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p13 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p14 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p15 = IMPLICIT_DEF
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogStart
|
|
; CHECK-NEXT: $sp = frame-destroy ADDXri $fp, 0, 0
|
|
; CHECK-NEXT: frame-destroy SEH_SetFP
|
|
; CHECK-NEXT: early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.3)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveFPLR_X -16
|
|
; CHECK-NEXT: $z8 = frame-destroy LDR_ZXI $sp, 2 :: (load (s128) from %stack.19)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 8, 2
|
|
; CHECK-NEXT: $z9 = frame-destroy LDR_ZXI $sp, 3 :: (load (s128) from %stack.18)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 9, 3
|
|
; CHECK-NEXT: $z10 = frame-destroy LDR_ZXI $sp, 4 :: (load (s128) from %stack.17)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 10, 4
|
|
; CHECK-NEXT: $z11 = frame-destroy LDR_ZXI $sp, 5 :: (load (s128) from %stack.16)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 11, 5
|
|
; CHECK-NEXT: $z12 = frame-destroy LDR_ZXI $sp, 6 :: (load (s128) from %stack.15)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 12, 6
|
|
; CHECK-NEXT: $z13 = frame-destroy LDR_ZXI $sp, 7 :: (load (s128) from %stack.14)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 13, 7
|
|
; CHECK-NEXT: $z14 = frame-destroy LDR_ZXI $sp, 8 :: (load (s128) from %stack.13)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 14, 8
|
|
; CHECK-NEXT: $z15 = frame-destroy LDR_ZXI $sp, 9 :: (load (s128) from %stack.12)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 15, 9
|
|
; CHECK-NEXT: $z16 = frame-destroy LDR_ZXI $sp, 10 :: (load (s128) from %stack.11)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 16, 10
|
|
; CHECK-NEXT: $z17 = frame-destroy LDR_ZXI $sp, 11 :: (load (s128) from %stack.10)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 17, 11
|
|
; CHECK-NEXT: $z18 = frame-destroy LDR_ZXI $sp, 12 :: (load (s128) from %stack.9)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 18, 12
|
|
; CHECK-NEXT: $z19 = frame-destroy LDR_ZXI $sp, 13 :: (load (s128) from %stack.8)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 19, 13
|
|
; CHECK-NEXT: $z20 = frame-destroy LDR_ZXI $sp, 14 :: (load (s128) from %stack.7)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 20, 14
|
|
; CHECK-NEXT: $z21 = frame-destroy LDR_ZXI $sp, 15 :: (load (s128) from %stack.6)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 21, 15
|
|
; CHECK-NEXT: $z22 = frame-destroy LDR_ZXI $sp, 16 :: (load (s128) from %stack.5)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 22, 16
|
|
; CHECK-NEXT: $z23 = frame-destroy LDR_ZXI $sp, 17 :: (load (s128) from %stack.4)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 23, 17
|
|
; CHECK-NEXT: $p4 = frame-destroy LDR_PXI $sp, 0 :: (load (s16) from %stack.31)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 4, 0
|
|
; CHECK-NEXT: $p5 = frame-destroy LDR_PXI $sp, 1 :: (load (s16) from %stack.30)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 5, 1
|
|
; CHECK-NEXT: $p6 = frame-destroy LDR_PXI $sp, 2 :: (load (s16) from %stack.29)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 6, 2
|
|
; CHECK-NEXT: $p7 = frame-destroy LDR_PXI $sp, 3 :: (load (s16) from %stack.28)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 7, 3
|
|
; CHECK-NEXT: $p8 = frame-destroy LDR_PXI $sp, 4 :: (load (s16) from %stack.27)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 8, 4
|
|
; CHECK-NEXT: $p9 = frame-destroy LDR_PXI $sp, 5 :: (load (s16) from %stack.26)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 9, 5
|
|
; CHECK-NEXT: $p10 = frame-destroy LDR_PXI $sp, 6 :: (load (s16) from %stack.25)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 10, 6
|
|
; CHECK-NEXT: $p11 = frame-destroy LDR_PXI $sp, 7 :: (load (s16) from %stack.24)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 11, 7
|
|
; CHECK-NEXT: $p12 = frame-destroy LDR_PXI $sp, 8 :: (load (s16) from %stack.23)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 12, 8
|
|
; CHECK-NEXT: $p13 = frame-destroy LDR_PXI $sp, 9 :: (load (s16) from %stack.22)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 13, 9
|
|
; CHECK-NEXT: $p14 = frame-destroy LDR_PXI $sp, 10 :: (load (s16) from %stack.21)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 14, 10
|
|
; CHECK-NEXT: $p15 = frame-destroy LDR_PXI $sp, 11 :: (load (s16) from %stack.20)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 15, 11
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 18, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 18
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogEnd
|
|
; CHECK-NEXT: RET_ReallyLR
|
|
$z8_z9_z10_z11 = IMPLICIT_DEF
|
|
$z12_z13_z14_z15 = IMPLICIT_DEF
|
|
$z16_z17_z18_z19 = IMPLICIT_DEF
|
|
$z20_z21_z22_z23 = IMPLICIT_DEF
|
|
$z24_z25_z26_z27 = IMPLICIT_DEF
|
|
$z28_z29_z30_z31 = IMPLICIT_DEF
|
|
$p4 = IMPLICIT_DEF
|
|
$p5 = IMPLICIT_DEF
|
|
$p6 = IMPLICIT_DEF
|
|
$p7 = IMPLICIT_DEF
|
|
$p8 = IMPLICIT_DEF
|
|
$p9 = IMPLICIT_DEF
|
|
$p10 = IMPLICIT_DEF
|
|
$p11 = IMPLICIT_DEF
|
|
$p12 = IMPLICIT_DEF
|
|
$p13 = IMPLICIT_DEF
|
|
$p14 = IMPLICIT_DEF
|
|
$p15 = IMPLICIT_DEF
|
|
|
|
RET_ReallyLR
|
|
...
|
|
---
|
|
name: frame_layout
|
|
stack:
|
|
- { id: 0, type: default, size: 32, alignment: 16, stack-id: scalable-vector }
|
|
- { id: 1, type: default, size: 4, alignment: 2, stack-id: scalable-vector }
|
|
- { id: 2, type: default, size: 16, alignment: 16, stack-id: scalable-vector }
|
|
- { id: 3, type: default, size: 2, alignment: 2, stack-id: scalable-vector }
|
|
- { id: 4, type: spill-slot, size: 16, alignment: 16, stack-id: scalable-vector }
|
|
- { id: 5, type: spill-slot, size: 2, alignment: 2, stack-id: scalable-vector }
|
|
body: |
|
|
bb.0.entry:
|
|
|
|
; Trigger some callee saves
|
|
; CHECK-LABEL: name: frame_layout
|
|
; CHECK: fixedStack:
|
|
; CHECK: liveins: $p4, $p15, $z8, $z23, $lr
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -3, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 3
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p4, $sp, 0 :: (store (s16) into %stack.10)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 4, 0
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p15, $sp, 1 :: (store (s16) into %stack.9)
|
|
; CHECK-NEXT: frame-setup SEH_SavePReg 15, 1
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z8, $sp, 1 :: (store (s128) into %stack.8)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 8, 1
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z23, $sp, 2 :: (store (s128) into %stack.7)
|
|
; CHECK-NEXT: frame-setup SEH_SaveZReg 23, 2
|
|
; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.6)
|
|
; CHECK-NEXT: frame-setup SEH_SaveReg_X 30, -16
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -7, implicit $vg
|
|
; CHECK-NEXT: frame-setup SEH_AllocZ 7
|
|
; CHECK-NEXT: frame-setup SEH_PrologEnd
|
|
; CHECK-NEXT: $z8 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $z23 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p4 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p15 = IMPLICIT_DEF
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogStart
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 7, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 7
|
|
; CHECK-NEXT: early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.6)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveReg_X 30, -16
|
|
; CHECK-NEXT: $z8 = frame-destroy LDR_ZXI $sp, 1 :: (load (s128) from %stack.8)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 8, 1
|
|
; CHECK-NEXT: $z23 = frame-destroy LDR_ZXI $sp, 2 :: (load (s128) from %stack.7)
|
|
; CHECK-NEXT: frame-destroy SEH_SaveZReg 23, 2
|
|
; CHECK-NEXT: $p4 = frame-destroy LDR_PXI $sp, 0 :: (load (s16) from %stack.10)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 4, 0
|
|
; CHECK-NEXT: $p15 = frame-destroy LDR_PXI $sp, 1 :: (load (s16) from %stack.9)
|
|
; CHECK-NEXT: frame-destroy SEH_SavePReg 15, 1
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 3, implicit $vg
|
|
; CHECK-NEXT: frame-destroy SEH_AllocZ 3
|
|
; CHECK-NEXT: frame-destroy SEH_EpilogEnd
|
|
; CHECK-NEXT: RET_ReallyLR
|
|
$z8 = IMPLICIT_DEF
|
|
$z23 = IMPLICIT_DEF
|
|
$p4 = IMPLICIT_DEF
|
|
$p15 = IMPLICIT_DEF
|
|
|
|
RET_ReallyLR
|
|
...
|
|
---
|
|
name: test_nounwind_layout
|
|
stack:
|
|
body: |
|
|
bb.0.entry:
|
|
; CHECK-LABEL: name: test_nounwind_layout
|
|
; CHECK: fixedStack:
|
|
; CHECK: liveins: $p8, $z8, $lr, $x20
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -2, implicit $vg
|
|
; CHECK-NEXT: frame-setup STR_PXI killed $p8, $sp, 0 :: (store (s16) into %stack.3)
|
|
; CHECK-NEXT: frame-setup STR_ZXI killed $z8, $sp, 1 :: (store (s128) into %stack.2)
|
|
; CHECK-NEXT: early-clobber $sp = frame-setup STPXpre killed $x20, killed $lr, $sp, -2 :: (store (s64) into %stack.0), (store (s64) into %stack.1)
|
|
; CHECK-NEXT: $x20 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $p8 = IMPLICIT_DEF
|
|
; CHECK-NEXT: $z8 = IMPLICIT_DEF
|
|
; CHECK-NEXT: early-clobber $sp, $x20, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.0), (load (s64) from %stack.1)
|
|
; CHECK-NEXT: $z8 = frame-destroy LDR_ZXI $sp, 1 :: (load (s128) from %stack.2)
|
|
; CHECK-NEXT: $p8 = frame-destroy LDR_PXI $sp, 0 :: (load (s16) from %stack.3)
|
|
; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 2, implicit $vg
|
|
; CHECK-NEXT: RET_ReallyLR
|
|
$x20 = IMPLICIT_DEF
|
|
$p8 = IMPLICIT_DEF
|
|
$z8 = IMPLICIT_DEF
|
|
RET_ReallyLR
|
|
...
|