summaryrefslogtreecommitdiff
path: root/test/CodeGen/AArch64/swifterror.ll
diff options
context:
space:
mode:
Diffstat (limited to 'test/CodeGen/AArch64/swifterror.ll')
-rw-r--r--test/CodeGen/AArch64/swifterror.ll27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/CodeGen/AArch64/swifterror.ll b/test/CodeGen/AArch64/swifterror.ll
index 69bf3510cc5a..bc28f477c810 100644
--- a/test/CodeGen/AArch64/swifterror.ll
+++ b/test/CodeGen/AArch64/swifterror.ll
@@ -597,3 +597,30 @@ entry:
tail call void @acallee(i8* null)
ret void
}
+
+declare swiftcc void @foo2(%swift_error** swifterror)
+
+; Make sure we properly assign registers during fast-isel.
+; CHECK-O0-LABEL: testAssign
+; CHECK-O0: mov [[TMP:x.*]], xzr
+; CHECK-O0: mov x21, [[TMP]]
+; CHECK-O0: bl _foo2
+; CHECK-O0: str x21, [s[[STK:.*]]]
+; CHECK-O0: ldr x0, [s[[STK]]]
+
+; CHECK-APPLE-LABEL: testAssign
+; CHECK-APPLE: mov x21, xzr
+; CHECK-APPLE: bl _foo2
+; CHECK-APPLE: mov x0, x21
+
+define swiftcc %swift_error* @testAssign(i8* %error_ref) {
+entry:
+ %error_ptr = alloca swifterror %swift_error*
+ store %swift_error* null, %swift_error** %error_ptr
+ call swiftcc void @foo2(%swift_error** swifterror %error_ptr)
+ br label %a
+
+a:
+ %error = load %swift_error*, %swift_error** %error_ptr
+ ret %swift_error* %error
+}