2061 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -frame-pointer=all -enable-shrink-wrap=false < %s -mtriple=aarch64-apple-ios -disable-post-ra | FileCheck -allow-deprecated-dag-overlap --check-prefix=CHECK-APPLE --check-prefix=CHECK-APPLE-AARCH64 %s3; RUN: llc -verify-machineinstrs -frame-pointer=all -O0 -fast-isel < %s -mtriple=aarch64-apple-ios -disable-post-ra | FileCheck -allow-deprecated-dag-overlap --check-prefix=CHECK-O0-AARCH64 %s4; RUN: llc -verify-machineinstrs -frame-pointer=all -enable-shrink-wrap=false < %s -mtriple=arm64_32-apple-ios -disable-post-ra | FileCheck -allow-deprecated-dag-overlap --check-prefix=CHECK-APPLE --check-prefix=CHECK-APPLE-ARM64_32 %s5; RUN: llc -verify-machineinstrs -O0 -fast-isel < %s -mtriple=arm64_32-apple-ios -disable-post-ra | FileCheck -allow-deprecated-dag-overlap --check-prefix=CHECK-O0-ARM64_32 %s6 7declare ptr @malloc(i64)8declare void @free(ptr)9%swift_error = type {i64, i8}10 11; This tests the basic usage of a swifterror parameter. "foo" is the function12; that takes a swifterror parameter and "caller" is the caller of "foo".13define float @foo(ptr swifterror %error_ptr_ref) {14; CHECK-APPLE-LABEL: foo:15; CHECK-APPLE: ; %bb.0: ; %entry16; CHECK-APPLE-NEXT: stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill17; CHECK-APPLE-NEXT: mov x29, sp18; CHECK-APPLE-NEXT: .cfi_def_cfa w29, 1619; CHECK-APPLE-NEXT: .cfi_offset w30, -820; CHECK-APPLE-NEXT: .cfi_offset w29, -1621; CHECK-APPLE-NEXT: mov w0, #16 ; =0x1022; CHECK-APPLE-NEXT: bl _malloc23; CHECK-APPLE-NEXT: fmov s0, #1.0000000024; CHECK-APPLE-NEXT: mov w8, #1 ; =0x125; CHECK-APPLE-NEXT: mov x21, x026; CHECK-APPLE-NEXT: strb w8, [x0, #8]27; CHECK-APPLE-NEXT: ldp x29, x30, [sp], #16 ; 16-byte Folded Reload28; CHECK-APPLE-NEXT: ret29;30; CHECK-O0-AARCH64-LABEL: foo:31; CHECK-O0-AARCH64: ; %bb.0: ; %entry32; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill33; CHECK-O0-AARCH64-NEXT: mov x29, sp34; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 1635; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -836; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -1637; CHECK-O0-AARCH64-NEXT: mov w8, #16 ; =0x1038; CHECK-O0-AARCH64-NEXT: mov w0, w839; CHECK-O0-AARCH64-NEXT: bl _malloc40; CHECK-O0-AARCH64-NEXT: mov x21, x041; CHECK-O0-AARCH64-NEXT: mov w8, #1 ; =0x142; CHECK-O0-AARCH64-NEXT: strb w8, [x0, #8]43; CHECK-O0-AARCH64-NEXT: fmov s0, #1.0000000044; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp], #16 ; 16-byte Folded Reload45; CHECK-O0-AARCH64-NEXT: ret46;47; CHECK-O0-ARM64_32-LABEL: foo:48; CHECK-O0-ARM64_32: ; %bb.0: ; %entry49; CHECK-O0-ARM64_32-NEXT: str x30, [sp, #-16]! ; 8-byte Folded Spill50; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 1651; CHECK-O0-ARM64_32-NEXT: .cfi_offset w30, -1652; CHECK-O0-ARM64_32-NEXT: mov w8, #16 ; =0x1053; CHECK-O0-ARM64_32-NEXT: mov w0, w854; CHECK-O0-ARM64_32-NEXT: bl _malloc55; CHECK-O0-ARM64_32-NEXT: mov x21, x056; CHECK-O0-ARM64_32-NEXT: mov w8, #1 ; =0x157; CHECK-O0-ARM64_32-NEXT: strb w8, [x0, #8]58; CHECK-O0-ARM64_32-NEXT: fmov s0, #1.0000000059; CHECK-O0-ARM64_32-NEXT: ldr x30, [sp], #16 ; 8-byte Folded Reload60; CHECK-O0-ARM64_32-NEXT: ret61 62entry:63 %call = call ptr @malloc(i64 16)64 store ptr %call, ptr %error_ptr_ref65 %tmp = getelementptr inbounds i8, ptr %call, i64 866 store i8 1, ptr %tmp67 ret float 1.068}69 70; "caller" calls "foo" that takes a swifterror parameter.71define float @caller(ptr %error_ref) {72; CHECK-APPLE-AARCH64-LABEL: caller:73; CHECK-APPLE-AARCH64: ; %bb.0: ; %entry74; CHECK-APPLE-AARCH64-NEXT: sub sp, sp, #6475; CHECK-APPLE-AARCH64-NEXT: stp x22, x21, [sp, #16] ; 16-byte Folded Spill76; CHECK-APPLE-AARCH64-NEXT: stp x20, x19, [sp, #32] ; 16-byte Folded Spill77; CHECK-APPLE-AARCH64-NEXT: stp x29, x30, [sp, #48] ; 16-byte Folded Spill78; CHECK-APPLE-AARCH64-NEXT: add x29, sp, #4879; CHECK-APPLE-AARCH64-NEXT: .cfi_def_cfa w29, 1680; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w30, -881; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w29, -1682; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w19, -2483; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w20, -3284; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w21, -4085; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w22, -4886; CHECK-APPLE-AARCH64-NEXT: mov x19, x087; CHECK-APPLE-AARCH64-NEXT: mov x21, xzr88; CHECK-APPLE-AARCH64-NEXT: bl _foo89; CHECK-APPLE-AARCH64-NEXT: mov x0, x2190; CHECK-APPLE-AARCH64-NEXT: cbnz x21, LBB1_291; CHECK-APPLE-AARCH64-NEXT: ; %bb.1: ; %cont92; CHECK-APPLE-AARCH64-NEXT: ldrb w8, [x0, #8]93; CHECK-APPLE-AARCH64-NEXT: strb w8, [x19]94; CHECK-APPLE-AARCH64-NEXT: LBB1_2: ; %handler95; CHECK-APPLE-AARCH64-NEXT: bl _free96; CHECK-APPLE-AARCH64-NEXT: fmov s0, #1.0000000097; CHECK-APPLE-AARCH64-NEXT: ldp x29, x30, [sp, #48] ; 16-byte Folded Reload98; CHECK-APPLE-AARCH64-NEXT: ldp x20, x19, [sp, #32] ; 16-byte Folded Reload99; CHECK-APPLE-AARCH64-NEXT: ldp x22, x21, [sp, #16] ; 16-byte Folded Reload100; CHECK-APPLE-AARCH64-NEXT: add sp, sp, #64101; CHECK-APPLE-AARCH64-NEXT: ret102;103; CHECK-O0-AARCH64-LABEL: caller:104; CHECK-O0-AARCH64: ; %bb.0: ; %entry105; CHECK-O0-AARCH64-NEXT: sub sp, sp, #64106; CHECK-O0-AARCH64-NEXT: stp x22, x21, [sp, #32] ; 16-byte Folded Spill107; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #48] ; 16-byte Folded Spill108; CHECK-O0-AARCH64-NEXT: add x29, sp, #48109; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 16110; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -8111; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -16112; CHECK-O0-AARCH64-NEXT: .cfi_offset w21, -24113; CHECK-O0-AARCH64-NEXT: .cfi_offset w22, -32114; CHECK-O0-AARCH64-NEXT: ; implicit-def: $x1115; CHECK-O0-AARCH64-NEXT: str x0, [sp, #8] ; 8-byte Spill116; CHECK-O0-AARCH64-NEXT: mov x21, xzr117; CHECK-O0-AARCH64-NEXT: bl _foo118; CHECK-O0-AARCH64-NEXT: str x21, [sp, #16] ; 8-byte Spill119; CHECK-O0-AARCH64-NEXT: cbnz x21, LBB1_2120; CHECK-O0-AARCH64-NEXT: ; %bb.1: ; %cont121; CHECK-O0-AARCH64-NEXT: ldr x9, [sp, #8] ; 8-byte Reload122; CHECK-O0-AARCH64-NEXT: ldr x8, [sp, #16] ; 8-byte Reload123; CHECK-O0-AARCH64-NEXT: ldrb w8, [x8, #8]124; CHECK-O0-AARCH64-NEXT: strb w8, [x9]125; CHECK-O0-AARCH64-NEXT: LBB1_2: ; %handler126; CHECK-O0-AARCH64-NEXT: ldr x0, [sp, #16] ; 8-byte Reload127; CHECK-O0-AARCH64-NEXT: bl _free128; CHECK-O0-AARCH64-NEXT: fmov s0, #1.00000000129; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp, #48] ; 16-byte Folded Reload130; CHECK-O0-AARCH64-NEXT: ldp x22, x21, [sp, #32] ; 16-byte Folded Reload131; CHECK-O0-AARCH64-NEXT: add sp, sp, #64132; CHECK-O0-AARCH64-NEXT: ret133;134; CHECK-APPLE-ARM64_32-LABEL: caller:135; CHECK-APPLE-ARM64_32: ; %bb.0: ; %entry136; CHECK-APPLE-ARM64_32-NEXT: sub sp, sp, #64137; CHECK-APPLE-ARM64_32-NEXT: stp x22, x21, [sp, #16] ; 16-byte Folded Spill138; CHECK-APPLE-ARM64_32-NEXT: stp x20, x19, [sp, #32] ; 16-byte Folded Spill139; CHECK-APPLE-ARM64_32-NEXT: stp x29, x30, [sp, #48] ; 16-byte Folded Spill140; CHECK-APPLE-ARM64_32-NEXT: add x29, sp, #48141; CHECK-APPLE-ARM64_32-NEXT: .cfi_def_cfa w29, 16142; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w30, -8143; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w29, -16144; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w19, -24145; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w20, -32146; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w21, -40147; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w22, -48148; CHECK-APPLE-ARM64_32-NEXT: mov x19, x0149; CHECK-APPLE-ARM64_32-NEXT: mov x21, xzr150; CHECK-APPLE-ARM64_32-NEXT: bl _foo151; CHECK-APPLE-ARM64_32-NEXT: mov x0, x21152; CHECK-APPLE-ARM64_32-NEXT: cbnz w0, LBB1_2153; CHECK-APPLE-ARM64_32-NEXT: ; %bb.1: ; %cont154; CHECK-APPLE-ARM64_32-NEXT: ldrb w8, [x0, #8]155; CHECK-APPLE-ARM64_32-NEXT: strb w8, [x19]156; CHECK-APPLE-ARM64_32-NEXT: LBB1_2: ; %handler157; CHECK-APPLE-ARM64_32-NEXT: bl _free158; CHECK-APPLE-ARM64_32-NEXT: fmov s0, #1.00000000159; CHECK-APPLE-ARM64_32-NEXT: ldp x29, x30, [sp, #48] ; 16-byte Folded Reload160; CHECK-APPLE-ARM64_32-NEXT: ldp x20, x19, [sp, #32] ; 16-byte Folded Reload161; CHECK-APPLE-ARM64_32-NEXT: ldp x22, x21, [sp, #16] ; 16-byte Folded Reload162; CHECK-APPLE-ARM64_32-NEXT: add sp, sp, #64163; CHECK-APPLE-ARM64_32-NEXT: ret164;165; CHECK-O0-ARM64_32-LABEL: caller:166; CHECK-O0-ARM64_32: ; %bb.0: ; %entry167; CHECK-O0-ARM64_32-NEXT: sub sp, sp, #64168; CHECK-O0-ARM64_32-NEXT: stp x22, x21, [sp, #32] ; 16-byte Folded Spill169; CHECK-O0-ARM64_32-NEXT: stp x29, x30, [sp, #48] ; 16-byte Folded Spill170; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 64171; CHECK-O0-ARM64_32-NEXT: .cfi_offset w30, -8172; CHECK-O0-ARM64_32-NEXT: .cfi_offset w29, -16173; CHECK-O0-ARM64_32-NEXT: .cfi_offset w21, -24174; CHECK-O0-ARM64_32-NEXT: .cfi_offset w22, -32175; CHECK-O0-ARM64_32-NEXT: ; implicit-def: $x1176; CHECK-O0-ARM64_32-NEXT: str x0, [sp, #8] ; 8-byte Spill177; CHECK-O0-ARM64_32-NEXT: mov x21, xzr178; CHECK-O0-ARM64_32-NEXT: bl _foo179; CHECK-O0-ARM64_32-NEXT: str x21, [sp, #16] ; 8-byte Spill180; CHECK-O0-ARM64_32-NEXT: cmp x21, #0181; CHECK-O0-ARM64_32-NEXT: b.ne LBB1_2182; CHECK-O0-ARM64_32-NEXT: ; %bb.1: ; %cont183; CHECK-O0-ARM64_32-NEXT: ldr x9, [sp, #8] ; 8-byte Reload184; CHECK-O0-ARM64_32-NEXT: ldr x8, [sp, #16] ; 8-byte Reload185; CHECK-O0-ARM64_32-NEXT: ldrb w8, [x8, #8]186; CHECK-O0-ARM64_32-NEXT: ; kill: def $w0 killed $w8187; CHECK-O0-ARM64_32-NEXT: strb w8, [x9]188; CHECK-O0-ARM64_32-NEXT: LBB1_2: ; %handler189; CHECK-O0-ARM64_32-NEXT: ldr x0, [sp, #16] ; 8-byte Reload190; CHECK-O0-ARM64_32-NEXT: bl _free191; CHECK-O0-ARM64_32-NEXT: fmov s0, #1.00000000192; CHECK-O0-ARM64_32-NEXT: ldp x29, x30, [sp, #48] ; 16-byte Folded Reload193; CHECK-O0-ARM64_32-NEXT: ldp x22, x21, [sp, #32] ; 16-byte Folded Reload194; CHECK-O0-ARM64_32-NEXT: add sp, sp, #64195; CHECK-O0-ARM64_32-NEXT: ret196; Access part of the error object and save it to error_ref197 198entry:199 %error_ptr_ref = alloca swifterror ptr200 store ptr null, ptr %error_ptr_ref201 %call = call float @foo(ptr swifterror %error_ptr_ref)202 %error_from_foo = load ptr, ptr %error_ptr_ref203 %had_error_from_foo = icmp ne ptr %error_from_foo, null204 br i1 %had_error_from_foo, label %handler, label %cont205cont:206 %v1 = getelementptr inbounds %swift_error, ptr %error_from_foo, i64 0, i32 1207 %t = load i8, ptr %v1208 store i8 %t, ptr %error_ref209 br label %handler210handler:211 call void @free(ptr %error_from_foo)212 ret float 1.0213}214 215; "caller2" is the caller of "foo", it calls "foo" inside a loop.216define float @caller2(ptr %error_ref) {217; CHECK-APPLE-AARCH64-LABEL: caller2:218; CHECK-APPLE-AARCH64: ; %bb.0: ; %entry219; CHECK-APPLE-AARCH64-NEXT: sub sp, sp, #80220; CHECK-APPLE-AARCH64-NEXT: stp d9, d8, [sp, #16] ; 16-byte Folded Spill221; CHECK-APPLE-AARCH64-NEXT: stp x22, x21, [sp, #32] ; 16-byte Folded Spill222; CHECK-APPLE-AARCH64-NEXT: stp x20, x19, [sp, #48] ; 16-byte Folded Spill223; CHECK-APPLE-AARCH64-NEXT: stp x29, x30, [sp, #64] ; 16-byte Folded Spill224; CHECK-APPLE-AARCH64-NEXT: add x29, sp, #64225; CHECK-APPLE-AARCH64-NEXT: .cfi_def_cfa w29, 16226; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w30, -8227; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w29, -16228; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w19, -24229; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w20, -32230; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w21, -40231; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w22, -48232; CHECK-APPLE-AARCH64-NEXT: .cfi_offset b8, -56233; CHECK-APPLE-AARCH64-NEXT: .cfi_offset b9, -64234; CHECK-APPLE-AARCH64-NEXT: fmov s8, #1.00000000235; CHECK-APPLE-AARCH64-NEXT: mov x19, x0236; CHECK-APPLE-AARCH64-NEXT: LBB2_1: ; %bb_loop237; CHECK-APPLE-AARCH64-NEXT: ; =>This Inner Loop Header: Depth=1238; CHECK-APPLE-AARCH64-NEXT: mov x21, xzr239; CHECK-APPLE-AARCH64-NEXT: bl _foo240; CHECK-APPLE-AARCH64-NEXT: cbnz x21, LBB2_4241; CHECK-APPLE-AARCH64-NEXT: ; %bb.2: ; %cont242; CHECK-APPLE-AARCH64-NEXT: ; in Loop: Header=BB2_1 Depth=1243; CHECK-APPLE-AARCH64-NEXT: fcmp s0, s8244; CHECK-APPLE-AARCH64-NEXT: b.le LBB2_1245; CHECK-APPLE-AARCH64-NEXT: ; %bb.3: ; %bb_end246; CHECK-APPLE-AARCH64-NEXT: ldrb w8, [x21, #8]247; CHECK-APPLE-AARCH64-NEXT: strb w8, [x19]248; CHECK-APPLE-AARCH64-NEXT: LBB2_4: ; %handler249; CHECK-APPLE-AARCH64-NEXT: mov x0, x21250; CHECK-APPLE-AARCH64-NEXT: bl _free251; CHECK-APPLE-AARCH64-NEXT: fmov s0, #1.00000000252; CHECK-APPLE-AARCH64-NEXT: ldp x29, x30, [sp, #64] ; 16-byte Folded Reload253; CHECK-APPLE-AARCH64-NEXT: ldp x20, x19, [sp, #48] ; 16-byte Folded Reload254; CHECK-APPLE-AARCH64-NEXT: ldp x22, x21, [sp, #32] ; 16-byte Folded Reload255; CHECK-APPLE-AARCH64-NEXT: ldp d9, d8, [sp, #16] ; 16-byte Folded Reload256; CHECK-APPLE-AARCH64-NEXT: add sp, sp, #80257; CHECK-APPLE-AARCH64-NEXT: ret258;259; CHECK-O0-AARCH64-LABEL: caller2:260; CHECK-O0-AARCH64: ; %bb.0: ; %entry261; CHECK-O0-AARCH64-NEXT: sub sp, sp, #64262; CHECK-O0-AARCH64-NEXT: stp x22, x21, [sp, #32] ; 16-byte Folded Spill263; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #48] ; 16-byte Folded Spill264; CHECK-O0-AARCH64-NEXT: add x29, sp, #48265; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 16266; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -8267; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -16268; CHECK-O0-AARCH64-NEXT: .cfi_offset w21, -24269; CHECK-O0-AARCH64-NEXT: .cfi_offset w22, -32270; CHECK-O0-AARCH64-NEXT: ; implicit-def: $x1271; CHECK-O0-AARCH64-NEXT: str x0, [sp, #16] ; 8-byte Spill272; CHECK-O0-AARCH64-NEXT: LBB2_1: ; %bb_loop273; CHECK-O0-AARCH64-NEXT: ; =>This Inner Loop Header: Depth=1274; CHECK-O0-AARCH64-NEXT: mov x21, xzr275; CHECK-O0-AARCH64-NEXT: bl _foo276; CHECK-O0-AARCH64-NEXT: str s0, [sp, #4] ; 4-byte Spill277; CHECK-O0-AARCH64-NEXT: str x21, [sp, #8] ; 8-byte Spill278; CHECK-O0-AARCH64-NEXT: cbnz x21, LBB2_4279; CHECK-O0-AARCH64-NEXT: ; %bb.2: ; %cont280; CHECK-O0-AARCH64-NEXT: ; in Loop: Header=BB2_1 Depth=1281; CHECK-O0-AARCH64-NEXT: ldr s0, [sp, #4] ; 4-byte Reload282; CHECK-O0-AARCH64-NEXT: fmov s1, #1.00000000283; CHECK-O0-AARCH64-NEXT: fcmp s0, s1284; CHECK-O0-AARCH64-NEXT: b.le LBB2_1285; CHECK-O0-AARCH64-NEXT: ; %bb.3: ; %bb_end286; CHECK-O0-AARCH64-NEXT: ldr x9, [sp, #16] ; 8-byte Reload287; CHECK-O0-AARCH64-NEXT: ldr x8, [sp, #8] ; 8-byte Reload288; CHECK-O0-AARCH64-NEXT: ldrb w8, [x8, #8]289; CHECK-O0-AARCH64-NEXT: strb w8, [x9]290; CHECK-O0-AARCH64-NEXT: LBB2_4: ; %handler291; CHECK-O0-AARCH64-NEXT: ldr x0, [sp, #8] ; 8-byte Reload292; CHECK-O0-AARCH64-NEXT: bl _free293; CHECK-O0-AARCH64-NEXT: fmov s0, #1.00000000294; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp, #48] ; 16-byte Folded Reload295; CHECK-O0-AARCH64-NEXT: ldp x22, x21, [sp, #32] ; 16-byte Folded Reload296; CHECK-O0-AARCH64-NEXT: add sp, sp, #64297; CHECK-O0-AARCH64-NEXT: ret298;299; CHECK-APPLE-ARM64_32-LABEL: caller2:300; CHECK-APPLE-ARM64_32: ; %bb.0: ; %entry301; CHECK-APPLE-ARM64_32-NEXT: sub sp, sp, #80302; CHECK-APPLE-ARM64_32-NEXT: stp d9, d8, [sp, #16] ; 16-byte Folded Spill303; CHECK-APPLE-ARM64_32-NEXT: stp x22, x21, [sp, #32] ; 16-byte Folded Spill304; CHECK-APPLE-ARM64_32-NEXT: stp x20, x19, [sp, #48] ; 16-byte Folded Spill305; CHECK-APPLE-ARM64_32-NEXT: stp x29, x30, [sp, #64] ; 16-byte Folded Spill306; CHECK-APPLE-ARM64_32-NEXT: add x29, sp, #64307; CHECK-APPLE-ARM64_32-NEXT: .cfi_def_cfa w29, 16308; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w30, -8309; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w29, -16310; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w19, -24311; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w20, -32312; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w21, -40313; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w22, -48314; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset b8, -56315; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset b9, -64316; CHECK-APPLE-ARM64_32-NEXT: fmov s8, #1.00000000317; CHECK-APPLE-ARM64_32-NEXT: mov x19, x0318; CHECK-APPLE-ARM64_32-NEXT: LBB2_1: ; %bb_loop319; CHECK-APPLE-ARM64_32-NEXT: ; =>This Inner Loop Header: Depth=1320; CHECK-APPLE-ARM64_32-NEXT: mov x21, xzr321; CHECK-APPLE-ARM64_32-NEXT: bl _foo322; CHECK-APPLE-ARM64_32-NEXT: cbnz w21, LBB2_4323; CHECK-APPLE-ARM64_32-NEXT: ; %bb.2: ; %cont324; CHECK-APPLE-ARM64_32-NEXT: ; in Loop: Header=BB2_1 Depth=1325; CHECK-APPLE-ARM64_32-NEXT: fcmp s0, s8326; CHECK-APPLE-ARM64_32-NEXT: b.le LBB2_1327; CHECK-APPLE-ARM64_32-NEXT: ; %bb.3: ; %bb_end328; CHECK-APPLE-ARM64_32-NEXT: ldrb w8, [x21, #8]329; CHECK-APPLE-ARM64_32-NEXT: strb w8, [x19]330; CHECK-APPLE-ARM64_32-NEXT: LBB2_4: ; %handler331; CHECK-APPLE-ARM64_32-NEXT: mov x0, x21332; CHECK-APPLE-ARM64_32-NEXT: bl _free333; CHECK-APPLE-ARM64_32-NEXT: fmov s0, #1.00000000334; CHECK-APPLE-ARM64_32-NEXT: ldp x29, x30, [sp, #64] ; 16-byte Folded Reload335; CHECK-APPLE-ARM64_32-NEXT: ldp x20, x19, [sp, #48] ; 16-byte Folded Reload336; CHECK-APPLE-ARM64_32-NEXT: ldp x22, x21, [sp, #32] ; 16-byte Folded Reload337; CHECK-APPLE-ARM64_32-NEXT: ldp d9, d8, [sp, #16] ; 16-byte Folded Reload338; CHECK-APPLE-ARM64_32-NEXT: add sp, sp, #80339; CHECK-APPLE-ARM64_32-NEXT: ret340;341; CHECK-O0-ARM64_32-LABEL: caller2:342; CHECK-O0-ARM64_32: ; %bb.0: ; %entry343; CHECK-O0-ARM64_32-NEXT: sub sp, sp, #64344; CHECK-O0-ARM64_32-NEXT: stp x22, x21, [sp, #32] ; 16-byte Folded Spill345; CHECK-O0-ARM64_32-NEXT: stp x29, x30, [sp, #48] ; 16-byte Folded Spill346; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 64347; CHECK-O0-ARM64_32-NEXT: .cfi_offset w30, -8348; CHECK-O0-ARM64_32-NEXT: .cfi_offset w29, -16349; CHECK-O0-ARM64_32-NEXT: .cfi_offset w21, -24350; CHECK-O0-ARM64_32-NEXT: .cfi_offset w22, -32351; CHECK-O0-ARM64_32-NEXT: ; implicit-def: $x1352; CHECK-O0-ARM64_32-NEXT: str x0, [sp, #16] ; 8-byte Spill353; CHECK-O0-ARM64_32-NEXT: LBB2_1: ; %bb_loop354; CHECK-O0-ARM64_32-NEXT: ; =>This Inner Loop Header: Depth=1355; CHECK-O0-ARM64_32-NEXT: mov x21, xzr356; CHECK-O0-ARM64_32-NEXT: bl _foo357; CHECK-O0-ARM64_32-NEXT: str s0, [sp, #4] ; 4-byte Spill358; CHECK-O0-ARM64_32-NEXT: str x21, [sp, #8] ; 8-byte Spill359; CHECK-O0-ARM64_32-NEXT: cmp x21, #0360; CHECK-O0-ARM64_32-NEXT: b.ne LBB2_4361; CHECK-O0-ARM64_32-NEXT: ; %bb.2: ; %cont362; CHECK-O0-ARM64_32-NEXT: ; in Loop: Header=BB2_1 Depth=1363; CHECK-O0-ARM64_32-NEXT: ldr s0, [sp, #4] ; 4-byte Reload364; CHECK-O0-ARM64_32-NEXT: fmov s1, #1.00000000365; CHECK-O0-ARM64_32-NEXT: fcmp s0, s1366; CHECK-O0-ARM64_32-NEXT: b.le LBB2_1367; CHECK-O0-ARM64_32-NEXT: ; %bb.3: ; %bb_end368; CHECK-O0-ARM64_32-NEXT: ldr x9, [sp, #16] ; 8-byte Reload369; CHECK-O0-ARM64_32-NEXT: ldr x8, [sp, #8] ; 8-byte Reload370; CHECK-O0-ARM64_32-NEXT: ldrb w8, [x8, #8]371; CHECK-O0-ARM64_32-NEXT: ; kill: def $w0 killed $w8372; CHECK-O0-ARM64_32-NEXT: strb w8, [x9]373; CHECK-O0-ARM64_32-NEXT: LBB2_4: ; %handler374; CHECK-O0-ARM64_32-NEXT: ldr x0, [sp, #8] ; 8-byte Reload375; CHECK-O0-ARM64_32-NEXT: bl _free376; CHECK-O0-ARM64_32-NEXT: fmov s0, #1.00000000377; CHECK-O0-ARM64_32-NEXT: ldp x29, x30, [sp, #48] ; 16-byte Folded Reload378; CHECK-O0-ARM64_32-NEXT: ldp x22, x21, [sp, #32] ; 16-byte Folded Reload379; CHECK-O0-ARM64_32-NEXT: add sp, sp, #64380; CHECK-O0-ARM64_32-NEXT: ret381; Access part of the error object and save it to error_ref382 383entry:384 %error_ptr_ref = alloca swifterror ptr385 br label %bb_loop386bb_loop:387 store ptr null, ptr %error_ptr_ref388 %call = call float @foo(ptr swifterror %error_ptr_ref)389 %error_from_foo = load ptr, ptr %error_ptr_ref390 %had_error_from_foo = icmp ne ptr %error_from_foo, null391 br i1 %had_error_from_foo, label %handler, label %cont392cont:393 %cmp = fcmp ogt float %call, 1.000000e+00394 br i1 %cmp, label %bb_end, label %bb_loop395bb_end:396 %v1 = getelementptr inbounds %swift_error, ptr %error_from_foo, i64 0, i32 1397 %t = load i8, ptr %v1398 store i8 %t, ptr %error_ref399 br label %handler400handler:401 call void @free(ptr %error_from_foo)402 ret float 1.0403}404 405; "foo_if" is a function that takes a swifterror parameter, it sets swifterror406; under a certain condition.407define float @foo_if(ptr swifterror %error_ptr_ref, i32 %cc) {408; CHECK-APPLE-LABEL: foo_if:409; CHECK-APPLE: ; %bb.0: ; %entry410; CHECK-APPLE-NEXT: stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill411; CHECK-APPLE-NEXT: mov x29, sp412; CHECK-APPLE-NEXT: .cfi_def_cfa w29, 16413; CHECK-APPLE-NEXT: .cfi_offset w30, -8414; CHECK-APPLE-NEXT: .cfi_offset w29, -16415; CHECK-APPLE-NEXT: cbz w0, LBB3_2416; CHECK-APPLE-NEXT: ; %bb.1: ; %gen_error417; CHECK-APPLE-NEXT: mov w0, #16 ; =0x10418; CHECK-APPLE-NEXT: bl _malloc419; CHECK-APPLE-NEXT: mov x21, x0420; CHECK-APPLE-NEXT: fmov s0, #1.00000000421; CHECK-APPLE-NEXT: mov w8, #1 ; =0x1422; CHECK-APPLE-NEXT: strb w8, [x0, #8]423; CHECK-APPLE-NEXT: ldp x29, x30, [sp], #16 ; 16-byte Folded Reload424; CHECK-APPLE-NEXT: ret425; CHECK-APPLE-NEXT: LBB3_2:426; CHECK-APPLE-NEXT: movi d0, #0000000000000000427; CHECK-APPLE-NEXT: ldp x29, x30, [sp], #16 ; 16-byte Folded Reload428; CHECK-APPLE-NEXT: ret429;430; CHECK-O0-AARCH64-LABEL: foo_if:431; CHECK-O0-AARCH64: ; %bb.0: ; %entry432; CHECK-O0-AARCH64-NEXT: sub sp, sp, #32433; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill434; CHECK-O0-AARCH64-NEXT: add x29, sp, #16435; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 16436; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -8437; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -16438; CHECK-O0-AARCH64-NEXT: str x21, [sp, #8] ; 8-byte Spill439; CHECK-O0-AARCH64-NEXT: cbz w0, LBB3_2440; CHECK-O0-AARCH64-NEXT: ; %bb.1: ; %gen_error441; CHECK-O0-AARCH64-NEXT: mov w8, #16 ; =0x10442; CHECK-O0-AARCH64-NEXT: mov w0, w8443; CHECK-O0-AARCH64-NEXT: bl _malloc444; CHECK-O0-AARCH64-NEXT: mov x21, x0445; CHECK-O0-AARCH64-NEXT: mov w8, #1 ; =0x1446; CHECK-O0-AARCH64-NEXT: strb w8, [x0, #8]447; CHECK-O0-AARCH64-NEXT: fmov s0, #1.00000000448; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload449; CHECK-O0-AARCH64-NEXT: add sp, sp, #32450; CHECK-O0-AARCH64-NEXT: ret451; CHECK-O0-AARCH64-NEXT: LBB3_2: ; %normal452; CHECK-O0-AARCH64-NEXT: ldr x21, [sp, #8] ; 8-byte Reload453; CHECK-O0-AARCH64-NEXT: movi d0, #0000000000000000454; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload455; CHECK-O0-AARCH64-NEXT: add sp, sp, #32456; CHECK-O0-AARCH64-NEXT: ret457;458; CHECK-O0-ARM64_32-LABEL: foo_if:459; CHECK-O0-ARM64_32: ; %bb.0: ; %entry460; CHECK-O0-ARM64_32-NEXT: sub sp, sp, #32461; CHECK-O0-ARM64_32-NEXT: str x30, [sp, #16] ; 8-byte Spill462; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 32463; CHECK-O0-ARM64_32-NEXT: .cfi_offset w30, -16464; CHECK-O0-ARM64_32-NEXT: str x21, [sp, #8] ; 8-byte Spill465; CHECK-O0-ARM64_32-NEXT: cbz w0, LBB3_2466; CHECK-O0-ARM64_32-NEXT: ; %bb.1: ; %gen_error467; CHECK-O0-ARM64_32-NEXT: mov w8, #16 ; =0x10468; CHECK-O0-ARM64_32-NEXT: mov w0, w8469; CHECK-O0-ARM64_32-NEXT: bl _malloc470; CHECK-O0-ARM64_32-NEXT: mov x21, x0471; CHECK-O0-ARM64_32-NEXT: mov w8, #1 ; =0x1472; CHECK-O0-ARM64_32-NEXT: strb w8, [x0, #8]473; CHECK-O0-ARM64_32-NEXT: fmov s0, #1.00000000474; CHECK-O0-ARM64_32-NEXT: ldr x30, [sp, #16] ; 8-byte Reload475; CHECK-O0-ARM64_32-NEXT: add sp, sp, #32476; CHECK-O0-ARM64_32-NEXT: ret477; CHECK-O0-ARM64_32-NEXT: LBB3_2: ; %normal478; CHECK-O0-ARM64_32-NEXT: ldr x21, [sp, #8] ; 8-byte Reload479; CHECK-O0-ARM64_32-NEXT: movi d0, #0000000000000000480; CHECK-O0-ARM64_32-NEXT: ldr x30, [sp, #16] ; 8-byte Reload481; CHECK-O0-ARM64_32-NEXT: add sp, sp, #32482; CHECK-O0-ARM64_32-NEXT: ret483 484; spill x21485; reload from stack486entry:487 %cond = icmp ne i32 %cc, 0488 br i1 %cond, label %gen_error, label %normal489 490gen_error:491 %call = call ptr @malloc(i64 16)492 store ptr %call, ptr %error_ptr_ref493 %tmp = getelementptr inbounds i8, ptr %call, i64 8494 store i8 1, ptr %tmp495 ret float 1.0496 497normal:498 ret float 0.0499}500 501; "foo_loop" is a function that takes a swifterror parameter, it sets swifterror502; under a certain condition inside a loop.503define float @foo_loop(ptr swifterror %error_ptr_ref, i32 %cc, float %cc2) {504; CHECK-APPLE-LABEL: foo_loop:505; CHECK-APPLE: ; %bb.0: ; %entry506; CHECK-APPLE-NEXT: stp d9, d8, [sp, #-48]! ; 16-byte Folded Spill507; CHECK-APPLE-NEXT: stp x20, x19, [sp, #16] ; 16-byte Folded Spill508; CHECK-APPLE-NEXT: stp x29, x30, [sp, #32] ; 16-byte Folded Spill509; CHECK-APPLE-NEXT: add x29, sp, #32510; CHECK-APPLE-NEXT: .cfi_def_cfa w29, 16511; CHECK-APPLE-NEXT: .cfi_offset w30, -8512; CHECK-APPLE-NEXT: .cfi_offset w29, -16513; CHECK-APPLE-NEXT: .cfi_offset w19, -24514; CHECK-APPLE-NEXT: .cfi_offset w20, -32515; CHECK-APPLE-NEXT: .cfi_offset b8, -40516; CHECK-APPLE-NEXT: .cfi_offset b9, -48517; CHECK-APPLE-NEXT: fmov s8, s0518; CHECK-APPLE-NEXT: mov w19, w0519; CHECK-APPLE-NEXT: mov x0, x21520; CHECK-APPLE-NEXT: fmov s9, #1.00000000521; CHECK-APPLE-NEXT: mov w20, #1 ; =0x1522; CHECK-APPLE-NEXT: b LBB4_2523; CHECK-APPLE-NEXT: LBB4_1: ; %bb_cont524; CHECK-APPLE-NEXT: ; in Loop: Header=BB4_2 Depth=1525; CHECK-APPLE-NEXT: fcmp s8, s9526; CHECK-APPLE-NEXT: b.gt LBB4_4527; CHECK-APPLE-NEXT: LBB4_2: ; %bb_loop528; CHECK-APPLE-NEXT: ; =>This Inner Loop Header: Depth=1529; CHECK-APPLE-NEXT: cbz w19, LBB4_1530; CHECK-APPLE-NEXT: ; %bb.3: ; %gen_error531; CHECK-APPLE-NEXT: ; in Loop: Header=BB4_2 Depth=1532; CHECK-APPLE-NEXT: mov w0, #16 ; =0x10533; CHECK-APPLE-NEXT: bl _malloc534; CHECK-APPLE-NEXT: strb w20, [x0, #8]535; CHECK-APPLE-NEXT: b LBB4_1536; CHECK-APPLE-NEXT: LBB4_4: ; %bb_end537; CHECK-APPLE-NEXT: movi d0, #0000000000000000538; CHECK-APPLE-NEXT: mov x21, x0539; CHECK-APPLE-NEXT: ldp x29, x30, [sp, #32] ; 16-byte Folded Reload540; CHECK-APPLE-NEXT: ldp x20, x19, [sp, #16] ; 16-byte Folded Reload541; CHECK-APPLE-NEXT: ldp d9, d8, [sp], #48 ; 16-byte Folded Reload542; CHECK-APPLE-NEXT: ret543;544; CHECK-O0-AARCH64-LABEL: foo_loop:545; CHECK-O0-AARCH64: ; %bb.0: ; %entry546; CHECK-O0-AARCH64-NEXT: sub sp, sp, #48547; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #32] ; 16-byte Folded Spill548; CHECK-O0-AARCH64-NEXT: add x29, sp, #32549; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 16550; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -8551; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -16552; CHECK-O0-AARCH64-NEXT: str s0, [sp, #16] ; 4-byte Spill553; CHECK-O0-AARCH64-NEXT: stur w0, [x29, #-12] ; 4-byte Folded Spill554; CHECK-O0-AARCH64-NEXT: stur x21, [x29, #-8] ; 8-byte Folded Spill555; CHECK-O0-AARCH64-NEXT: b LBB4_1556; CHECK-O0-AARCH64-NEXT: LBB4_1: ; %bb_loop557; CHECK-O0-AARCH64-NEXT: ; =>This Inner Loop Header: Depth=1558; CHECK-O0-AARCH64-NEXT: ldur w8, [x29, #-12] ; 4-byte Folded Reload559; CHECK-O0-AARCH64-NEXT: ldur x0, [x29, #-8] ; 8-byte Folded Reload560; CHECK-O0-AARCH64-NEXT: str x0, [sp, #8] ; 8-byte Spill561; CHECK-O0-AARCH64-NEXT: cbz w8, LBB4_3562; CHECK-O0-AARCH64-NEXT: ; %bb.2: ; %gen_error563; CHECK-O0-AARCH64-NEXT: ; in Loop: Header=BB4_1 Depth=1564; CHECK-O0-AARCH64-NEXT: mov w8, #16 ; =0x10565; CHECK-O0-AARCH64-NEXT: mov w0, w8566; CHECK-O0-AARCH64-NEXT: bl _malloc567; CHECK-O0-AARCH64-NEXT: mov x9, x0568; CHECK-O0-AARCH64-NEXT: mov w8, #1 ; =0x1569; CHECK-O0-AARCH64-NEXT: strb w8, [x9, #8]570; CHECK-O0-AARCH64-NEXT: str x0, [sp, #8] ; 8-byte Spill571; CHECK-O0-AARCH64-NEXT: LBB4_3: ; %bb_cont572; CHECK-O0-AARCH64-NEXT: ; in Loop: Header=BB4_1 Depth=1573; CHECK-O0-AARCH64-NEXT: ldr s0, [sp, #16] ; 4-byte Reload574; CHECK-O0-AARCH64-NEXT: ldr x0, [sp, #8] ; 8-byte Reload575; CHECK-O0-AARCH64-NEXT: str x0, [sp] ; 8-byte Spill576; CHECK-O0-AARCH64-NEXT: fmov s1, #1.00000000577; CHECK-O0-AARCH64-NEXT: fcmp s0, s1578; CHECK-O0-AARCH64-NEXT: stur x0, [x29, #-8] ; 8-byte Folded Spill579; CHECK-O0-AARCH64-NEXT: b.le LBB4_1580; CHECK-O0-AARCH64-NEXT: ; %bb.4: ; %bb_end581; CHECK-O0-AARCH64-NEXT: ldr x21, [sp] ; 8-byte Reload582; CHECK-O0-AARCH64-NEXT: movi d0, #0000000000000000583; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp, #32] ; 16-byte Folded Reload584; CHECK-O0-AARCH64-NEXT: add sp, sp, #48585; CHECK-O0-AARCH64-NEXT: ret586;587; CHECK-O0-ARM64_32-LABEL: foo_loop:588; CHECK-O0-ARM64_32: ; %bb.0: ; %entry589; CHECK-O0-ARM64_32-NEXT: sub sp, sp, #48590; CHECK-O0-ARM64_32-NEXT: str x30, [sp, #32] ; 8-byte Spill591; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 48592; CHECK-O0-ARM64_32-NEXT: .cfi_offset w30, -16593; CHECK-O0-ARM64_32-NEXT: str s0, [sp, #16] ; 4-byte Spill594; CHECK-O0-ARM64_32-NEXT: str w0, [sp, #20] ; 4-byte Spill595; CHECK-O0-ARM64_32-NEXT: str x21, [sp, #24] ; 8-byte Spill596; CHECK-O0-ARM64_32-NEXT: b LBB4_1597; CHECK-O0-ARM64_32-NEXT: LBB4_1: ; %bb_loop598; CHECK-O0-ARM64_32-NEXT: ; =>This Inner Loop Header: Depth=1599; CHECK-O0-ARM64_32-NEXT: ldr w8, [sp, #20] ; 4-byte Reload600; CHECK-O0-ARM64_32-NEXT: ldr x0, [sp, #24] ; 8-byte Reload601; CHECK-O0-ARM64_32-NEXT: str x0, [sp, #8] ; 8-byte Spill602; CHECK-O0-ARM64_32-NEXT: cbz w8, LBB4_3603; CHECK-O0-ARM64_32-NEXT: ; %bb.2: ; %gen_error604; CHECK-O0-ARM64_32-NEXT: ; in Loop: Header=BB4_1 Depth=1605; CHECK-O0-ARM64_32-NEXT: mov w8, #16 ; =0x10606; CHECK-O0-ARM64_32-NEXT: mov w0, w8607; CHECK-O0-ARM64_32-NEXT: bl _malloc608; CHECK-O0-ARM64_32-NEXT: mov x9, x0609; CHECK-O0-ARM64_32-NEXT: ; kill: def $x0 killed $x9610; CHECK-O0-ARM64_32-NEXT: mov x0, x9611; CHECK-O0-ARM64_32-NEXT: mov w8, #1 ; =0x1612; CHECK-O0-ARM64_32-NEXT: strb w8, [x9, #8]613; CHECK-O0-ARM64_32-NEXT: str x0, [sp, #8] ; 8-byte Spill614; CHECK-O0-ARM64_32-NEXT: LBB4_3: ; %bb_cont615; CHECK-O0-ARM64_32-NEXT: ; in Loop: Header=BB4_1 Depth=1616; CHECK-O0-ARM64_32-NEXT: ldr s0, [sp, #16] ; 4-byte Reload617; CHECK-O0-ARM64_32-NEXT: ldr x0, [sp, #8] ; 8-byte Reload618; CHECK-O0-ARM64_32-NEXT: str x0, [sp] ; 8-byte Spill619; CHECK-O0-ARM64_32-NEXT: fmov s1, #1.00000000620; CHECK-O0-ARM64_32-NEXT: fcmp s0, s1621; CHECK-O0-ARM64_32-NEXT: str x0, [sp, #24] ; 8-byte Spill622; CHECK-O0-ARM64_32-NEXT: b.le LBB4_1623; CHECK-O0-ARM64_32-NEXT: ; %bb.4: ; %bb_end624; CHECK-O0-ARM64_32-NEXT: ldr x21, [sp] ; 8-byte Reload625; CHECK-O0-ARM64_32-NEXT: movi d0, #0000000000000000626; CHECK-O0-ARM64_32-NEXT: ldr x30, [sp, #32] ; 8-byte Reload627; CHECK-O0-ARM64_32-NEXT: add sp, sp, #48628; CHECK-O0-ARM64_32-NEXT: ret629 630; spill x21631; spill x0632; reload from stack633 634; spill x21635; reload from stack636entry:637 br label %bb_loop638 639bb_loop:640 %cond = icmp ne i32 %cc, 0641 br i1 %cond, label %gen_error, label %bb_cont642 643gen_error:644 %call = call ptr @malloc(i64 16)645 store ptr %call, ptr %error_ptr_ref646 %tmp = getelementptr inbounds i8, ptr %call, i64 8647 store i8 1, ptr %tmp648 br label %bb_cont649 650bb_cont:651 %cmp = fcmp ogt float %cc2, 1.000000e+00652 br i1 %cmp, label %bb_end, label %bb_loop653bb_end:654 ret float 0.0655}656 657%struct.S = type { i32, i32, i32, i32, i32, i32 }658 659; "foo_sret" is a function that takes a swifterror parameter, it also has a sret660; parameter.661define void @foo_sret(ptr sret(%struct.S) %agg.result, i32 %val1, ptr swifterror %error_ptr_ref) {662; CHECK-APPLE-LABEL: foo_sret:663; CHECK-APPLE: ; %bb.0: ; %entry664; CHECK-APPLE-NEXT: stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill665; CHECK-APPLE-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill666; CHECK-APPLE-NEXT: add x29, sp, #16667; CHECK-APPLE-NEXT: .cfi_def_cfa w29, 16668; CHECK-APPLE-NEXT: .cfi_offset w30, -8669; CHECK-APPLE-NEXT: .cfi_offset w29, -16670; CHECK-APPLE-NEXT: .cfi_offset w19, -24671; CHECK-APPLE-NEXT: .cfi_offset w20, -32672; CHECK-APPLE-NEXT: mov w19, w0673; CHECK-APPLE-NEXT: mov x20, x8674; CHECK-APPLE-NEXT: mov w0, #16 ; =0x10675; CHECK-APPLE-NEXT: bl _malloc676; CHECK-APPLE-NEXT: mov w8, #1 ; =0x1677; CHECK-APPLE-NEXT: strb w8, [x0, #8]678; CHECK-APPLE-NEXT: mov x21, x0679; CHECK-APPLE-NEXT: str w19, [x20, #4]680; CHECK-APPLE-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload681; CHECK-APPLE-NEXT: ldp x20, x19, [sp], #32 ; 16-byte Folded Reload682; CHECK-APPLE-NEXT: ret683;684; CHECK-O0-AARCH64-LABEL: foo_sret:685; CHECK-O0-AARCH64: ; %bb.0: ; %entry686; CHECK-O0-AARCH64-NEXT: sub sp, sp, #32687; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill688; CHECK-O0-AARCH64-NEXT: add x29, sp, #16689; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 16690; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -8691; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -16692; CHECK-O0-AARCH64-NEXT: stur w0, [x29, #-4] ; 4-byte Folded Spill693; CHECK-O0-AARCH64-NEXT: str x8, [sp] ; 8-byte Spill694; CHECK-O0-AARCH64-NEXT: mov w8, #16 ; =0x10695; CHECK-O0-AARCH64-NEXT: mov w0, w8696; CHECK-O0-AARCH64-NEXT: bl _malloc697; CHECK-O0-AARCH64-NEXT: ldr x8, [sp] ; 8-byte Reload698; CHECK-O0-AARCH64-NEXT: mov x10, x0699; CHECK-O0-AARCH64-NEXT: ldur w0, [x29, #-4] ; 4-byte Folded Reload700; CHECK-O0-AARCH64-NEXT: mov x21, x10701; CHECK-O0-AARCH64-NEXT: mov w9, #1 ; =0x1702; CHECK-O0-AARCH64-NEXT: strb w9, [x10, #8]703; CHECK-O0-AARCH64-NEXT: str w0, [x8, #4]704; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload705; CHECK-O0-AARCH64-NEXT: add sp, sp, #32706; CHECK-O0-AARCH64-NEXT: ret707;708; CHECK-O0-ARM64_32-LABEL: foo_sret:709; CHECK-O0-ARM64_32: ; %bb.0: ; %entry710; CHECK-O0-ARM64_32-NEXT: sub sp, sp, #32711; CHECK-O0-ARM64_32-NEXT: str x30, [sp, #16] ; 8-byte Spill712; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 32713; CHECK-O0-ARM64_32-NEXT: .cfi_offset w30, -16714; CHECK-O0-ARM64_32-NEXT: str w0, [sp, #12] ; 4-byte Spill715; CHECK-O0-ARM64_32-NEXT: str x8, [sp] ; 8-byte Spill716; CHECK-O0-ARM64_32-NEXT: mov w8, #16 ; =0x10717; CHECK-O0-ARM64_32-NEXT: mov w0, w8718; CHECK-O0-ARM64_32-NEXT: bl _malloc719; CHECK-O0-ARM64_32-NEXT: ldr x8, [sp] ; 8-byte Reload720; CHECK-O0-ARM64_32-NEXT: mov x10, x0721; CHECK-O0-ARM64_32-NEXT: ldr w0, [sp, #12] ; 4-byte Reload722; CHECK-O0-ARM64_32-NEXT: mov x21, x10723; CHECK-O0-ARM64_32-NEXT: mov w9, #1 ; =0x1724; CHECK-O0-ARM64_32-NEXT: strb w9, [x10, #8]725; CHECK-O0-ARM64_32-NEXT: str w0, [x8, #4]726; CHECK-O0-ARM64_32-NEXT: ldr x30, [sp, #16] ; 8-byte Reload727; CHECK-O0-ARM64_32-NEXT: add sp, sp, #32728; CHECK-O0-ARM64_32-NEXT: ret729 730; spill x8731; reload from stack732entry:733 %call = call ptr @malloc(i64 16)734 store ptr %call, ptr %error_ptr_ref735 %tmp = getelementptr inbounds i8, ptr %call, i64 8736 store i8 1, ptr %tmp737 %v2 = getelementptr inbounds %struct.S, ptr %agg.result, i32 0, i32 1738 store i32 %val1, ptr %v2739 ret void740}741 742; "caller3" calls "foo_sret" that takes a swifterror parameter.743define float @caller3(ptr %error_ref) {744; CHECK-APPLE-AARCH64-LABEL: caller3:745; CHECK-APPLE-AARCH64: ; %bb.0: ; %entry746; CHECK-APPLE-AARCH64-NEXT: sub sp, sp, #80747; CHECK-APPLE-AARCH64-NEXT: stp x22, x21, [sp, #32] ; 16-byte Folded Spill748; CHECK-APPLE-AARCH64-NEXT: stp x20, x19, [sp, #48] ; 16-byte Folded Spill749; CHECK-APPLE-AARCH64-NEXT: stp x29, x30, [sp, #64] ; 16-byte Folded Spill750; CHECK-APPLE-AARCH64-NEXT: add x29, sp, #64751; CHECK-APPLE-AARCH64-NEXT: .cfi_def_cfa w29, 16752; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w30, -8753; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w29, -16754; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w19, -24755; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w20, -32756; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w21, -40757; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w22, -48758; CHECK-APPLE-AARCH64-NEXT: mov x19, x0759; CHECK-APPLE-AARCH64-NEXT: add x8, sp, #8760; CHECK-APPLE-AARCH64-NEXT: mov w0, #1 ; =0x1761; CHECK-APPLE-AARCH64-NEXT: mov x21, xzr762; CHECK-APPLE-AARCH64-NEXT: bl _foo_sret763; CHECK-APPLE-AARCH64-NEXT: mov x0, x21764; CHECK-APPLE-AARCH64-NEXT: cbnz x21, LBB6_2765; CHECK-APPLE-AARCH64-NEXT: ; %bb.1: ; %cont766; CHECK-APPLE-AARCH64-NEXT: ldrb w8, [x0, #8]767; CHECK-APPLE-AARCH64-NEXT: strb w8, [x19]768; CHECK-APPLE-AARCH64-NEXT: LBB6_2: ; %handler769; CHECK-APPLE-AARCH64-NEXT: bl _free770; CHECK-APPLE-AARCH64-NEXT: fmov s0, #1.00000000771; CHECK-APPLE-AARCH64-NEXT: ldp x29, x30, [sp, #64] ; 16-byte Folded Reload772; CHECK-APPLE-AARCH64-NEXT: ldp x20, x19, [sp, #48] ; 16-byte Folded Reload773; CHECK-APPLE-AARCH64-NEXT: ldp x22, x21, [sp, #32] ; 16-byte Folded Reload774; CHECK-APPLE-AARCH64-NEXT: add sp, sp, #80775; CHECK-APPLE-AARCH64-NEXT: ret776;777; CHECK-O0-AARCH64-LABEL: caller3:778; CHECK-O0-AARCH64: ; %bb.0: ; %entry779; CHECK-O0-AARCH64-NEXT: sub sp, sp, #80780; CHECK-O0-AARCH64-NEXT: stp x22, x21, [sp, #48] ; 16-byte Folded Spill781; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #64] ; 16-byte Folded Spill782; CHECK-O0-AARCH64-NEXT: add x29, sp, #64783; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 16784; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -8785; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -16786; CHECK-O0-AARCH64-NEXT: .cfi_offset w21, -24787; CHECK-O0-AARCH64-NEXT: .cfi_offset w22, -32788; CHECK-O0-AARCH64-NEXT: ; implicit-def: $x1789; CHECK-O0-AARCH64-NEXT: str x0, [sp] ; 8-byte Spill790; CHECK-O0-AARCH64-NEXT: mov x21, xzr791; CHECK-O0-AARCH64-NEXT: add x8, sp, #24792; CHECK-O0-AARCH64-NEXT: mov w0, #1 ; =0x1793; CHECK-O0-AARCH64-NEXT: bl _foo_sret794; CHECK-O0-AARCH64-NEXT: str x21, [sp, #8] ; 8-byte Spill795; CHECK-O0-AARCH64-NEXT: cbnz x21, LBB6_2796; CHECK-O0-AARCH64-NEXT: ; %bb.1: ; %cont797; CHECK-O0-AARCH64-NEXT: ldr x9, [sp] ; 8-byte Reload798; CHECK-O0-AARCH64-NEXT: ldr x8, [sp, #8] ; 8-byte Reload799; CHECK-O0-AARCH64-NEXT: ldrb w8, [x8, #8]800; CHECK-O0-AARCH64-NEXT: strb w8, [x9]801; CHECK-O0-AARCH64-NEXT: LBB6_2: ; %handler802; CHECK-O0-AARCH64-NEXT: ldr x0, [sp, #8] ; 8-byte Reload803; CHECK-O0-AARCH64-NEXT: bl _free804; CHECK-O0-AARCH64-NEXT: fmov s0, #1.00000000805; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp, #64] ; 16-byte Folded Reload806; CHECK-O0-AARCH64-NEXT: ldp x22, x21, [sp, #48] ; 16-byte Folded Reload807; CHECK-O0-AARCH64-NEXT: add sp, sp, #80808; CHECK-O0-AARCH64-NEXT: ret809;810; CHECK-APPLE-ARM64_32-LABEL: caller3:811; CHECK-APPLE-ARM64_32: ; %bb.0: ; %entry812; CHECK-APPLE-ARM64_32-NEXT: sub sp, sp, #80813; CHECK-APPLE-ARM64_32-NEXT: stp x22, x21, [sp, #32] ; 16-byte Folded Spill814; CHECK-APPLE-ARM64_32-NEXT: stp x20, x19, [sp, #48] ; 16-byte Folded Spill815; CHECK-APPLE-ARM64_32-NEXT: stp x29, x30, [sp, #64] ; 16-byte Folded Spill816; CHECK-APPLE-ARM64_32-NEXT: add x29, sp, #64817; CHECK-APPLE-ARM64_32-NEXT: .cfi_def_cfa w29, 16818; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w30, -8819; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w29, -16820; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w19, -24821; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w20, -32822; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w21, -40823; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w22, -48824; CHECK-APPLE-ARM64_32-NEXT: mov x19, x0825; CHECK-APPLE-ARM64_32-NEXT: add x8, sp, #8826; CHECK-APPLE-ARM64_32-NEXT: mov w0, #1 ; =0x1827; CHECK-APPLE-ARM64_32-NEXT: mov x21, xzr828; CHECK-APPLE-ARM64_32-NEXT: bl _foo_sret829; CHECK-APPLE-ARM64_32-NEXT: mov x0, x21830; CHECK-APPLE-ARM64_32-NEXT: cbnz w0, LBB6_2831; CHECK-APPLE-ARM64_32-NEXT: ; %bb.1: ; %cont832; CHECK-APPLE-ARM64_32-NEXT: ldrb w8, [x0, #8]833; CHECK-APPLE-ARM64_32-NEXT: strb w8, [x19]834; CHECK-APPLE-ARM64_32-NEXT: LBB6_2: ; %handler835; CHECK-APPLE-ARM64_32-NEXT: bl _free836; CHECK-APPLE-ARM64_32-NEXT: fmov s0, #1.00000000837; CHECK-APPLE-ARM64_32-NEXT: ldp x29, x30, [sp, #64] ; 16-byte Folded Reload838; CHECK-APPLE-ARM64_32-NEXT: ldp x20, x19, [sp, #48] ; 16-byte Folded Reload839; CHECK-APPLE-ARM64_32-NEXT: ldp x22, x21, [sp, #32] ; 16-byte Folded Reload840; CHECK-APPLE-ARM64_32-NEXT: add sp, sp, #80841; CHECK-APPLE-ARM64_32-NEXT: ret842;843; CHECK-O0-ARM64_32-LABEL: caller3:844; CHECK-O0-ARM64_32: ; %bb.0: ; %entry845; CHECK-O0-ARM64_32-NEXT: sub sp, sp, #80846; CHECK-O0-ARM64_32-NEXT: stp x22, x21, [sp, #48] ; 16-byte Folded Spill847; CHECK-O0-ARM64_32-NEXT: stp x29, x30, [sp, #64] ; 16-byte Folded Spill848; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 80849; CHECK-O0-ARM64_32-NEXT: .cfi_offset w30, -8850; CHECK-O0-ARM64_32-NEXT: .cfi_offset w29, -16851; CHECK-O0-ARM64_32-NEXT: .cfi_offset w21, -24852; CHECK-O0-ARM64_32-NEXT: .cfi_offset w22, -32853; CHECK-O0-ARM64_32-NEXT: ; implicit-def: $x1854; CHECK-O0-ARM64_32-NEXT: str x0, [sp] ; 8-byte Spill855; CHECK-O0-ARM64_32-NEXT: mov x21, xzr856; CHECK-O0-ARM64_32-NEXT: add x8, sp, #24857; CHECK-O0-ARM64_32-NEXT: mov w0, #1 ; =0x1858; CHECK-O0-ARM64_32-NEXT: bl _foo_sret859; CHECK-O0-ARM64_32-NEXT: str x21, [sp, #8] ; 8-byte Spill860; CHECK-O0-ARM64_32-NEXT: cmp x21, #0861; CHECK-O0-ARM64_32-NEXT: b.ne LBB6_2862; CHECK-O0-ARM64_32-NEXT: ; %bb.1: ; %cont863; CHECK-O0-ARM64_32-NEXT: ldr x9, [sp] ; 8-byte Reload864; CHECK-O0-ARM64_32-NEXT: ldr x8, [sp, #8] ; 8-byte Reload865; CHECK-O0-ARM64_32-NEXT: ldrb w8, [x8, #8]866; CHECK-O0-ARM64_32-NEXT: ; kill: def $w0 killed $w8867; CHECK-O0-ARM64_32-NEXT: strb w8, [x9]868; CHECK-O0-ARM64_32-NEXT: LBB6_2: ; %handler869; CHECK-O0-ARM64_32-NEXT: ldr x0, [sp, #8] ; 8-byte Reload870; CHECK-O0-ARM64_32-NEXT: bl _free871; CHECK-O0-ARM64_32-NEXT: fmov s0, #1.00000000872; CHECK-O0-ARM64_32-NEXT: ldp x29, x30, [sp, #64] ; 16-byte Folded Reload873; CHECK-O0-ARM64_32-NEXT: ldp x22, x21, [sp, #48] ; 16-byte Folded Reload874; CHECK-O0-ARM64_32-NEXT: add sp, sp, #80875; CHECK-O0-ARM64_32-NEXT: ret876; Access part of the error object and save it to error_ref877 878; spill x0879; Access part of the error object and save it to error_ref880; reload from stack881entry:882 %s = alloca %struct.S, align 8883 %error_ptr_ref = alloca swifterror ptr884 store ptr null, ptr %error_ptr_ref885 call void @foo_sret(ptr sret(%struct.S) %s, i32 1, ptr swifterror %error_ptr_ref)886 %error_from_foo = load ptr, ptr %error_ptr_ref887 %had_error_from_foo = icmp ne ptr %error_from_foo, null888 br i1 %had_error_from_foo, label %handler, label %cont889cont:890 %v1 = getelementptr inbounds %swift_error, ptr %error_from_foo, i64 0, i32 1891 %t = load i8, ptr %v1892 store i8 %t, ptr %error_ref893 br label %handler894handler:895 call void @free(ptr %error_from_foo)896 ret float 1.0897}898 899; "foo_vararg" is a function that takes a swifterror parameter, it also has900; variable number of arguments.901declare void @llvm.va_start(ptr) nounwind902define float @foo_vararg(ptr swifterror %error_ptr_ref, ...) {903; CHECK-APPLE-AARCH64-LABEL: foo_vararg:904; CHECK-APPLE-AARCH64: ; %bb.0: ; %entry905; CHECK-APPLE-AARCH64-NEXT: sub sp, sp, #48906; CHECK-APPLE-AARCH64-NEXT: stp x29, x30, [sp, #32] ; 16-byte Folded Spill907; CHECK-APPLE-AARCH64-NEXT: add x29, sp, #32908; CHECK-APPLE-AARCH64-NEXT: .cfi_def_cfa w29, 16909; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w30, -8910; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w29, -16911; CHECK-APPLE-AARCH64-NEXT: mov w0, #16 ; =0x10912; CHECK-APPLE-AARCH64-NEXT: bl _malloc913; CHECK-APPLE-AARCH64-NEXT: mov w8, #1 ; =0x1914; CHECK-APPLE-AARCH64-NEXT: ldr w9, [x29, #16]915; CHECK-APPLE-AARCH64-NEXT: strb w8, [x0, #8]916; CHECK-APPLE-AARCH64-NEXT: add x8, x29, #16917; CHECK-APPLE-AARCH64-NEXT: orr x8, x8, #0x8918; CHECK-APPLE-AARCH64-NEXT: stur w9, [x29, #-12]919; CHECK-APPLE-AARCH64-NEXT: ldr w9, [x8], #8920; CHECK-APPLE-AARCH64-NEXT: str w9, [sp, #16]921; CHECK-APPLE-AARCH64-NEXT: fmov s0, #1.00000000922; CHECK-APPLE-AARCH64-NEXT: ldr w9, [x8], #8923; CHECK-APPLE-AARCH64-NEXT: stur x8, [x29, #-8]924; CHECK-APPLE-AARCH64-NEXT: mov x21, x0925; CHECK-APPLE-AARCH64-NEXT: str w9, [sp, #12]926; CHECK-APPLE-AARCH64-NEXT: ldp x29, x30, [sp, #32] ; 16-byte Folded Reload927; CHECK-APPLE-AARCH64-NEXT: add sp, sp, #48928; CHECK-APPLE-AARCH64-NEXT: ret929;930; CHECK-O0-AARCH64-LABEL: foo_vararg:931; CHECK-O0-AARCH64: ; %bb.0: ; %entry932; CHECK-O0-AARCH64-NEXT: sub sp, sp, #48933; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #32] ; 16-byte Folded Spill934; CHECK-O0-AARCH64-NEXT: add x29, sp, #32935; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 16936; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -8937; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -16938; CHECK-O0-AARCH64-NEXT: mov w8, #16 ; =0x10939; CHECK-O0-AARCH64-NEXT: mov w0, w8940; CHECK-O0-AARCH64-NEXT: bl _malloc941; CHECK-O0-AARCH64-NEXT: mov x21, x0942; CHECK-O0-AARCH64-NEXT: mov w8, #1 ; =0x1943; CHECK-O0-AARCH64-NEXT: strb w8, [x0, #8]944; CHECK-O0-AARCH64-NEXT: add x8, x29, #16945; CHECK-O0-AARCH64-NEXT: stur x8, [x29, #-8]946; CHECK-O0-AARCH64-NEXT: ldur x8, [x29, #-8]947; CHECK-O0-AARCH64-NEXT: add x9, x8, #8948; CHECK-O0-AARCH64-NEXT: stur x9, [x29, #-8]949; CHECK-O0-AARCH64-NEXT: ldr w8, [x8]950; CHECK-O0-AARCH64-NEXT: stur w8, [x29, #-12]951; CHECK-O0-AARCH64-NEXT: ldur x8, [x29, #-8]952; CHECK-O0-AARCH64-NEXT: add x9, x8, #8953; CHECK-O0-AARCH64-NEXT: stur x9, [x29, #-8]954; CHECK-O0-AARCH64-NEXT: ldr w8, [x8]955; CHECK-O0-AARCH64-NEXT: str w8, [sp, #16]956; CHECK-O0-AARCH64-NEXT: ldur x8, [x29, #-8]957; CHECK-O0-AARCH64-NEXT: add x9, x8, #8958; CHECK-O0-AARCH64-NEXT: stur x9, [x29, #-8]959; CHECK-O0-AARCH64-NEXT: ldr w8, [x8]960; CHECK-O0-AARCH64-NEXT: str w8, [sp, #12]961; CHECK-O0-AARCH64-NEXT: fmov s0, #1.00000000962; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp, #32] ; 16-byte Folded Reload963; CHECK-O0-AARCH64-NEXT: add sp, sp, #48964; CHECK-O0-AARCH64-NEXT: ret965;966; CHECK-APPLE-ARM64_32-LABEL: foo_vararg:967; CHECK-APPLE-ARM64_32: ; %bb.0: ; %entry968; CHECK-APPLE-ARM64_32-NEXT: sub sp, sp, #48969; CHECK-APPLE-ARM64_32-NEXT: stp x29, x30, [sp, #32] ; 16-byte Folded Spill970; CHECK-APPLE-ARM64_32-NEXT: add x29, sp, #32971; CHECK-APPLE-ARM64_32-NEXT: .cfi_def_cfa w29, 16972; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w30, -8973; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w29, -16974; CHECK-APPLE-ARM64_32-NEXT: mov w0, #16 ; =0x10975; CHECK-APPLE-ARM64_32-NEXT: bl _malloc976; CHECK-APPLE-ARM64_32-NEXT: mov w8, #1 ; =0x1977; CHECK-APPLE-ARM64_32-NEXT: add x9, x29, #16978; CHECK-APPLE-ARM64_32-NEXT: strb w8, [x0, #8]979; CHECK-APPLE-ARM64_32-NEXT: orr w8, w9, #0x4980; CHECK-APPLE-ARM64_32-NEXT: mov w10, w9981; CHECK-APPLE-ARM64_32-NEXT: stur w8, [x29, #-8]982; CHECK-APPLE-ARM64_32-NEXT: ldr w11, [x10]983; CHECK-APPLE-ARM64_32-NEXT: orr w10, w9, #0x8984; CHECK-APPLE-ARM64_32-NEXT: stp w11, w10, [x29, #-12]985; CHECK-APPLE-ARM64_32-NEXT: ldr w8, [x8]986; CHECK-APPLE-ARM64_32-NEXT: orr w9, w9, #0xc987; CHECK-APPLE-ARM64_32-NEXT: str w8, [sp, #16]988; CHECK-APPLE-ARM64_32-NEXT: stur w9, [x29, #-8]989; CHECK-APPLE-ARM64_32-NEXT: fmov s0, #1.00000000990; CHECK-APPLE-ARM64_32-NEXT: ldr w8, [x10]991; CHECK-APPLE-ARM64_32-NEXT: mov x21, x0992; CHECK-APPLE-ARM64_32-NEXT: str w8, [sp, #12]993; CHECK-APPLE-ARM64_32-NEXT: ldp x29, x30, [sp, #32] ; 16-byte Folded Reload994; CHECK-APPLE-ARM64_32-NEXT: add sp, sp, #48995; CHECK-APPLE-ARM64_32-NEXT: ret996;997; CHECK-O0-ARM64_32-LABEL: foo_vararg:998; CHECK-O0-ARM64_32: ; %bb.0: ; %entry999; CHECK-O0-ARM64_32-NEXT: sub sp, sp, #481000; CHECK-O0-ARM64_32-NEXT: str x30, [sp, #32] ; 8-byte Spill1001; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 481002; CHECK-O0-ARM64_32-NEXT: .cfi_offset w30, -161003; CHECK-O0-ARM64_32-NEXT: mov w8, #16 ; =0x101004; CHECK-O0-ARM64_32-NEXT: mov w0, w81005; CHECK-O0-ARM64_32-NEXT: bl _malloc1006; CHECK-O0-ARM64_32-NEXT: mov x21, x01007; CHECK-O0-ARM64_32-NEXT: mov w8, #1 ; =0x11008; CHECK-O0-ARM64_32-NEXT: strb w8, [x0, #8]1009; CHECK-O0-ARM64_32-NEXT: add x8, sp, #481010; CHECK-O0-ARM64_32-NEXT: ; kill: def $w8 killed $w8 killed $x81011; CHECK-O0-ARM64_32-NEXT: str w8, [sp, #24]1012; CHECK-O0-ARM64_32-NEXT: ldr w8, [sp, #24]1013; CHECK-O0-ARM64_32-NEXT: ; kill: def $x8 killed $w81014; CHECK-O0-ARM64_32-NEXT: mov w9, w81015; CHECK-O0-ARM64_32-NEXT: add w9, w9, #41016; CHECK-O0-ARM64_32-NEXT: str w9, [sp, #24]1017; CHECK-O0-ARM64_32-NEXT: ldr w8, [x8]1018; CHECK-O0-ARM64_32-NEXT: str w8, [sp, #20]1019; CHECK-O0-ARM64_32-NEXT: ldr w8, [sp, #24]1020; CHECK-O0-ARM64_32-NEXT: ; kill: def $x8 killed $w81021; CHECK-O0-ARM64_32-NEXT: mov w9, w81022; CHECK-O0-ARM64_32-NEXT: add w9, w9, #41023; CHECK-O0-ARM64_32-NEXT: str w9, [sp, #24]1024; CHECK-O0-ARM64_32-NEXT: ldr w8, [x8]1025; CHECK-O0-ARM64_32-NEXT: str w8, [sp, #16]1026; CHECK-O0-ARM64_32-NEXT: ldr w8, [sp, #24]1027; CHECK-O0-ARM64_32-NEXT: ; kill: def $x8 killed $w81028; CHECK-O0-ARM64_32-NEXT: mov w9, w81029; CHECK-O0-ARM64_32-NEXT: add w9, w9, #41030; CHECK-O0-ARM64_32-NEXT: str w9, [sp, #24]1031; CHECK-O0-ARM64_32-NEXT: ldr w8, [x8]1032; CHECK-O0-ARM64_32-NEXT: str w8, [sp, #12]1033; CHECK-O0-ARM64_32-NEXT: fmov s0, #1.000000001034; CHECK-O0-ARM64_32-NEXT: ldr x30, [sp, #32] ; 8-byte Reload1035; CHECK-O0-ARM64_32-NEXT: add sp, sp, #481036; CHECK-O0-ARM64_32-NEXT: ret1037 1038; First vararg1039; Third vararg1040; Second vararg1041 1042 1043 1044entry:1045 %call = call ptr @malloc(i64 16)1046 store ptr %call, ptr %error_ptr_ref1047 %tmp = getelementptr inbounds i8, ptr %call, i64 81048 store i8 1, ptr %tmp1049 1050 %args = alloca ptr, align 81051 %a10 = alloca i32, align 41052 %a11 = alloca i32, align 41053 %a12 = alloca i32, align 41054 call void @llvm.va_start(ptr %args)1055 %v11 = va_arg ptr %args, i321056 store i32 %v11, ptr %a10, align 41057 %v12 = va_arg ptr %args, i321058 store i32 %v12, ptr %a11, align 41059 %v13 = va_arg ptr %args, i321060 store i32 %v13, ptr %a12, align 41061 1062 ret float 1.01063}1064 1065; "caller4" calls "foo_vararg" that takes a swifterror parameter.1066define float @caller4(ptr %error_ref) {1067; CHECK-APPLE-AARCH64-LABEL: caller4:1068; CHECK-APPLE-AARCH64: ; %bb.0: ; %entry1069; CHECK-APPLE-AARCH64-NEXT: sub sp, sp, #961070; CHECK-APPLE-AARCH64-NEXT: stp x22, x21, [sp, #48] ; 16-byte Folded Spill1071; CHECK-APPLE-AARCH64-NEXT: stp x20, x19, [sp, #64] ; 16-byte Folded Spill1072; CHECK-APPLE-AARCH64-NEXT: stp x29, x30, [sp, #80] ; 16-byte Folded Spill1073; CHECK-APPLE-AARCH64-NEXT: add x29, sp, #801074; CHECK-APPLE-AARCH64-NEXT: .cfi_def_cfa w29, 161075; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w30, -81076; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w29, -161077; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w19, -241078; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w20, -321079; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w21, -401080; CHECK-APPLE-AARCH64-NEXT: .cfi_offset w22, -481081; CHECK-APPLE-AARCH64-NEXT: mov x19, x01082; CHECK-APPLE-AARCH64-NEXT: mov w8, #10 ; =0xa1083; CHECK-APPLE-AARCH64-NEXT: mov w9, #11 ; =0xb1084; CHECK-APPLE-AARCH64-NEXT: stp w9, w8, [sp, #32]1085; CHECK-APPLE-AARCH64-NEXT: mov w10, #12 ; =0xc1086; CHECK-APPLE-AARCH64-NEXT: str w10, [sp, #28]1087; CHECK-APPLE-AARCH64-NEXT: mov x21, xzr1088; CHECK-APPLE-AARCH64-NEXT: stp x9, x10, [sp, #8]1089; CHECK-APPLE-AARCH64-NEXT: str x8, [sp]1090; CHECK-APPLE-AARCH64-NEXT: bl _foo_vararg1091; CHECK-APPLE-AARCH64-NEXT: mov x0, x211092; CHECK-APPLE-AARCH64-NEXT: cbnz x21, LBB8_21093; CHECK-APPLE-AARCH64-NEXT: ; %bb.1: ; %cont1094; CHECK-APPLE-AARCH64-NEXT: ldrb w8, [x0, #8]1095; CHECK-APPLE-AARCH64-NEXT: strb w8, [x19]1096; CHECK-APPLE-AARCH64-NEXT: LBB8_2: ; %handler1097; CHECK-APPLE-AARCH64-NEXT: bl _free1098; CHECK-APPLE-AARCH64-NEXT: fmov s0, #1.000000001099; CHECK-APPLE-AARCH64-NEXT: ldp x29, x30, [sp, #80] ; 16-byte Folded Reload1100; CHECK-APPLE-AARCH64-NEXT: ldp x20, x19, [sp, #64] ; 16-byte Folded Reload1101; CHECK-APPLE-AARCH64-NEXT: ldp x22, x21, [sp, #48] ; 16-byte Folded Reload1102; CHECK-APPLE-AARCH64-NEXT: add sp, sp, #961103; CHECK-APPLE-AARCH64-NEXT: ret1104;1105; CHECK-O0-AARCH64-LABEL: caller4:1106; CHECK-O0-AARCH64: ; %bb.0: ; %entry1107; CHECK-O0-AARCH64-NEXT: sub sp, sp, #961108; CHECK-O0-AARCH64-NEXT: stp x22, x21, [sp, #64] ; 16-byte Folded Spill1109; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #80] ; 16-byte Folded Spill1110; CHECK-O0-AARCH64-NEXT: add x29, sp, #801111; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 161112; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -81113; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -161114; CHECK-O0-AARCH64-NEXT: .cfi_offset w21, -241115; CHECK-O0-AARCH64-NEXT: .cfi_offset w22, -321116; CHECK-O0-AARCH64-NEXT: ; implicit-def: $x11117; CHECK-O0-AARCH64-NEXT: str x0, [sp, #24] ; 8-byte Spill1118; CHECK-O0-AARCH64-NEXT: mov x21, xzr1119; CHECK-O0-AARCH64-NEXT: mov w8, #10 ; =0xa1120; CHECK-O0-AARCH64-NEXT: stur w8, [x29, #-28]1121; CHECK-O0-AARCH64-NEXT: mov w8, #11 ; =0xb1122; CHECK-O0-AARCH64-NEXT: stur w8, [x29, #-32]1123; CHECK-O0-AARCH64-NEXT: mov w8, #12 ; =0xc1124; CHECK-O0-AARCH64-NEXT: stur w8, [x29, #-36]1125; CHECK-O0-AARCH64-NEXT: ldur w8, [x29, #-28]1126; CHECK-O0-AARCH64-NEXT: ; kill: def $x8 killed $w81127; CHECK-O0-AARCH64-NEXT: ldur w9, [x29, #-32]1128; CHECK-O0-AARCH64-NEXT: mov w10, w91129; CHECK-O0-AARCH64-NEXT: ldur w9, [x29, #-36]1130; CHECK-O0-AARCH64-NEXT: mov w11, w91131; CHECK-O0-AARCH64-NEXT: mov x9, sp1132; CHECK-O0-AARCH64-NEXT: str x11, [x9, #16]1133; CHECK-O0-AARCH64-NEXT: str x10, [x9, #8]1134; CHECK-O0-AARCH64-NEXT: str x8, [x9]1135; CHECK-O0-AARCH64-NEXT: bl _foo_vararg1136; CHECK-O0-AARCH64-NEXT: str x21, [sp, #32] ; 8-byte Spill1137; CHECK-O0-AARCH64-NEXT: cbnz x21, LBB8_21138; CHECK-O0-AARCH64-NEXT: ; %bb.1: ; %cont1139; CHECK-O0-AARCH64-NEXT: ldr x9, [sp, #24] ; 8-byte Reload1140; CHECK-O0-AARCH64-NEXT: ldr x8, [sp, #32] ; 8-byte Reload1141; CHECK-O0-AARCH64-NEXT: ldrb w8, [x8, #8]1142; CHECK-O0-AARCH64-NEXT: strb w8, [x9]1143; CHECK-O0-AARCH64-NEXT: LBB8_2: ; %handler1144; CHECK-O0-AARCH64-NEXT: ldr x0, [sp, #32] ; 8-byte Reload1145; CHECK-O0-AARCH64-NEXT: bl _free1146; CHECK-O0-AARCH64-NEXT: fmov s0, #1.000000001147; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp, #80] ; 16-byte Folded Reload1148; CHECK-O0-AARCH64-NEXT: ldp x22, x21, [sp, #64] ; 16-byte Folded Reload1149; CHECK-O0-AARCH64-NEXT: add sp, sp, #961150; CHECK-O0-AARCH64-NEXT: ret1151;1152; CHECK-APPLE-ARM64_32-LABEL: caller4:1153; CHECK-APPLE-ARM64_32: ; %bb.0: ; %entry1154; CHECK-APPLE-ARM64_32-NEXT: sub sp, sp, #801155; CHECK-APPLE-ARM64_32-NEXT: stp x22, x21, [sp, #32] ; 16-byte Folded Spill1156; CHECK-APPLE-ARM64_32-NEXT: stp x20, x19, [sp, #48] ; 16-byte Folded Spill1157; CHECK-APPLE-ARM64_32-NEXT: stp x29, x30, [sp, #64] ; 16-byte Folded Spill1158; CHECK-APPLE-ARM64_32-NEXT: add x29, sp, #641159; CHECK-APPLE-ARM64_32-NEXT: .cfi_def_cfa w29, 161160; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w30, -81161; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w29, -161162; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w19, -241163; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w20, -321164; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w21, -401165; CHECK-APPLE-ARM64_32-NEXT: .cfi_offset w22, -481166; CHECK-APPLE-ARM64_32-NEXT: mov x19, x01167; CHECK-APPLE-ARM64_32-NEXT: mov w8, #10 ; =0xa1168; CHECK-APPLE-ARM64_32-NEXT: mov w9, #11 ; =0xb1169; CHECK-APPLE-ARM64_32-NEXT: stp w9, w8, [sp, #20]1170; CHECK-APPLE-ARM64_32-NEXT: mov w10, #12 ; =0xc1171; CHECK-APPLE-ARM64_32-NEXT: str w10, [sp, #16]1172; CHECK-APPLE-ARM64_32-NEXT: mov x21, xzr1173; CHECK-APPLE-ARM64_32-NEXT: mov x9, #11 ; =0xb1174; CHECK-APPLE-ARM64_32-NEXT: movk x9, #12, lsl #321175; CHECK-APPLE-ARM64_32-NEXT: stur x9, [sp, #4]1176; CHECK-APPLE-ARM64_32-NEXT: str w8, [sp]1177; CHECK-APPLE-ARM64_32-NEXT: bl _foo_vararg1178; CHECK-APPLE-ARM64_32-NEXT: mov x0, x211179; CHECK-APPLE-ARM64_32-NEXT: cbnz w0, LBB8_21180; CHECK-APPLE-ARM64_32-NEXT: ; %bb.1: ; %cont1181; CHECK-APPLE-ARM64_32-NEXT: ldrb w8, [x0, #8]1182; CHECK-APPLE-ARM64_32-NEXT: strb w8, [x19]1183; CHECK-APPLE-ARM64_32-NEXT: LBB8_2: ; %handler1184; CHECK-APPLE-ARM64_32-NEXT: bl _free1185; CHECK-APPLE-ARM64_32-NEXT: fmov s0, #1.000000001186; CHECK-APPLE-ARM64_32-NEXT: ldp x29, x30, [sp, #64] ; 16-byte Folded Reload1187; CHECK-APPLE-ARM64_32-NEXT: ldp x20, x19, [sp, #48] ; 16-byte Folded Reload1188; CHECK-APPLE-ARM64_32-NEXT: ldp x22, x21, [sp, #32] ; 16-byte Folded Reload1189; CHECK-APPLE-ARM64_32-NEXT: add sp, sp, #801190; CHECK-APPLE-ARM64_32-NEXT: ret1191;1192; CHECK-O0-ARM64_32-LABEL: caller4:1193; CHECK-O0-ARM64_32: ; %bb.0: ; %entry1194; CHECK-O0-ARM64_32-NEXT: sub sp, sp, #801195; CHECK-O0-ARM64_32-NEXT: stp x22, x21, [sp, #48] ; 16-byte Folded Spill1196; CHECK-O0-ARM64_32-NEXT: stp x29, x30, [sp, #64] ; 16-byte Folded Spill1197; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 801198; CHECK-O0-ARM64_32-NEXT: .cfi_offset w30, -81199; CHECK-O0-ARM64_32-NEXT: .cfi_offset w29, -161200; CHECK-O0-ARM64_32-NEXT: .cfi_offset w21, -241201; CHECK-O0-ARM64_32-NEXT: .cfi_offset w22, -321202; CHECK-O0-ARM64_32-NEXT: ; implicit-def: $x11203; CHECK-O0-ARM64_32-NEXT: str x0, [sp, #16] ; 8-byte Spill1204; CHECK-O0-ARM64_32-NEXT: mov x21, xzr1205; CHECK-O0-ARM64_32-NEXT: mov w8, #10 ; =0xa1206; CHECK-O0-ARM64_32-NEXT: str w8, [sp, #40]1207; CHECK-O0-ARM64_32-NEXT: mov w8, #11 ; =0xb1208; CHECK-O0-ARM64_32-NEXT: str w8, [sp, #36]1209; CHECK-O0-ARM64_32-NEXT: mov w8, #12 ; =0xc1210; CHECK-O0-ARM64_32-NEXT: str w8, [sp, #32]1211; CHECK-O0-ARM64_32-NEXT: ldr w8, [sp, #40]1212; CHECK-O0-ARM64_32-NEXT: ldr w10, [sp, #36]1213; CHECK-O0-ARM64_32-NEXT: ldr w11, [sp, #32]1214; CHECK-O0-ARM64_32-NEXT: mov x9, sp1215; CHECK-O0-ARM64_32-NEXT: str w11, [x9, #8]1216; CHECK-O0-ARM64_32-NEXT: str w10, [x9, #4]1217; CHECK-O0-ARM64_32-NEXT: str w8, [x9]1218; CHECK-O0-ARM64_32-NEXT: bl _foo_vararg1219; CHECK-O0-ARM64_32-NEXT: str x21, [sp, #24] ; 8-byte Spill1220; CHECK-O0-ARM64_32-NEXT: cmp x21, #01221; CHECK-O0-ARM64_32-NEXT: b.ne LBB8_21222; CHECK-O0-ARM64_32-NEXT: ; %bb.1: ; %cont1223; CHECK-O0-ARM64_32-NEXT: ldr x9, [sp, #16] ; 8-byte Reload1224; CHECK-O0-ARM64_32-NEXT: ldr x8, [sp, #24] ; 8-byte Reload1225; CHECK-O0-ARM64_32-NEXT: ldrb w8, [x8, #8]1226; CHECK-O0-ARM64_32-NEXT: ; kill: def $w0 killed $w81227; CHECK-O0-ARM64_32-NEXT: strb w8, [x9]1228; CHECK-O0-ARM64_32-NEXT: LBB8_2: ; %handler1229; CHECK-O0-ARM64_32-NEXT: ldr x0, [sp, #24] ; 8-byte Reload1230; CHECK-O0-ARM64_32-NEXT: bl _free1231; CHECK-O0-ARM64_32-NEXT: fmov s0, #1.000000001232; CHECK-O0-ARM64_32-NEXT: ldp x29, x30, [sp, #64] ; 16-byte Folded Reload1233; CHECK-O0-ARM64_32-NEXT: ldp x22, x21, [sp, #48] ; 16-byte Folded Reload1234; CHECK-O0-ARM64_32-NEXT: add sp, sp, #801235; CHECK-O0-ARM64_32-NEXT: ret1236 1237 1238; Access part of the error object and save it to error_ref1239entry:1240 %error_ptr_ref = alloca swifterror ptr1241 store ptr null, ptr %error_ptr_ref1242 1243 %a10 = alloca i32, align 41244 %a11 = alloca i32, align 41245 %a12 = alloca i32, align 41246 store i32 10, ptr %a10, align 41247 store i32 11, ptr %a11, align 41248 store i32 12, ptr %a12, align 41249 %v10 = load i32, ptr %a10, align 41250 %v11 = load i32, ptr %a11, align 41251 %v12 = load i32, ptr %a12, align 41252 1253 %call = call float (ptr, ...) @foo_vararg(ptr swifterror %error_ptr_ref, i32 %v10, i32 %v11, i32 %v12)1254 %error_from_foo = load ptr, ptr %error_ptr_ref1255 %had_error_from_foo = icmp ne ptr %error_from_foo, null1256 br i1 %had_error_from_foo, label %handler, label %cont1257 1258cont:1259 %v1 = getelementptr inbounds %swift_error, ptr %error_from_foo, i64 0, i32 11260 %t = load i8, ptr %v11261 store i8 %t, ptr %error_ref1262 br label %handler1263handler:1264 call void @free(ptr %error_from_foo)1265 ret float 1.01266}1267 1268; Check that we don't blow up on tail calling swifterror argument functions.1269define float @tailcallswifterror(ptr swifterror %error_ptr_ref) {1270; CHECK-APPLE-LABEL: tailcallswifterror:1271; CHECK-APPLE: ; %bb.0: ; %entry1272; CHECK-APPLE-NEXT: stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill1273; CHECK-APPLE-NEXT: mov x29, sp1274; CHECK-APPLE-NEXT: .cfi_def_cfa w29, 161275; CHECK-APPLE-NEXT: .cfi_offset w30, -81276; CHECK-APPLE-NEXT: .cfi_offset w29, -161277; CHECK-APPLE-NEXT: bl _tailcallswifterror1278; CHECK-APPLE-NEXT: ldp x29, x30, [sp], #16 ; 16-byte Folded Reload1279; CHECK-APPLE-NEXT: ret1280;1281; CHECK-O0-AARCH64-LABEL: tailcallswifterror:1282; CHECK-O0-AARCH64: ; %bb.0: ; %entry1283; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill1284; CHECK-O0-AARCH64-NEXT: mov x29, sp1285; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 161286; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -81287; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -161288; CHECK-O0-AARCH64-NEXT: bl _tailcallswifterror1289; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp], #16 ; 16-byte Folded Reload1290; CHECK-O0-AARCH64-NEXT: ret1291;1292; CHECK-O0-ARM64_32-LABEL: tailcallswifterror:1293; CHECK-O0-ARM64_32: ; %bb.0: ; %entry1294; CHECK-O0-ARM64_32-NEXT: str x30, [sp, #-16]! ; 8-byte Folded Spill1295; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 161296; CHECK-O0-ARM64_32-NEXT: .cfi_offset w30, -161297; CHECK-O0-ARM64_32-NEXT: bl _tailcallswifterror1298; CHECK-O0-ARM64_32-NEXT: ldr x30, [sp], #16 ; 8-byte Folded Reload1299; CHECK-O0-ARM64_32-NEXT: ret1300entry:1301 %0 = tail call float @tailcallswifterror(ptr swifterror %error_ptr_ref)1302 ret float %01303}1304define swiftcc float @tailcallswifterror_swiftcc(ptr swifterror %error_ptr_ref) {1305; CHECK-APPLE-LABEL: tailcallswifterror_swiftcc:1306; CHECK-APPLE: ; %bb.0: ; %entry1307; CHECK-APPLE-NEXT: stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill1308; CHECK-APPLE-NEXT: mov x29, sp1309; CHECK-APPLE-NEXT: .cfi_def_cfa w29, 161310; CHECK-APPLE-NEXT: .cfi_offset w30, -81311; CHECK-APPLE-NEXT: .cfi_offset w29, -161312; CHECK-APPLE-NEXT: bl _tailcallswifterror_swiftcc1313; CHECK-APPLE-NEXT: ldp x29, x30, [sp], #16 ; 16-byte Folded Reload1314; CHECK-APPLE-NEXT: ret1315;1316; CHECK-O0-AARCH64-LABEL: tailcallswifterror_swiftcc:1317; CHECK-O0-AARCH64: ; %bb.0: ; %entry1318; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill1319; CHECK-O0-AARCH64-NEXT: mov x29, sp1320; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 161321; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -81322; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -161323; CHECK-O0-AARCH64-NEXT: bl _tailcallswifterror_swiftcc1324; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp], #16 ; 16-byte Folded Reload1325; CHECK-O0-AARCH64-NEXT: ret1326;1327; CHECK-O0-ARM64_32-LABEL: tailcallswifterror_swiftcc:1328; CHECK-O0-ARM64_32: ; %bb.0: ; %entry1329; CHECK-O0-ARM64_32-NEXT: str x30, [sp, #-16]! ; 8-byte Folded Spill1330; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 161331; CHECK-O0-ARM64_32-NEXT: .cfi_offset w30, -161332; CHECK-O0-ARM64_32-NEXT: bl _tailcallswifterror_swiftcc1333; CHECK-O0-ARM64_32-NEXT: ldr x30, [sp], #16 ; 8-byte Folded Reload1334; CHECK-O0-ARM64_32-NEXT: ret1335entry:1336 %0 = tail call swiftcc float @tailcallswifterror_swiftcc(ptr swifterror %error_ptr_ref)1337 ret float %01338}1339 1340define swiftcc void @swifterror_clobber(ptr nocapture swifterror %err) {1341; CHECK-APPLE-LABEL: swifterror_clobber:1342; CHECK-APPLE: ; %bb.0:1343; CHECK-APPLE-NEXT: stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill1344; CHECK-APPLE-NEXT: mov x29, sp1345; CHECK-APPLE-NEXT: .cfi_def_cfa w29, 161346; CHECK-APPLE-NEXT: .cfi_offset w30, -81347; CHECK-APPLE-NEXT: .cfi_offset w29, -161348; CHECK-APPLE-NEXT: mov x8, x211349; CHECK-APPLE-NEXT: ; InlineAsm Start1350; CHECK-APPLE-NEXT: nop1351; CHECK-APPLE-NEXT: ; InlineAsm End1352; CHECK-APPLE-NEXT: mov x21, x81353; CHECK-APPLE-NEXT: ldp x29, x30, [sp], #16 ; 16-byte Folded Reload1354; CHECK-APPLE-NEXT: ret1355;1356; CHECK-O0-AARCH64-LABEL: swifterror_clobber:1357; CHECK-O0-AARCH64: ; %bb.0:1358; CHECK-O0-AARCH64-NEXT: sub sp, sp, #321359; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill1360; CHECK-O0-AARCH64-NEXT: add x29, sp, #161361; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 161362; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -81363; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -161364; CHECK-O0-AARCH64-NEXT: str x21, [sp, #8] ; 8-byte Spill1365; CHECK-O0-AARCH64-NEXT: ; InlineAsm Start1366; CHECK-O0-AARCH64-NEXT: nop1367; CHECK-O0-AARCH64-NEXT: ; InlineAsm End1368; CHECK-O0-AARCH64-NEXT: ldr x21, [sp, #8] ; 8-byte Reload1369; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload1370; CHECK-O0-AARCH64-NEXT: add sp, sp, #321371; CHECK-O0-AARCH64-NEXT: ret1372;1373; CHECK-O0-ARM64_32-LABEL: swifterror_clobber:1374; CHECK-O0-ARM64_32: ; %bb.0:1375; CHECK-O0-ARM64_32-NEXT: sub sp, sp, #161376; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 161377; CHECK-O0-ARM64_32-NEXT: str x21, [sp, #8] ; 8-byte Spill1378; CHECK-O0-ARM64_32-NEXT: ; InlineAsm Start1379; CHECK-O0-ARM64_32-NEXT: nop1380; CHECK-O0-ARM64_32-NEXT: ; InlineAsm End1381; CHECK-O0-ARM64_32-NEXT: ldr x21, [sp, #8] ; 8-byte Reload1382; CHECK-O0-ARM64_32-NEXT: add sp, sp, #161383; CHECK-O0-ARM64_32-NEXT: ret1384 call void asm sideeffect "nop", "~{x21}"()1385 ret void1386}1387 1388define swiftcc void @swifterror_reg_clobber(ptr nocapture %err) {1389; CHECK-APPLE-LABEL: swifterror_reg_clobber:1390; CHECK-APPLE: ; %bb.0:1391; CHECK-APPLE-NEXT: stp x22, x21, [sp, #-32]! ; 16-byte Folded Spill1392; CHECK-APPLE-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill1393; CHECK-APPLE-NEXT: add x29, sp, #161394; CHECK-APPLE-NEXT: .cfi_def_cfa w29, 161395; CHECK-APPLE-NEXT: .cfi_offset w30, -81396; CHECK-APPLE-NEXT: .cfi_offset w29, -161397; CHECK-APPLE-NEXT: .cfi_offset w21, -241398; CHECK-APPLE-NEXT: .cfi_offset w22, -321399; CHECK-APPLE-NEXT: ; InlineAsm Start1400; CHECK-APPLE-NEXT: nop1401; CHECK-APPLE-NEXT: ; InlineAsm End1402; CHECK-APPLE-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload1403; CHECK-APPLE-NEXT: ldp x22, x21, [sp], #32 ; 16-byte Folded Reload1404; CHECK-APPLE-NEXT: ret1405;1406; CHECK-O0-AARCH64-LABEL: swifterror_reg_clobber:1407; CHECK-O0-AARCH64: ; %bb.0:1408; CHECK-O0-AARCH64-NEXT: stp x22, x21, [sp, #-32]! ; 16-byte Folded Spill1409; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill1410; CHECK-O0-AARCH64-NEXT: add x29, sp, #161411; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 161412; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -81413; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -161414; CHECK-O0-AARCH64-NEXT: .cfi_offset w21, -241415; CHECK-O0-AARCH64-NEXT: .cfi_offset w22, -321416; CHECK-O0-AARCH64-NEXT: ; InlineAsm Start1417; CHECK-O0-AARCH64-NEXT: nop1418; CHECK-O0-AARCH64-NEXT: ; InlineAsm End1419; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload1420; CHECK-O0-AARCH64-NEXT: ldp x22, x21, [sp], #32 ; 16-byte Folded Reload1421; CHECK-O0-AARCH64-NEXT: ret1422;1423; CHECK-O0-ARM64_32-LABEL: swifterror_reg_clobber:1424; CHECK-O0-ARM64_32: ; %bb.0:1425; CHECK-O0-ARM64_32-NEXT: stp x22, x21, [sp, #-16]! ; 16-byte Folded Spill1426; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 161427; CHECK-O0-ARM64_32-NEXT: .cfi_offset w21, -81428; CHECK-O0-ARM64_32-NEXT: .cfi_offset w22, -161429; CHECK-O0-ARM64_32-NEXT: ; InlineAsm Start1430; CHECK-O0-ARM64_32-NEXT: nop1431; CHECK-O0-ARM64_32-NEXT: ; InlineAsm End1432; CHECK-O0-ARM64_32-NEXT: ldp x22, x21, [sp], #16 ; 16-byte Folded Reload1433; CHECK-O0-ARM64_32-NEXT: ret1434 call void asm sideeffect "nop", "~{x21}"()1435 ret void1436}1437 1438define swiftcc void @params_in_reg(i64, i64, i64, i64, i64, i64, i64, i64, ptr swiftself, ptr nocapture swifterror %err) {1439; CHECK-APPLE-LABEL: params_in_reg:1440; CHECK-APPLE: ; %bb.0:1441; CHECK-APPLE-NEXT: sub sp, sp, #1121442; CHECK-APPLE-NEXT: stp x21, x28, [sp, #8] ; 16-byte Folded Spill1443; CHECK-APPLE-NEXT: stp x27, x26, [sp, #32] ; 16-byte Folded Spill1444; CHECK-APPLE-NEXT: stp x25, x24, [sp, #48] ; 16-byte Folded Spill1445; CHECK-APPLE-NEXT: stp x23, x22, [sp, #64] ; 16-byte Folded Spill1446; CHECK-APPLE-NEXT: stp x20, x19, [sp, #80] ; 16-byte Folded Spill1447; CHECK-APPLE-NEXT: stp x29, x30, [sp, #96] ; 16-byte Folded Spill1448; CHECK-APPLE-NEXT: add x29, sp, #961449; CHECK-APPLE-NEXT: .cfi_def_cfa w29, 161450; CHECK-APPLE-NEXT: .cfi_offset w30, -81451; CHECK-APPLE-NEXT: .cfi_offset w29, -161452; CHECK-APPLE-NEXT: .cfi_offset w19, -241453; CHECK-APPLE-NEXT: .cfi_offset w20, -321454; CHECK-APPLE-NEXT: .cfi_offset w22, -401455; CHECK-APPLE-NEXT: .cfi_offset w23, -481456; CHECK-APPLE-NEXT: .cfi_offset w24, -561457; CHECK-APPLE-NEXT: .cfi_offset w25, -641458; CHECK-APPLE-NEXT: .cfi_offset w26, -721459; CHECK-APPLE-NEXT: .cfi_offset w27, -801460; CHECK-APPLE-NEXT: .cfi_offset w28, -961461; CHECK-APPLE-NEXT: str x20, [sp] ; 8-byte Spill1462; CHECK-APPLE-NEXT: mov x23, x71463; CHECK-APPLE-NEXT: mov x24, x61464; CHECK-APPLE-NEXT: mov x25, x51465; CHECK-APPLE-NEXT: mov x26, x41466; CHECK-APPLE-NEXT: mov x27, x31467; CHECK-APPLE-NEXT: mov x28, x21468; CHECK-APPLE-NEXT: mov x19, x11469; CHECK-APPLE-NEXT: mov x22, x01470; CHECK-APPLE-NEXT: mov w0, #1 ; =0x11471; CHECK-APPLE-NEXT: mov w1, #2 ; =0x21472; CHECK-APPLE-NEXT: mov w2, #3 ; =0x31473; CHECK-APPLE-NEXT: mov w3, #4 ; =0x41474; CHECK-APPLE-NEXT: mov w4, #5 ; =0x51475; CHECK-APPLE-NEXT: mov w5, #6 ; =0x61476; CHECK-APPLE-NEXT: mov w6, #7 ; =0x71477; CHECK-APPLE-NEXT: mov w7, #8 ; =0x81478; CHECK-APPLE-NEXT: mov x20, xzr1479; CHECK-APPLE-NEXT: mov x21, xzr1480; CHECK-APPLE-NEXT: bl _params_in_reg21481; CHECK-APPLE-NEXT: mov x0, x221482; CHECK-APPLE-NEXT: mov x1, x191483; CHECK-APPLE-NEXT: mov x2, x281484; CHECK-APPLE-NEXT: mov x3, x271485; CHECK-APPLE-NEXT: mov x4, x261486; CHECK-APPLE-NEXT: mov x5, x251487; CHECK-APPLE-NEXT: mov x6, x241488; CHECK-APPLE-NEXT: mov x7, x231489; CHECK-APPLE-NEXT: ldp x20, x21, [sp] ; 16-byte Folded Reload1490; CHECK-APPLE-NEXT: bl _params_in_reg21491; CHECK-APPLE-NEXT: ldp x29, x30, [sp, #96] ; 16-byte Folded Reload1492; CHECK-APPLE-NEXT: ldp x20, x19, [sp, #80] ; 16-byte Folded Reload1493; CHECK-APPLE-NEXT: ldp x23, x22, [sp, #64] ; 16-byte Folded Reload1494; CHECK-APPLE-NEXT: ldp x25, x24, [sp, #48] ; 16-byte Folded Reload1495; CHECK-APPLE-NEXT: ldp x27, x26, [sp, #32] ; 16-byte Folded Reload1496; CHECK-APPLE-NEXT: ldr x28, [sp, #16] ; 8-byte Reload1497; CHECK-APPLE-NEXT: add sp, sp, #1121498; CHECK-APPLE-NEXT: ret1499;1500; CHECK-O0-AARCH64-LABEL: params_in_reg:1501; CHECK-O0-AARCH64: ; %bb.0:1502; CHECK-O0-AARCH64-NEXT: sub sp, sp, #1281503; CHECK-O0-AARCH64-NEXT: str x20, [sp, #96] ; 8-byte Spill1504; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #112] ; 16-byte Folded Spill1505; CHECK-O0-AARCH64-NEXT: add x29, sp, #1121506; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 161507; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -81508; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -161509; CHECK-O0-AARCH64-NEXT: .cfi_offset w20, -321510; CHECK-O0-AARCH64-NEXT: stur x21, [x29, #-32] ; 8-byte Folded Spill1511; CHECK-O0-AARCH64-NEXT: str x20, [sp, #8] ; 8-byte Spill1512; CHECK-O0-AARCH64-NEXT: stur x7, [x29, #-40] ; 8-byte Folded Spill1513; CHECK-O0-AARCH64-NEXT: stur x6, [x29, #-48] ; 8-byte Folded Spill1514; CHECK-O0-AARCH64-NEXT: str x5, [sp, #56] ; 8-byte Spill1515; CHECK-O0-AARCH64-NEXT: str x4, [sp, #48] ; 8-byte Spill1516; CHECK-O0-AARCH64-NEXT: str x3, [sp, #40] ; 8-byte Spill1517; CHECK-O0-AARCH64-NEXT: str x2, [sp, #32] ; 8-byte Spill1518; CHECK-O0-AARCH64-NEXT: str x1, [sp, #24] ; 8-byte Spill1519; CHECK-O0-AARCH64-NEXT: str x0, [sp, #16] ; 8-byte Spill1520; CHECK-O0-AARCH64-NEXT: ; implicit-def: $x01521; CHECK-O0-AARCH64-NEXT: mov x20, xzr1522; CHECK-O0-AARCH64-NEXT: mov x21, x201523; CHECK-O0-AARCH64-NEXT: mov w8, #1 ; =0x11524; CHECK-O0-AARCH64-NEXT: mov w0, w81525; CHECK-O0-AARCH64-NEXT: mov w8, #2 ; =0x21526; CHECK-O0-AARCH64-NEXT: mov w1, w81527; CHECK-O0-AARCH64-NEXT: mov w8, #3 ; =0x31528; CHECK-O0-AARCH64-NEXT: mov w2, w81529; CHECK-O0-AARCH64-NEXT: mov w8, #4 ; =0x41530; CHECK-O0-AARCH64-NEXT: mov w3, w81531; CHECK-O0-AARCH64-NEXT: mov w8, #5 ; =0x51532; CHECK-O0-AARCH64-NEXT: mov w4, w81533; CHECK-O0-AARCH64-NEXT: mov w8, #6 ; =0x61534; CHECK-O0-AARCH64-NEXT: mov w5, w81535; CHECK-O0-AARCH64-NEXT: mov w8, #7 ; =0x71536; CHECK-O0-AARCH64-NEXT: mov w6, w81537; CHECK-O0-AARCH64-NEXT: mov w8, #8 ; =0x81538; CHECK-O0-AARCH64-NEXT: mov w7, w81539; CHECK-O0-AARCH64-NEXT: bl _params_in_reg21540; CHECK-O0-AARCH64-NEXT: ldr x20, [sp, #8] ; 8-byte Reload1541; CHECK-O0-AARCH64-NEXT: ldr x0, [sp, #16] ; 8-byte Reload1542; CHECK-O0-AARCH64-NEXT: ldr x1, [sp, #24] ; 8-byte Reload1543; CHECK-O0-AARCH64-NEXT: ldr x2, [sp, #32] ; 8-byte Reload1544; CHECK-O0-AARCH64-NEXT: ldr x3, [sp, #40] ; 8-byte Reload1545; CHECK-O0-AARCH64-NEXT: ldr x4, [sp, #48] ; 8-byte Reload1546; CHECK-O0-AARCH64-NEXT: ldr x5, [sp, #56] ; 8-byte Reload1547; CHECK-O0-AARCH64-NEXT: ldur x6, [x29, #-48] ; 8-byte Folded Reload1548; CHECK-O0-AARCH64-NEXT: ldur x7, [x29, #-40] ; 8-byte Folded Reload1549; CHECK-O0-AARCH64-NEXT: mov x8, x211550; CHECK-O0-AARCH64-NEXT: ldur x21, [x29, #-32] ; 8-byte Folded Reload1551; CHECK-O0-AARCH64-NEXT: bl _params_in_reg21552; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp, #112] ; 16-byte Folded Reload1553; CHECK-O0-AARCH64-NEXT: ldr x20, [sp, #96] ; 8-byte Reload1554; CHECK-O0-AARCH64-NEXT: add sp, sp, #1281555; CHECK-O0-AARCH64-NEXT: ret1556;1557; CHECK-O0-ARM64_32-LABEL: params_in_reg:1558; CHECK-O0-ARM64_32: ; %bb.0:1559; CHECK-O0-ARM64_32-NEXT: sub sp, sp, #1121560; CHECK-O0-ARM64_32-NEXT: stp x20, x30, [sp, #96] ; 16-byte Folded Spill1561; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 1121562; CHECK-O0-ARM64_32-NEXT: .cfi_offset w30, -81563; CHECK-O0-ARM64_32-NEXT: .cfi_offset w20, -161564; CHECK-O0-ARM64_32-NEXT: str x21, [sp, #80] ; 8-byte Spill1565; CHECK-O0-ARM64_32-NEXT: str x20, [sp, #8] ; 8-byte Spill1566; CHECK-O0-ARM64_32-NEXT: str x7, [sp, #72] ; 8-byte Spill1567; CHECK-O0-ARM64_32-NEXT: str x6, [sp, #64] ; 8-byte Spill1568; CHECK-O0-ARM64_32-NEXT: str x5, [sp, #56] ; 8-byte Spill1569; CHECK-O0-ARM64_32-NEXT: str x4, [sp, #48] ; 8-byte Spill1570; CHECK-O0-ARM64_32-NEXT: str x3, [sp, #40] ; 8-byte Spill1571; CHECK-O0-ARM64_32-NEXT: str x2, [sp, #32] ; 8-byte Spill1572; CHECK-O0-ARM64_32-NEXT: str x1, [sp, #24] ; 8-byte Spill1573; CHECK-O0-ARM64_32-NEXT: str x0, [sp, #16] ; 8-byte Spill1574; CHECK-O0-ARM64_32-NEXT: ; implicit-def: $x01575; CHECK-O0-ARM64_32-NEXT: mov x20, xzr1576; CHECK-O0-ARM64_32-NEXT: mov x21, x201577; CHECK-O0-ARM64_32-NEXT: mov w8, #1 ; =0x11578; CHECK-O0-ARM64_32-NEXT: mov w0, w81579; CHECK-O0-ARM64_32-NEXT: mov w8, #2 ; =0x21580; CHECK-O0-ARM64_32-NEXT: mov w1, w81581; CHECK-O0-ARM64_32-NEXT: mov w8, #3 ; =0x31582; CHECK-O0-ARM64_32-NEXT: mov w2, w81583; CHECK-O0-ARM64_32-NEXT: mov w8, #4 ; =0x41584; CHECK-O0-ARM64_32-NEXT: mov w3, w81585; CHECK-O0-ARM64_32-NEXT: mov w8, #5 ; =0x51586; CHECK-O0-ARM64_32-NEXT: mov w4, w81587; CHECK-O0-ARM64_32-NEXT: mov w8, #6 ; =0x61588; CHECK-O0-ARM64_32-NEXT: mov w5, w81589; CHECK-O0-ARM64_32-NEXT: mov w8, #7 ; =0x71590; CHECK-O0-ARM64_32-NEXT: mov w6, w81591; CHECK-O0-ARM64_32-NEXT: mov w8, #8 ; =0x81592; CHECK-O0-ARM64_32-NEXT: mov w7, w81593; CHECK-O0-ARM64_32-NEXT: bl _params_in_reg21594; CHECK-O0-ARM64_32-NEXT: ldr x20, [sp, #8] ; 8-byte Reload1595; CHECK-O0-ARM64_32-NEXT: ldr x0, [sp, #16] ; 8-byte Reload1596; CHECK-O0-ARM64_32-NEXT: ldr x1, [sp, #24] ; 8-byte Reload1597; CHECK-O0-ARM64_32-NEXT: ldr x2, [sp, #32] ; 8-byte Reload1598; CHECK-O0-ARM64_32-NEXT: ldr x3, [sp, #40] ; 8-byte Reload1599; CHECK-O0-ARM64_32-NEXT: ldr x4, [sp, #48] ; 8-byte Reload1600; CHECK-O0-ARM64_32-NEXT: ldr x5, [sp, #56] ; 8-byte Reload1601; CHECK-O0-ARM64_32-NEXT: ldr x6, [sp, #64] ; 8-byte Reload1602; CHECK-O0-ARM64_32-NEXT: ldr x7, [sp, #72] ; 8-byte Reload1603; CHECK-O0-ARM64_32-NEXT: mov x8, x211604; CHECK-O0-ARM64_32-NEXT: ldr x21, [sp, #80] ; 8-byte Reload1605; CHECK-O0-ARM64_32-NEXT: bl _params_in_reg21606; CHECK-O0-ARM64_32-NEXT: ldp x20, x30, [sp, #96] ; 16-byte Folded Reload1607; CHECK-O0-ARM64_32-NEXT: add sp, sp, #1121608; CHECK-O0-ARM64_32-NEXT: ret1609 %error_ptr_ref = alloca swifterror ptr, align 81610 store ptr null, ptr %error_ptr_ref1611 call swiftcc void @params_in_reg2(i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, ptr swiftself null, ptr nocapture swifterror %error_ptr_ref)1612 call swiftcc void @params_in_reg2(i64 %0, i64 %1, i64 %2, i64 %3, i64 %4, i64 %5, i64 %6, i64 %7, ptr swiftself %8, ptr nocapture swifterror %err)1613 ret void1614}1615declare swiftcc void @params_in_reg2(i64, i64, i64, i64, i64, i64, i64, i64, ptr swiftself, ptr nocapture swifterror %err)1616 1617define swiftcc { i64, i64, i64, i64, i64, i64, i64, i64 } @params_and_return_in_reg(i64, i64, i64, i64, i64, i64, i64, i64, ptr swiftself, ptr nocapture swifterror %err) {1618; CHECK-APPLE-LABEL: params_and_return_in_reg:1619; CHECK-APPLE: ; %bb.0:1620; CHECK-APPLE-NEXT: sub sp, sp, #1281621; CHECK-APPLE-NEXT: stp x20, x28, [sp, #24] ; 16-byte Folded Spill1622; CHECK-APPLE-NEXT: stp x27, x26, [sp, #48] ; 16-byte Folded Spill1623; CHECK-APPLE-NEXT: stp x25, x24, [sp, #64] ; 16-byte Folded Spill1624; CHECK-APPLE-NEXT: stp x23, x22, [sp, #80] ; 16-byte Folded Spill1625; CHECK-APPLE-NEXT: stp x20, x19, [sp, #96] ; 16-byte Folded Spill1626; CHECK-APPLE-NEXT: stp x29, x30, [sp, #112] ; 16-byte Folded Spill1627; CHECK-APPLE-NEXT: add x29, sp, #1121628; CHECK-APPLE-NEXT: .cfi_def_cfa w29, 161629; CHECK-APPLE-NEXT: .cfi_offset w30, -81630; CHECK-APPLE-NEXT: .cfi_offset w29, -161631; CHECK-APPLE-NEXT: .cfi_offset w19, -241632; CHECK-APPLE-NEXT: .cfi_offset w20, -321633; CHECK-APPLE-NEXT: .cfi_offset w22, -401634; CHECK-APPLE-NEXT: .cfi_offset w23, -481635; CHECK-APPLE-NEXT: .cfi_offset w24, -561636; CHECK-APPLE-NEXT: .cfi_offset w25, -641637; CHECK-APPLE-NEXT: .cfi_offset w26, -721638; CHECK-APPLE-NEXT: .cfi_offset w27, -801639; CHECK-APPLE-NEXT: .cfi_offset w28, -961640; CHECK-APPLE-NEXT: mov x23, x211641; CHECK-APPLE-NEXT: str x7, [sp, #16] ; 8-byte Spill1642; CHECK-APPLE-NEXT: mov x24, x61643; CHECK-APPLE-NEXT: mov x25, x51644; CHECK-APPLE-NEXT: mov x26, x41645; CHECK-APPLE-NEXT: mov x27, x31646; CHECK-APPLE-NEXT: mov x28, x21647; CHECK-APPLE-NEXT: mov x19, x11648; CHECK-APPLE-NEXT: mov x22, x01649; CHECK-APPLE-NEXT: mov w0, #1 ; =0x11650; CHECK-APPLE-NEXT: mov w1, #2 ; =0x21651; CHECK-APPLE-NEXT: mov w2, #3 ; =0x31652; CHECK-APPLE-NEXT: mov w3, #4 ; =0x41653; CHECK-APPLE-NEXT: mov w4, #5 ; =0x51654; CHECK-APPLE-NEXT: mov w5, #6 ; =0x61655; CHECK-APPLE-NEXT: mov w6, #7 ; =0x71656; CHECK-APPLE-NEXT: mov w7, #8 ; =0x81657; CHECK-APPLE-NEXT: mov x20, xzr1658; CHECK-APPLE-NEXT: mov x21, xzr1659; CHECK-APPLE-NEXT: bl _params_in_reg21660; CHECK-APPLE-NEXT: str x21, [sp, #8] ; 8-byte Spill1661; CHECK-APPLE-NEXT: mov x0, x221662; CHECK-APPLE-NEXT: mov x1, x191663; CHECK-APPLE-NEXT: mov x2, x281664; CHECK-APPLE-NEXT: mov x3, x271665; CHECK-APPLE-NEXT: mov x4, x261666; CHECK-APPLE-NEXT: mov x5, x251667; CHECK-APPLE-NEXT: mov x6, x241668; CHECK-APPLE-NEXT: ldp x7, x20, [sp, #16] ; 16-byte Folded Reload1669; CHECK-APPLE-NEXT: mov x21, x231670; CHECK-APPLE-NEXT: bl _params_and_return_in_reg21671; CHECK-APPLE-NEXT: mov x19, x01672; CHECK-APPLE-NEXT: mov x22, x11673; CHECK-APPLE-NEXT: mov x24, x21674; CHECK-APPLE-NEXT: mov x25, x31675; CHECK-APPLE-NEXT: mov x26, x41676; CHECK-APPLE-NEXT: mov x27, x51677; CHECK-APPLE-NEXT: mov x28, x61678; CHECK-APPLE-NEXT: mov x23, x71679; CHECK-APPLE-NEXT: str x21, [sp, #24] ; 8-byte Spill1680; CHECK-APPLE-NEXT: mov w0, #1 ; =0x11681; CHECK-APPLE-NEXT: mov w1, #2 ; =0x21682; CHECK-APPLE-NEXT: mov w2, #3 ; =0x31683; CHECK-APPLE-NEXT: mov w3, #4 ; =0x41684; CHECK-APPLE-NEXT: mov w4, #5 ; =0x51685; CHECK-APPLE-NEXT: mov w5, #6 ; =0x61686; CHECK-APPLE-NEXT: mov w6, #7 ; =0x71687; CHECK-APPLE-NEXT: mov w7, #8 ; =0x81688; CHECK-APPLE-NEXT: mov x20, xzr1689; CHECK-APPLE-NEXT: ldr x21, [sp, #8] ; 8-byte Reload1690; CHECK-APPLE-NEXT: bl _params_in_reg21691; CHECK-APPLE-NEXT: mov x0, x191692; CHECK-APPLE-NEXT: mov x1, x221693; CHECK-APPLE-NEXT: mov x2, x241694; CHECK-APPLE-NEXT: mov x3, x251695; CHECK-APPLE-NEXT: mov x4, x261696; CHECK-APPLE-NEXT: mov x5, x271697; CHECK-APPLE-NEXT: mov x6, x281698; CHECK-APPLE-NEXT: mov x7, x231699; CHECK-APPLE-NEXT: ldp x21, x28, [sp, #24] ; 16-byte Folded Reload1700; CHECK-APPLE-NEXT: ldp x29, x30, [sp, #112] ; 16-byte Folded Reload1701; CHECK-APPLE-NEXT: ldp x20, x19, [sp, #96] ; 16-byte Folded Reload1702; CHECK-APPLE-NEXT: ldp x23, x22, [sp, #80] ; 16-byte Folded Reload1703; CHECK-APPLE-NEXT: ldp x25, x24, [sp, #64] ; 16-byte Folded Reload1704; CHECK-APPLE-NEXT: ldp x27, x26, [sp, #48] ; 16-byte Folded Reload1705; CHECK-APPLE-NEXT: add sp, sp, #1281706; CHECK-APPLE-NEXT: ret1707;1708; CHECK-O0-AARCH64-LABEL: params_and_return_in_reg:1709; CHECK-O0-AARCH64: ; %bb.0:1710; CHECK-O0-AARCH64-NEXT: sub sp, sp, #2721711; CHECK-O0-AARCH64-NEXT: stp x28, x20, [sp, #240] ; 16-byte Folded Spill1712; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #256] ; 16-byte Folded Spill1713; CHECK-O0-AARCH64-NEXT: add x29, sp, #2561714; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 161715; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -81716; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -161717; CHECK-O0-AARCH64-NEXT: .cfi_offset w20, -241718; CHECK-O0-AARCH64-NEXT: .cfi_offset w28, -321719; CHECK-O0-AARCH64-NEXT: str x21, [sp, #72] ; 8-byte Spill1720; CHECK-O0-AARCH64-NEXT: str x20, [sp] ; 8-byte Spill1721; CHECK-O0-AARCH64-NEXT: str x7, [sp, #64] ; 8-byte Spill1722; CHECK-O0-AARCH64-NEXT: str x6, [sp, #56] ; 8-byte Spill1723; CHECK-O0-AARCH64-NEXT: str x5, [sp, #48] ; 8-byte Spill1724; CHECK-O0-AARCH64-NEXT: str x4, [sp, #40] ; 8-byte Spill1725; CHECK-O0-AARCH64-NEXT: str x3, [sp, #32] ; 8-byte Spill1726; CHECK-O0-AARCH64-NEXT: str x2, [sp, #24] ; 8-byte Spill1727; CHECK-O0-AARCH64-NEXT: str x1, [sp, #16] ; 8-byte Spill1728; CHECK-O0-AARCH64-NEXT: str x0, [sp, #8] ; 8-byte Spill1729; CHECK-O0-AARCH64-NEXT: ; implicit-def: $x01730; CHECK-O0-AARCH64-NEXT: mov x20, xzr1731; CHECK-O0-AARCH64-NEXT: str x20, [sp, #80] ; 8-byte Spill1732; CHECK-O0-AARCH64-NEXT: mov x21, x201733; CHECK-O0-AARCH64-NEXT: mov w8, #1 ; =0x11734; CHECK-O0-AARCH64-NEXT: mov w0, w81735; CHECK-O0-AARCH64-NEXT: str x0, [sp, #88] ; 8-byte Spill1736; CHECK-O0-AARCH64-NEXT: mov w8, #2 ; =0x21737; CHECK-O0-AARCH64-NEXT: mov w1, w81738; CHECK-O0-AARCH64-NEXT: str x1, [sp, #96] ; 8-byte Spill1739; CHECK-O0-AARCH64-NEXT: mov w8, #3 ; =0x31740; CHECK-O0-AARCH64-NEXT: mov w2, w81741; CHECK-O0-AARCH64-NEXT: str x2, [sp, #104] ; 8-byte Spill1742; CHECK-O0-AARCH64-NEXT: mov w8, #4 ; =0x41743; CHECK-O0-AARCH64-NEXT: mov w3, w81744; CHECK-O0-AARCH64-NEXT: str x3, [sp, #112] ; 8-byte Spill1745; CHECK-O0-AARCH64-NEXT: mov w8, #5 ; =0x51746; CHECK-O0-AARCH64-NEXT: mov w4, w81747; CHECK-O0-AARCH64-NEXT: str x4, [sp, #120] ; 8-byte Spill1748; CHECK-O0-AARCH64-NEXT: mov w8, #6 ; =0x61749; CHECK-O0-AARCH64-NEXT: mov w5, w81750; CHECK-O0-AARCH64-NEXT: str x5, [sp, #128] ; 8-byte Spill1751; CHECK-O0-AARCH64-NEXT: mov w8, #7 ; =0x71752; CHECK-O0-AARCH64-NEXT: mov w6, w81753; CHECK-O0-AARCH64-NEXT: stur x6, [x29, #-120] ; 8-byte Folded Spill1754; CHECK-O0-AARCH64-NEXT: mov w8, #8 ; =0x81755; CHECK-O0-AARCH64-NEXT: mov w7, w81756; CHECK-O0-AARCH64-NEXT: stur x7, [x29, #-112] ; 8-byte Folded Spill1757; CHECK-O0-AARCH64-NEXT: bl _params_in_reg21758; CHECK-O0-AARCH64-NEXT: ldr x20, [sp] ; 8-byte Reload1759; CHECK-O0-AARCH64-NEXT: ldr x0, [sp, #8] ; 8-byte Reload1760; CHECK-O0-AARCH64-NEXT: ldr x1, [sp, #16] ; 8-byte Reload1761; CHECK-O0-AARCH64-NEXT: ldr x2, [sp, #24] ; 8-byte Reload1762; CHECK-O0-AARCH64-NEXT: ldr x3, [sp, #32] ; 8-byte Reload1763; CHECK-O0-AARCH64-NEXT: ldr x4, [sp, #40] ; 8-byte Reload1764; CHECK-O0-AARCH64-NEXT: ldr x5, [sp, #48] ; 8-byte Reload1765; CHECK-O0-AARCH64-NEXT: ldr x6, [sp, #56] ; 8-byte Reload1766; CHECK-O0-AARCH64-NEXT: ldr x7, [sp, #64] ; 8-byte Reload1767; CHECK-O0-AARCH64-NEXT: mov x8, x211768; CHECK-O0-AARCH64-NEXT: ldr x21, [sp, #72] ; 8-byte Reload1769; CHECK-O0-AARCH64-NEXT: stur x8, [x29, #-104] ; 8-byte Folded Spill1770; CHECK-O0-AARCH64-NEXT: bl _params_and_return_in_reg21771; CHECK-O0-AARCH64-NEXT: ldr x20, [sp, #80] ; 8-byte Reload1772; CHECK-O0-AARCH64-NEXT: mov x8, x01773; CHECK-O0-AARCH64-NEXT: ldr x0, [sp, #88] ; 8-byte Reload1774; CHECK-O0-AARCH64-NEXT: stur x8, [x29, #-96] ; 8-byte Folded Spill1775; CHECK-O0-AARCH64-NEXT: mov x8, x11776; CHECK-O0-AARCH64-NEXT: ldr x1, [sp, #96] ; 8-byte Reload1777; CHECK-O0-AARCH64-NEXT: stur x8, [x29, #-88] ; 8-byte Folded Spill1778; CHECK-O0-AARCH64-NEXT: mov x8, x21779; CHECK-O0-AARCH64-NEXT: ldr x2, [sp, #104] ; 8-byte Reload1780; CHECK-O0-AARCH64-NEXT: stur x8, [x29, #-80] ; 8-byte Folded Spill1781; CHECK-O0-AARCH64-NEXT: mov x8, x31782; CHECK-O0-AARCH64-NEXT: ldr x3, [sp, #112] ; 8-byte Reload1783; CHECK-O0-AARCH64-NEXT: stur x8, [x29, #-72] ; 8-byte Folded Spill1784; CHECK-O0-AARCH64-NEXT: mov x8, x41785; CHECK-O0-AARCH64-NEXT: ldr x4, [sp, #120] ; 8-byte Reload1786; CHECK-O0-AARCH64-NEXT: stur x8, [x29, #-64] ; 8-byte Folded Spill1787; CHECK-O0-AARCH64-NEXT: mov x8, x51788; CHECK-O0-AARCH64-NEXT: ldr x5, [sp, #128] ; 8-byte Reload1789; CHECK-O0-AARCH64-NEXT: stur x8, [x29, #-56] ; 8-byte Folded Spill1790; CHECK-O0-AARCH64-NEXT: mov x8, x61791; CHECK-O0-AARCH64-NEXT: ldur x6, [x29, #-120] ; 8-byte Folded Reload1792; CHECK-O0-AARCH64-NEXT: stur x8, [x29, #-48] ; 8-byte Folded Spill1793; CHECK-O0-AARCH64-NEXT: mov x8, x71794; CHECK-O0-AARCH64-NEXT: ldur x7, [x29, #-112] ; 8-byte Folded Reload1795; CHECK-O0-AARCH64-NEXT: stur x8, [x29, #-40] ; 8-byte Folded Spill1796; CHECK-O0-AARCH64-NEXT: mov x8, x211797; CHECK-O0-AARCH64-NEXT: ldur x21, [x29, #-104] ; 8-byte Folded Reload1798; CHECK-O0-AARCH64-NEXT: stur x8, [x29, #-32] ; 8-byte Folded Spill1799; CHECK-O0-AARCH64-NEXT: bl _params_in_reg21800; CHECK-O0-AARCH64-NEXT: ldur x0, [x29, #-96] ; 8-byte Folded Reload1801; CHECK-O0-AARCH64-NEXT: ldur x1, [x29, #-88] ; 8-byte Folded Reload1802; CHECK-O0-AARCH64-NEXT: ldur x2, [x29, #-80] ; 8-byte Folded Reload1803; CHECK-O0-AARCH64-NEXT: ldur x3, [x29, #-72] ; 8-byte Folded Reload1804; CHECK-O0-AARCH64-NEXT: ldur x4, [x29, #-64] ; 8-byte Folded Reload1805; CHECK-O0-AARCH64-NEXT: ldur x5, [x29, #-56] ; 8-byte Folded Reload1806; CHECK-O0-AARCH64-NEXT: ldur x6, [x29, #-48] ; 8-byte Folded Reload1807; CHECK-O0-AARCH64-NEXT: ldur x7, [x29, #-40] ; 8-byte Folded Reload1808; CHECK-O0-AARCH64-NEXT: mov x8, x211809; CHECK-O0-AARCH64-NEXT: ldur x21, [x29, #-32] ; 8-byte Folded Reload1810; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp, #256] ; 16-byte Folded Reload1811; CHECK-O0-AARCH64-NEXT: ldp x28, x20, [sp, #240] ; 16-byte Folded Reload1812; CHECK-O0-AARCH64-NEXT: add sp, sp, #2721813; CHECK-O0-AARCH64-NEXT: ret1814;1815; CHECK-O0-ARM64_32-LABEL: params_and_return_in_reg:1816; CHECK-O0-ARM64_32: ; %bb.0:1817; CHECK-O0-ARM64_32-NEXT: sub sp, sp, #2721818; CHECK-O0-ARM64_32-NEXT: str x28, [sp, #240] ; 8-byte Spill1819; CHECK-O0-ARM64_32-NEXT: stp x20, x30, [sp, #256] ; 16-byte Folded Spill1820; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 2721821; CHECK-O0-ARM64_32-NEXT: .cfi_offset w30, -81822; CHECK-O0-ARM64_32-NEXT: .cfi_offset w20, -161823; CHECK-O0-ARM64_32-NEXT: .cfi_offset w28, -321824; CHECK-O0-ARM64_32-NEXT: str x21, [sp, #72] ; 8-byte Spill1825; CHECK-O0-ARM64_32-NEXT: str x20, [sp] ; 8-byte Spill1826; CHECK-O0-ARM64_32-NEXT: str x7, [sp, #64] ; 8-byte Spill1827; CHECK-O0-ARM64_32-NEXT: str x6, [sp, #56] ; 8-byte Spill1828; CHECK-O0-ARM64_32-NEXT: str x5, [sp, #48] ; 8-byte Spill1829; CHECK-O0-ARM64_32-NEXT: str x4, [sp, #40] ; 8-byte Spill1830; CHECK-O0-ARM64_32-NEXT: str x3, [sp, #32] ; 8-byte Spill1831; CHECK-O0-ARM64_32-NEXT: str x2, [sp, #24] ; 8-byte Spill1832; CHECK-O0-ARM64_32-NEXT: str x1, [sp, #16] ; 8-byte Spill1833; CHECK-O0-ARM64_32-NEXT: str x0, [sp, #8] ; 8-byte Spill1834; CHECK-O0-ARM64_32-NEXT: ; implicit-def: $x01835; CHECK-O0-ARM64_32-NEXT: mov x20, xzr1836; CHECK-O0-ARM64_32-NEXT: str x20, [sp, #80] ; 8-byte Spill1837; CHECK-O0-ARM64_32-NEXT: mov x21, x201838; CHECK-O0-ARM64_32-NEXT: mov w8, #1 ; =0x11839; CHECK-O0-ARM64_32-NEXT: mov w0, w81840; CHECK-O0-ARM64_32-NEXT: str x0, [sp, #88] ; 8-byte Spill1841; CHECK-O0-ARM64_32-NEXT: mov w8, #2 ; =0x21842; CHECK-O0-ARM64_32-NEXT: mov w1, w81843; CHECK-O0-ARM64_32-NEXT: str x1, [sp, #96] ; 8-byte Spill1844; CHECK-O0-ARM64_32-NEXT: mov w8, #3 ; =0x31845; CHECK-O0-ARM64_32-NEXT: mov w2, w81846; CHECK-O0-ARM64_32-NEXT: str x2, [sp, #104] ; 8-byte Spill1847; CHECK-O0-ARM64_32-NEXT: mov w8, #4 ; =0x41848; CHECK-O0-ARM64_32-NEXT: mov w3, w81849; CHECK-O0-ARM64_32-NEXT: str x3, [sp, #112] ; 8-byte Spill1850; CHECK-O0-ARM64_32-NEXT: mov w8, #5 ; =0x51851; CHECK-O0-ARM64_32-NEXT: mov w4, w81852; CHECK-O0-ARM64_32-NEXT: str x4, [sp, #120] ; 8-byte Spill1853; CHECK-O0-ARM64_32-NEXT: mov w8, #6 ; =0x61854; CHECK-O0-ARM64_32-NEXT: mov w5, w81855; CHECK-O0-ARM64_32-NEXT: str x5, [sp, #128] ; 8-byte Spill1856; CHECK-O0-ARM64_32-NEXT: mov w8, #7 ; =0x71857; CHECK-O0-ARM64_32-NEXT: mov w6, w81858; CHECK-O0-ARM64_32-NEXT: str x6, [sp, #136] ; 8-byte Spill1859; CHECK-O0-ARM64_32-NEXT: mov w8, #8 ; =0x81860; CHECK-O0-ARM64_32-NEXT: mov w7, w81861; CHECK-O0-ARM64_32-NEXT: str x7, [sp, #144] ; 8-byte Spill1862; CHECK-O0-ARM64_32-NEXT: bl _params_in_reg21863; CHECK-O0-ARM64_32-NEXT: ldr x20, [sp] ; 8-byte Reload1864; CHECK-O0-ARM64_32-NEXT: ldr x0, [sp, #8] ; 8-byte Reload1865; CHECK-O0-ARM64_32-NEXT: ldr x1, [sp, #16] ; 8-byte Reload1866; CHECK-O0-ARM64_32-NEXT: ldr x2, [sp, #24] ; 8-byte Reload1867; CHECK-O0-ARM64_32-NEXT: ldr x3, [sp, #32] ; 8-byte Reload1868; CHECK-O0-ARM64_32-NEXT: ldr x4, [sp, #40] ; 8-byte Reload1869; CHECK-O0-ARM64_32-NEXT: ldr x5, [sp, #48] ; 8-byte Reload1870; CHECK-O0-ARM64_32-NEXT: ldr x6, [sp, #56] ; 8-byte Reload1871; CHECK-O0-ARM64_32-NEXT: ldr x7, [sp, #64] ; 8-byte Reload1872; CHECK-O0-ARM64_32-NEXT: mov x8, x211873; CHECK-O0-ARM64_32-NEXT: ldr x21, [sp, #72] ; 8-byte Reload1874; CHECK-O0-ARM64_32-NEXT: str x8, [sp, #152] ; 8-byte Spill1875; CHECK-O0-ARM64_32-NEXT: bl _params_and_return_in_reg21876; CHECK-O0-ARM64_32-NEXT: ldr x20, [sp, #80] ; 8-byte Reload1877; CHECK-O0-ARM64_32-NEXT: mov x8, x01878; CHECK-O0-ARM64_32-NEXT: ldr x0, [sp, #88] ; 8-byte Reload1879; CHECK-O0-ARM64_32-NEXT: str x8, [sp, #160] ; 8-byte Spill1880; CHECK-O0-ARM64_32-NEXT: mov x8, x11881; CHECK-O0-ARM64_32-NEXT: ldr x1, [sp, #96] ; 8-byte Reload1882; CHECK-O0-ARM64_32-NEXT: str x8, [sp, #168] ; 8-byte Spill1883; CHECK-O0-ARM64_32-NEXT: mov x8, x21884; CHECK-O0-ARM64_32-NEXT: ldr x2, [sp, #104] ; 8-byte Reload1885; CHECK-O0-ARM64_32-NEXT: str x8, [sp, #176] ; 8-byte Spill1886; CHECK-O0-ARM64_32-NEXT: mov x8, x31887; CHECK-O0-ARM64_32-NEXT: ldr x3, [sp, #112] ; 8-byte Reload1888; CHECK-O0-ARM64_32-NEXT: str x8, [sp, #184] ; 8-byte Spill1889; CHECK-O0-ARM64_32-NEXT: mov x8, x41890; CHECK-O0-ARM64_32-NEXT: ldr x4, [sp, #120] ; 8-byte Reload1891; CHECK-O0-ARM64_32-NEXT: str x8, [sp, #192] ; 8-byte Spill1892; CHECK-O0-ARM64_32-NEXT: mov x8, x51893; CHECK-O0-ARM64_32-NEXT: ldr x5, [sp, #128] ; 8-byte Reload1894; CHECK-O0-ARM64_32-NEXT: str x8, [sp, #200] ; 8-byte Spill1895; CHECK-O0-ARM64_32-NEXT: mov x8, x61896; CHECK-O0-ARM64_32-NEXT: ldr x6, [sp, #136] ; 8-byte Reload1897; CHECK-O0-ARM64_32-NEXT: str x8, [sp, #208] ; 8-byte Spill1898; CHECK-O0-ARM64_32-NEXT: mov x8, x71899; CHECK-O0-ARM64_32-NEXT: ldr x7, [sp, #144] ; 8-byte Reload1900; CHECK-O0-ARM64_32-NEXT: str x8, [sp, #216] ; 8-byte Spill1901; CHECK-O0-ARM64_32-NEXT: mov x8, x211902; CHECK-O0-ARM64_32-NEXT: ldr x21, [sp, #152] ; 8-byte Reload1903; CHECK-O0-ARM64_32-NEXT: str x8, [sp, #224] ; 8-byte Spill1904; CHECK-O0-ARM64_32-NEXT: bl _params_in_reg21905; CHECK-O0-ARM64_32-NEXT: ldr x0, [sp, #160] ; 8-byte Reload1906; CHECK-O0-ARM64_32-NEXT: ldr x1, [sp, #168] ; 8-byte Reload1907; CHECK-O0-ARM64_32-NEXT: ldr x2, [sp, #176] ; 8-byte Reload1908; CHECK-O0-ARM64_32-NEXT: ldr x3, [sp, #184] ; 8-byte Reload1909; CHECK-O0-ARM64_32-NEXT: ldr x4, [sp, #192] ; 8-byte Reload1910; CHECK-O0-ARM64_32-NEXT: ldr x5, [sp, #200] ; 8-byte Reload1911; CHECK-O0-ARM64_32-NEXT: ldr x6, [sp, #208] ; 8-byte Reload1912; CHECK-O0-ARM64_32-NEXT: ldr x7, [sp, #216] ; 8-byte Reload1913; CHECK-O0-ARM64_32-NEXT: mov x8, x211914; CHECK-O0-ARM64_32-NEXT: ldr x21, [sp, #224] ; 8-byte Reload1915; CHECK-O0-ARM64_32-NEXT: ldp x20, x30, [sp, #256] ; 16-byte Folded Reload1916; CHECK-O0-ARM64_32-NEXT: ldr x28, [sp, #240] ; 8-byte Reload1917; CHECK-O0-ARM64_32-NEXT: add sp, sp, #2721918; CHECK-O0-ARM64_32-NEXT: ret1919 %error_ptr_ref = alloca swifterror ptr, align 81920 store ptr null, ptr %error_ptr_ref1921 call swiftcc void @params_in_reg2(i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, ptr swiftself null, ptr nocapture swifterror %error_ptr_ref)1922 %val = call swiftcc { i64, i64, i64, i64, i64, i64, i64, i64 } @params_and_return_in_reg2(i64 %0, i64 %1, i64 %2, i64 %3, i64 %4, i64 %5, i64 %6, i64 %7, ptr swiftself %8, ptr nocapture swifterror %err)1923 call swiftcc void @params_in_reg2(i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, ptr swiftself null, ptr nocapture swifterror %error_ptr_ref)1924 ret { i64, i64, i64, i64, i64, i64, i64, i64 } %val1925}1926 1927declare swiftcc { i64, i64, i64, i64, i64, i64, i64, i64 } @params_and_return_in_reg2(i64, i64, i64, i64, i64, i64, i64, i64, ptr swiftself, ptr nocapture swifterror %err)1928 1929declare void @acallee(ptr)1930 1931; Make sure we don't tail call if the caller returns a swifterror value. We1932; would have to move into the swifterror register before the tail call.1933define swiftcc void @tailcall_from_swifterror(ptr swifterror %error_ptr_ref) {1934; CHECK-APPLE-LABEL: tailcall_from_swifterror:1935; CHECK-APPLE: ; %bb.0: ; %entry1936; CHECK-APPLE-NEXT: str x19, [sp, #-32]! ; 8-byte Folded Spill1937; CHECK-APPLE-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill1938; CHECK-APPLE-NEXT: add x29, sp, #161939; CHECK-APPLE-NEXT: .cfi_def_cfa w29, 161940; CHECK-APPLE-NEXT: .cfi_offset w30, -81941; CHECK-APPLE-NEXT: .cfi_offset w29, -161942; CHECK-APPLE-NEXT: .cfi_offset w19, -321943; CHECK-APPLE-NEXT: mov x19, x211944; CHECK-APPLE-NEXT: mov x0, xzr1945; CHECK-APPLE-NEXT: bl _acallee1946; CHECK-APPLE-NEXT: mov x21, x191947; CHECK-APPLE-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload1948; CHECK-APPLE-NEXT: ldr x19, [sp], #32 ; 8-byte Folded Reload1949; CHECK-APPLE-NEXT: ret1950;1951; CHECK-O0-AARCH64-LABEL: tailcall_from_swifterror:1952; CHECK-O0-AARCH64: ; %bb.0: ; %entry1953; CHECK-O0-AARCH64-NEXT: sub sp, sp, #321954; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill1955; CHECK-O0-AARCH64-NEXT: add x29, sp, #161956; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 161957; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -81958; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -161959; CHECK-O0-AARCH64-NEXT: str x21, [sp, #8] ; 8-byte Spill1960; CHECK-O0-AARCH64-NEXT: mov x0, xzr1961; CHECK-O0-AARCH64-NEXT: bl _acallee1962; CHECK-O0-AARCH64-NEXT: ldr x21, [sp, #8] ; 8-byte Reload1963; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload1964; CHECK-O0-AARCH64-NEXT: add sp, sp, #321965; CHECK-O0-AARCH64-NEXT: ret1966;1967; CHECK-O0-ARM64_32-LABEL: tailcall_from_swifterror:1968; CHECK-O0-ARM64_32: ; %bb.0: ; %entry1969; CHECK-O0-ARM64_32-NEXT: sub sp, sp, #321970; CHECK-O0-ARM64_32-NEXT: str x30, [sp, #16] ; 8-byte Spill1971; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 321972; CHECK-O0-ARM64_32-NEXT: .cfi_offset w30, -161973; CHECK-O0-ARM64_32-NEXT: str x21, [sp, #8] ; 8-byte Spill1974; CHECK-O0-ARM64_32-NEXT: mov x0, xzr1975; CHECK-O0-ARM64_32-NEXT: bl _acallee1976; CHECK-O0-ARM64_32-NEXT: ldr x21, [sp, #8] ; 8-byte Reload1977; CHECK-O0-ARM64_32-NEXT: ldr x30, [sp, #16] ; 8-byte Reload1978; CHECK-O0-ARM64_32-NEXT: add sp, sp, #321979; CHECK-O0-ARM64_32-NEXT: ret1980entry:1981 tail call void @acallee(ptr null)1982 ret void1983}1984 1985declare swiftcc void @foo2(ptr swifterror)1986 1987; Make sure we properly assign registers during fast-isel.1988define swiftcc ptr @testAssign(ptr %error_ref) {1989; CHECK-APPLE-LABEL: testAssign:1990; CHECK-APPLE: ; %bb.0: ; %entry1991; CHECK-APPLE-NEXT: sub sp, sp, #481992; CHECK-APPLE-NEXT: stp x22, x21, [sp, #16] ; 16-byte Folded Spill1993; CHECK-APPLE-NEXT: stp x29, x30, [sp, #32] ; 16-byte Folded Spill1994; CHECK-APPLE-NEXT: add x29, sp, #321995; CHECK-APPLE-NEXT: .cfi_def_cfa w29, 161996; CHECK-APPLE-NEXT: .cfi_offset w30, -81997; CHECK-APPLE-NEXT: .cfi_offset w29, -161998; CHECK-APPLE-NEXT: .cfi_offset w21, -241999; CHECK-APPLE-NEXT: .cfi_offset w22, -322000; CHECK-APPLE-NEXT: mov x21, xzr2001; CHECK-APPLE-NEXT: bl _foo22002; CHECK-APPLE-NEXT: mov x0, x212003; CHECK-APPLE-NEXT: ldp x29, x30, [sp, #32] ; 16-byte Folded Reload2004; CHECK-APPLE-NEXT: ldp x22, x21, [sp, #16] ; 16-byte Folded Reload2005; CHECK-APPLE-NEXT: add sp, sp, #482006; CHECK-APPLE-NEXT: ret2007;2008; CHECK-O0-AARCH64-LABEL: testAssign:2009; CHECK-O0-AARCH64: ; %bb.0: ; %entry2010; CHECK-O0-AARCH64-NEXT: sub sp, sp, #482011; CHECK-O0-AARCH64-NEXT: stp x22, x21, [sp, #16] ; 16-byte Folded Spill2012; CHECK-O0-AARCH64-NEXT: stp x29, x30, [sp, #32] ; 16-byte Folded Spill2013; CHECK-O0-AARCH64-NEXT: add x29, sp, #322014; CHECK-O0-AARCH64-NEXT: .cfi_def_cfa w29, 162015; CHECK-O0-AARCH64-NEXT: .cfi_offset w30, -82016; CHECK-O0-AARCH64-NEXT: .cfi_offset w29, -162017; CHECK-O0-AARCH64-NEXT: .cfi_offset w21, -242018; CHECK-O0-AARCH64-NEXT: .cfi_offset w22, -322019; CHECK-O0-AARCH64-NEXT: ; implicit-def: $x12020; CHECK-O0-AARCH64-NEXT: mov x21, xzr2021; CHECK-O0-AARCH64-NEXT: bl _foo22022; CHECK-O0-AARCH64-NEXT: str x21, [sp] ; 8-byte Spill2023; CHECK-O0-AARCH64-NEXT: ; %bb.1: ; %a2024; CHECK-O0-AARCH64-NEXT: ldr x0, [sp] ; 8-byte Reload2025; CHECK-O0-AARCH64-NEXT: ldp x29, x30, [sp, #32] ; 16-byte Folded Reload2026; CHECK-O0-AARCH64-NEXT: ldp x22, x21, [sp, #16] ; 16-byte Folded Reload2027; CHECK-O0-AARCH64-NEXT: add sp, sp, #482028; CHECK-O0-AARCH64-NEXT: ret2029;2030; CHECK-O0-ARM64_32-LABEL: testAssign:2031; CHECK-O0-ARM64_32: ; %bb.0: ; %entry2032; CHECK-O0-ARM64_32-NEXT: sub sp, sp, #482033; CHECK-O0-ARM64_32-NEXT: stp x22, x21, [sp, #16] ; 16-byte Folded Spill2034; CHECK-O0-ARM64_32-NEXT: stp x29, x30, [sp, #32] ; 16-byte Folded Spill2035; CHECK-O0-ARM64_32-NEXT: .cfi_def_cfa_offset 482036; CHECK-O0-ARM64_32-NEXT: .cfi_offset w30, -82037; CHECK-O0-ARM64_32-NEXT: .cfi_offset w29, -162038; CHECK-O0-ARM64_32-NEXT: .cfi_offset w21, -242039; CHECK-O0-ARM64_32-NEXT: .cfi_offset w22, -322040; CHECK-O0-ARM64_32-NEXT: ; implicit-def: $x12041; CHECK-O0-ARM64_32-NEXT: mov x21, xzr2042; CHECK-O0-ARM64_32-NEXT: bl _foo22043; CHECK-O0-ARM64_32-NEXT: str x21, [sp] ; 8-byte Spill2044; CHECK-O0-ARM64_32-NEXT: ; %bb.1: ; %a2045; CHECK-O0-ARM64_32-NEXT: ldr x8, [sp] ; 8-byte Reload2046; CHECK-O0-ARM64_32-NEXT: and x0, x8, #0xffffffff2047; CHECK-O0-ARM64_32-NEXT: ldp x29, x30, [sp, #32] ; 16-byte Folded Reload2048; CHECK-O0-ARM64_32-NEXT: ldp x22, x21, [sp, #16] ; 16-byte Folded Reload2049; CHECK-O0-ARM64_32-NEXT: add sp, sp, #482050; CHECK-O0-ARM64_32-NEXT: ret2051entry:2052 %error_ptr = alloca swifterror ptr2053 store ptr null, ptr %error_ptr2054 call swiftcc void @foo2(ptr swifterror %error_ptr)2055 br label %a2056 2057a:2058 %error = load ptr, ptr %error_ptr2059 ret ptr %error2060}2061