144 lines
7.2 KiB
YAML
144 lines
7.2 KiB
YAML
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
|
# RUN: llc -run-pass=regallocfast,prologepilog -simplify-mir -o - %s | FileCheck %s
|
|
|
|
# This test checks that the MIRParser correctly clobbers the registers
|
|
# that are not preserved by the unwinder (when the MIR contains an EH pad).
|
|
--- |
|
|
; ModuleID = '<stdin>'
|
|
source_filename = "<stdin>"
|
|
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
|
|
target triple = "aarch64-unknown-linux-gnu"
|
|
|
|
define aarch64_vector_pcs <4 x i32> @invoke_callee_may_throw_neon(<4 x i32> %v) personality i8 0 {
|
|
%result = invoke aarch64_vector_pcs <4 x i32> @may_throw_neon(<4 x i32> %v)
|
|
to label %.Lcontinue unwind label %.Lunwind
|
|
|
|
.Lcontinue: ; preds = %0
|
|
ret <4 x i32> %result
|
|
|
|
.Lunwind: ; preds = %0
|
|
%lp = landingpad { i8*, i32 }
|
|
cleanup
|
|
ret <4 x i32> %v
|
|
}
|
|
|
|
declare aarch64_vector_pcs <4 x i32> @may_throw_neon(<4 x i32>)
|
|
|
|
...
|
|
---
|
|
name: invoke_callee_may_throw_neon
|
|
alignment: 4
|
|
legalized: true
|
|
regBankSelected: true
|
|
selected: true
|
|
tracksRegLiveness: true
|
|
registers:
|
|
- { id: 0, class: fpr128 }
|
|
- { id: 1, class: fpr128 }
|
|
- { id: 2, class: _ }
|
|
- { id: 3, class: _ }
|
|
- { id: 4, class: _ }
|
|
- { id: 5, class: _ }
|
|
liveins:
|
|
- { reg: '$q0' }
|
|
frameInfo:
|
|
maxAlignment: 1
|
|
adjustsStack: true
|
|
hasCalls: true
|
|
maxCallFrameSize: 0
|
|
machineFunctionInfo: {}
|
|
body: |
|
|
; CHECK-LABEL: name: invoke_callee_may_throw_neon
|
|
; CHECK: bb.0 (%ir-block.0):
|
|
; CHECK: successors: %bb.1, %bb.2
|
|
; CHECK: liveins: $q0, $q22, $q23, $q20, $q21, $q18, $q19, $q16, $q17, $q14, $q15, $q12, $q13, $q10, $q11, $q8, $q9, $lr, $fp
|
|
; CHECK: $sp = frame-setup SUBXri $sp, 304, 0
|
|
; CHECK: frame-setup STPQi killed $q23, killed $q22, $sp, 2 :: (store 16 into %stack.19), (store 16 into %stack.18)
|
|
; CHECK: frame-setup STPQi killed $q21, killed $q20, $sp, 4 :: (store 16 into %stack.17), (store 16 into %stack.16)
|
|
; CHECK: frame-setup STPQi killed $q19, killed $q18, $sp, 6 :: (store 16 into %stack.15), (store 16 into %stack.14)
|
|
; CHECK: frame-setup STPQi killed $q17, killed $q16, $sp, 8 :: (store 16 into %stack.13), (store 16 into %stack.12)
|
|
; CHECK: frame-setup STPQi killed $q15, killed $q14, $sp, 10 :: (store 16 into %stack.11), (store 16 into %stack.10)
|
|
; CHECK: frame-setup STPQi killed $q13, killed $q12, $sp, 12 :: (store 16 into %stack.9), (store 16 into %stack.8)
|
|
; CHECK: frame-setup STPQi killed $q11, killed $q10, $sp, 14 :: (store 16 into %stack.7), (store 16 into %stack.6)
|
|
; CHECK: frame-setup STPQi killed $q9, killed $q8, $sp, 16 :: (store 16 into %stack.5), (store 16 into %stack.4)
|
|
; CHECK: frame-setup STPXi killed $fp, killed $lr, $sp, 36 :: (store 8 into %stack.3), (store 8 into %stack.2)
|
|
; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 304
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $w30, -8
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $w29, -16
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $b8, -32
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $b9, -48
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $b10, -64
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $b11, -80
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $b12, -96
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $b13, -112
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $b14, -128
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $b15, -144
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $b16, -160
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $b17, -176
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $b18, -192
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $b19, -208
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $b20, -224
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $b21, -240
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $b22, -256
|
|
; CHECK: frame-setup CFI_INSTRUCTION offset $b23, -272
|
|
; CHECK: STRQui $q0, $sp, 0 :: (store 16 into %stack.1)
|
|
; CHECK: EH_LABEL <mcsymbol .Ltmp0>
|
|
; CHECK: BL @may_throw_neon, csr_aarch64_aavpcs, implicit-def dead $lr, implicit $sp, implicit killed $q0, implicit-def $q0
|
|
; CHECK: STRQui killed $q0, $sp, 1 :: (store 16 into %stack.0)
|
|
; CHECK: EH_LABEL <mcsymbol .Ltmp1>
|
|
; CHECK: B %bb.1
|
|
; CHECK: bb.1..Lcontinue:
|
|
; CHECK: $q0 = LDRQui $sp, 1 :: (load 16 from %stack.0)
|
|
; CHECK: $fp, $lr = frame-destroy LDPXi $sp, 36 :: (load 8 from %stack.3), (load 8 from %stack.2)
|
|
; CHECK: $q9, $q8 = frame-destroy LDPQi $sp, 16 :: (load 16 from %stack.5), (load 16 from %stack.4)
|
|
; CHECK: $q11, $q10 = frame-destroy LDPQi $sp, 14 :: (load 16 from %stack.7), (load 16 from %stack.6)
|
|
; CHECK: $q13, $q12 = frame-destroy LDPQi $sp, 12 :: (load 16 from %stack.9), (load 16 from %stack.8)
|
|
; CHECK: $q15, $q14 = frame-destroy LDPQi $sp, 10 :: (load 16 from %stack.11), (load 16 from %stack.10)
|
|
; CHECK: $q17, $q16 = frame-destroy LDPQi $sp, 8 :: (load 16 from %stack.13), (load 16 from %stack.12)
|
|
; CHECK: $q19, $q18 = frame-destroy LDPQi $sp, 6 :: (load 16 from %stack.15), (load 16 from %stack.14)
|
|
; CHECK: $q21, $q20 = frame-destroy LDPQi $sp, 4 :: (load 16 from %stack.17), (load 16 from %stack.16)
|
|
; CHECK: $q23, $q22 = frame-destroy LDPQi $sp, 2 :: (load 16 from %stack.19), (load 16 from %stack.18)
|
|
; CHECK: $sp = frame-destroy ADDXri $sp, 304, 0
|
|
; CHECK: RET_ReallyLR implicit killed $q0
|
|
; CHECK: bb.2..Lunwind (landing-pad):
|
|
; CHECK: liveins: $x0, $x1
|
|
; CHECK: EH_LABEL <mcsymbol .Ltmp2>
|
|
; CHECK: $q0 = LDRQui $sp, 0 :: (load 16 from %stack.1)
|
|
; CHECK: $fp, $lr = frame-destroy LDPXi $sp, 36 :: (load 8 from %stack.3), (load 8 from %stack.2)
|
|
; CHECK: $q9, $q8 = frame-destroy LDPQi $sp, 16 :: (load 16 from %stack.5), (load 16 from %stack.4)
|
|
; CHECK: $q11, $q10 = frame-destroy LDPQi $sp, 14 :: (load 16 from %stack.7), (load 16 from %stack.6)
|
|
; CHECK: $q13, $q12 = frame-destroy LDPQi $sp, 12 :: (load 16 from %stack.9), (load 16 from %stack.8)
|
|
; CHECK: $q15, $q14 = frame-destroy LDPQi $sp, 10 :: (load 16 from %stack.11), (load 16 from %stack.10)
|
|
; CHECK: $q17, $q16 = frame-destroy LDPQi $sp, 8 :: (load 16 from %stack.13), (load 16 from %stack.12)
|
|
; CHECK: $q19, $q18 = frame-destroy LDPQi $sp, 6 :: (load 16 from %stack.15), (load 16 from %stack.14)
|
|
; CHECK: $q21, $q20 = frame-destroy LDPQi $sp, 4 :: (load 16 from %stack.17), (load 16 from %stack.16)
|
|
; CHECK: $q23, $q22 = frame-destroy LDPQi $sp, 2 :: (load 16 from %stack.19), (load 16 from %stack.18)
|
|
; CHECK: $sp = frame-destroy ADDXri $sp, 304, 0
|
|
; CHECK: RET_ReallyLR implicit killed $q0
|
|
bb.0 (%ir-block.0):
|
|
successors: %bb.1, %bb.2
|
|
liveins: $q0
|
|
|
|
%0:fpr128 = COPY $q0
|
|
EH_LABEL <mcsymbol .Ltmp0>
|
|
ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
|
|
$q0 = COPY %0
|
|
BL @may_throw_neon, csr_aarch64_aavpcs, implicit-def $lr, implicit $sp, implicit $q0, implicit-def $q0
|
|
%1:fpr128 = COPY $q0
|
|
ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
|
|
EH_LABEL <mcsymbol .Ltmp1>
|
|
B %bb.1
|
|
|
|
bb.1..Lcontinue:
|
|
$q0 = COPY %1
|
|
RET_ReallyLR implicit $q0
|
|
|
|
bb.2..Lunwind (landing-pad):
|
|
liveins: $x0, $x1
|
|
|
|
EH_LABEL <mcsymbol .Ltmp2>
|
|
$q0 = COPY %0
|
|
RET_ReallyLR implicit $q0
|
|
|
|
...
|