1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
# RUN: llc -run-pass=aarch64-expand-pseudo -mtriple=arm64-apple-ios -o - -emit-call-site-info %s -verify-machineinstrs | FileCheck %s
--- |
define void @test_1_callsite_info() {
ret void
}
define void @test_bl_pass_x0_arg() {
ret void
}
define void @test_bl_pass_x0_x1_x2_args() {
ret void
}
define void @test_bl_pass_w0_w1_args() {
ret void
}
define void @test_blr_pass_w0_w1_args() {
ret void
}
define void @foo(i32 %a) {
ret void
}
define void @test_blr_undef_arg_in_x0() {
ret void
}
declare ptr @attachedcall()
declare ptr @objc_retainAutoreleasedReturnValue()
...
---
# CHECK-LABEL: : test_1_callsite_info
# CHECK: bb.0:
# CHECK-NEXT: liveins:
# CHECK-NEXT: {{ $}}
# CHECK-NEXT: BUNDLE implicit-def $lr, implicit-def $w30, implicit-def $sp, implicit-def $wsp, implicit-def dead $x0, implicit-def $fp, implicit-def $w29, implicit $x0, implicit $sp, implicit $xzr, implicit $fp {
# CHECK-NEXT: BLR $x0, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $x0
# CHECK-NEXT: ORRXrs $xzr, $fp, 0
# CHECK-NEXT: BL @attachedcall, implicit-def $lr, implicit internal $sp
# CHECK-NEXT: }
# CHECK-NEXT: RET undef $lr, implicit killed $w0
#
name: test_1_callsite_info
callSites:
- {bb: 0, offset: 0, fwdArgRegs:
- { arg: 0, reg: '$x0' } }
body: |
bb.0:
liveins: $lr, $x0
BLR_RVMARKER @attachedcall, $x0, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $x0
RET_ReallyLR implicit killed $w0
...
# CHECK-LABEL: : test_bl_pass_x0_arg
# CHECK: bb.0:
# CHECK-NEXT: liveins:
# CHECK-NEXT: {{ $}}
# CHECK-NEXT: BUNDLE implicit-def $lr, implicit-def $w30, implicit-def $sp, implicit-def $wsp, implicit-def dead $x0, implicit-def $fp, implicit-def $w29, implicit $sp, implicit $x0, implicit $xzr, implicit $fp {
# CHECK-NEXT: BL @foo, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x0, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $x0
# CHECK-NEXT: $fp = ORRXrs $xzr, $fp, 0
# CHECK-NEXT: BL @attachedcall, implicit-def $lr, implicit internal $sp
# CHECK-NEXT: }
# CHECK-NEXT: RET undef $lr, implicit killed $w0
#
name: test_bl_pass_x0_arg
body: |
bb.0:
liveins: $lr, $x0
BLR_RVMARKER @attachedcall, @foo, $x0, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $x0
RET_ReallyLR implicit killed $w0
...
# CHECK-LABEL: : test_bl_pass_x0_x1_x2_args
# CHECK: bb.0:
# CHECK-NEXT: liveins:
# CHECK-NEXT: {{ $}}
# CHECK-NEXT: BUNDLE implicit-def $lr, implicit-def $w30, implicit-def $sp, implicit-def $wsp, implicit-def $x0, implicit-def $w0, implicit-def $fp, implicit-def $w29, implicit $sp, implicit $x0, implicit $x1, implicit $x2, implicit $xzr, implicit $fp {
# CHECK-NEXT: BL @foo, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x0, implicit $x1, implicit $x2, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $x0
# CHECK-NEXT: $fp = ORRXrs $xzr, $fp, 0
# CHECK-NEXT: BL @attachedcall, implicit-def $lr, implicit internal $sp
# CHECK-NEXT: }
# CHECK-NEXT: RET undef $lr
#
name: test_bl_pass_x0_x1_x2_args
body: |
bb.0:
liveins: $lr, $x0, $x1, $x2
BLR_RVMARKER @attachedcall, @foo, $x0, $x1, $x2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $x0
RET_ReallyLR
...
# CHECK-LABEL: : test_bl_pass_w0_w1_args
# CHECK: bb.0:
# CHECK-NEXT: liveins:
# CHECK-NEXT: {{ $}}
# CHECK-NEXT: BUNDLE implicit-def $lr, implicit-def $w30, implicit-def $sp, implicit-def $wsp, implicit-def dead $x0, implicit-def $fp, implicit-def $w29, implicit $sp, implicit $w0, implicit $w1, implicit $xzr, implicit $fp {
# CHECK-NEXT: BL @foo, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $w0, implicit $w1, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $x0
# CHECK-NEXT: $fp = ORRXrs $xzr, $fp, 0
# CHECK-NEXT: BL @attachedcall, implicit-def $lr, implicit internal $sp
# CHECK-NEXT: }
# CHECK-NEXT: RET undef $lr, implicit killed $w0
#
name: test_bl_pass_w0_w1_args
body: |
bb.0:
liveins: $lr, $w0, $w1
BLR_RVMARKER @attachedcall, @foo, $w0, $w1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $x0
RET_ReallyLR implicit killed $w0
...
# CHECK-LABEL: : test_blr_pass_w0_w1_args
# CHECK: bb.0:
# CHECK-NEXT: liveins:
# CHECK-NEXT: {{ $}}
# CHECK-NEXT: BUNDLE implicit-def $lr, implicit-def $w30, implicit-def $sp, implicit-def $wsp, implicit-def dead $x0, implicit-def $fp, implicit-def $w29, implicit $x8, implicit $sp, implicit $w0, implicit $w1, implicit $xzr, implicit $fp {
# CHECK-NEXT: BLR $x8, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $w0, implicit $w1, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $x0
# CHECK-NEXT: $fp = ORRXrs $xzr, $fp, 0
# CHECK-NEXT: BL @attachedcall, implicit-def $lr, implicit internal $sp
# CHECK-NEXT: }
# CHECK-NEXT: RET undef $lr, implicit killed $w0
#
name: test_blr_pass_w0_w1_args
body: |
bb.0:
liveins: $lr, $x8, $w0, $w1
BLR_RVMARKER @attachedcall, $x8, $w0, $w1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $x0
RET_ReallyLR implicit killed $w0
...
# Test for https://github.com/llvm/llvm-project/issues/68005.
#
# CHECK-LABEL: : test_blr_undef_arg_in_x0
# CHECK: bb.0:
# CHECK-NEXT: liveins:
# CHECK-NEXT: {{ $}}
# CHECK-NEXT: BUNDLE implicit-def $lr, implicit-def $w30, implicit-def $sp, implicit-def $wsp, implicit-def dead $x0, implicit-def $fp, implicit-def $w29, implicit $sp, implicit undef $x0, implicit $xzr, implicit $fp {
# CHECK-NEXT: BL @foo, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit undef $x0, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $x0
# CHECK-NEXT: $fp = ORRXrs $xzr, $fp, 0
# CHECK-NEXT: BL @objc_retainAutoreleasedReturnValue, implicit-def $lr, implicit internal $sp
# CHECK-NEXT: }
# CHECK-NEXT: RET undef $lr
#
name: test_blr_undef_arg_in_x0
tracksRegLiveness: true
body: |
bb.0:
liveins: $lr
BLR_RVMARKER @objc_retainAutoreleasedReturnValue, @foo, undef $x0, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $x0
RET_ReallyLR
...
|