brintos

brintos / llvm-project-archived public Read only

0
0
Text · 31.4 KiB · dc35224 Raw
696 lines · plain
1; RUN: llc -mtriple=arm64ec-pc-windows-msvc < %s | FileCheck %s2 3declare void @no_op() nounwind;4; CHECK-LABEL:    .def    $iexit_thunk$cdecl$v$v;5; CHECK:          .section        .wowthk$aa,"xr",discard,$iexit_thunk$cdecl$v$v6; CHECK:          // %bb.0:7; CHECK-NEXT:     sub     sp, sp, #488; CHECK-NEXT:     .seh_stackalloc 489; CHECK-NEXT:     stp     x29, x30, [sp, #32]             // 16-byte Folded Spill10; CHECK-NEXT:     .seh_save_fplr  3211; CHECK-NEXT:     add     x29, sp, #3212; CHECK-NEXT:     .seh_add_fp     3213; CHECK-NEXT:     .seh_endprologue14; CHECK-NEXT:     adrp    x8, __os_arm64x_dispatch_call_no_redirect15; CHECK-NEXT:     ldr     x16, [x8, :lo12:__os_arm64x_dispatch_call_no_redirect]16; CHECK-NEXT:     blr     x1617; CHECK-NEXT:     .seh_startepilogue18; CHECK-NEXT:     ldp     x29, x30, [sp, #32]             // 16-byte Folded Reload19; CHECK-NEXT:     .seh_save_fplr  3220; CHECK-NEXT:     add     sp, sp, #4821; CHECK-NEXT:     .seh_stackalloc 4822; CHECK-NEXT:     .seh_endepilogue23; CHECK-NEXT:     ret24; CHECK-NEXT:     .seh_endfunclet25; CHECK-NEXT:     .seh_endproc26; CHECK-LABEL:    .def    "#no_op$exit_thunk";27; CHECK:          .section        .wowthk$aa,"xr",discard,"#no_op$exit_thunk"28; CHECK:          .weak_anti_dep  no_op29; CHECK:          .weak_anti_dep  "#no_op"30; CHECK:          // %bb.0:31; CHECK-NEXT:     str     x30, [sp, #-16]!                // 8-byte Folded Spill32; CHECK-NEXT:     .seh_save_reg_x x30, 1633; CHECK-NEXT:     .seh_endprologue34; CHECK-NEXT:     adrp    x8, __os_arm64x_check_icall35; CHECK-NEXT:     adrp    x11, no_op36; CHECK-NEXT:     add     x11, x11, :lo12:no_op37; CHECK-NEXT:     ldr     x8, [x8, :lo12:__os_arm64x_check_icall]38; CHECK-NEXT:     adrp    x10, $iexit_thunk$cdecl$v$v39; CHECK-NEXT:     add     x10, x10, :lo12:$iexit_thunk$cdecl$v$v40; CHECK-NEXT:     blr     x841; CHECK-NEXT:     .seh_startepilogue42; CHECK-NEXT:     ldr     x30, [sp], #16                  // 8-byte Folded Reload43; CHECK-NEXT:     .seh_save_reg_x x30, 1644; CHECK-NEXT:     .seh_endepilogue45; CHECK-NEXT:     br      x1146; CHECK-NEXT:     .seh_endfunclet47; CHECK-NEXT:     .seh_endproc48 49declare i64 @simple_integers(i8, i16, i32, i64) nounwind;50; CHECK-LABEL:    .def    $iexit_thunk$cdecl$i8$i8i8i8i8;51; CHECK:          .section        .wowthk$aa,"xr",discard,$iexit_thunk$cdecl$i8$i8i8i8i852; CHECK:          // %bb.0:53; CHECK-NEXT:     sub     sp, sp, #4854; CHECK-NEXT:     .seh_stackalloc 4855; CHECK-NEXT:     stp     x29, x30, [sp, #32]             // 16-byte Folded Spill56; CHECK-NEXT:     .seh_save_fplr  3257; CHECK-NEXT:     add     x29, sp, #3258; CHECK-NEXT:     .seh_add_fp     3259; CHECK-NEXT:     .seh_endprologue60; CHECK-NEXT:     adrp    x8, __os_arm64x_dispatch_call_no_redirect61; CHECK-NEXT:     ldr     x16, [x8, :lo12:__os_arm64x_dispatch_call_no_redirect]62; CHECK-NEXT:     blr     x1663; CHECK-NEXT:     mov     x0, x864; CHECK-NEXT:     .seh_startepilogue65; CHECK-NEXT:     ldp     x29, x30, [sp, #32]             // 16-byte Folded Reload66; CHECK-NEXT:     .seh_save_fplr  3267; CHECK-NEXT:     add     sp, sp, #4868; CHECK-NEXT:     .seh_stackalloc 4869; CHECK-NEXT:     .seh_endepilogue70; CHECK-NEXT:     ret71; CHECK-NEXT:     .seh_endfunclet72; CHECK-NEXT:     .seh_endproc73; CHECK-LABEL:    .def    "#simple_integers$exit_thunk";74; CHECK:          .section        .wowthk$aa,"xr",discard,"#simple_integers$exit_thunk"75; CHECK:          .weak_anti_dep  simple_integers76; CHECK:          .weak_anti_dep  "#simple_integers"77; CHECK:          // %bb.0:78; CHECK-NEXT:     str     x30, [sp, #-16]!                // 8-byte Folded Spill79; CHECK-NEXT:     .seh_save_reg_x x30, 1680; CHECK-NEXT:     .seh_endprologue81; CHECK-NEXT:     adrp    x8, __os_arm64x_check_icall82; CHECK-NEXT:     adrp    x11, simple_integers83; CHECK-NEXT:     add     x11, x11, :lo12:simple_integers84; CHECK-NEXT:     ldr     x8, [x8, :lo12:__os_arm64x_check_icall]85; CHECK-NEXT:     adrp    x10, $iexit_thunk$cdecl$i8$i8i8i8i886; CHECK-NEXT:     add     x10, x10, :lo12:$iexit_thunk$cdecl$i8$i8i8i8i887; CHECK-NEXT:     blr     x888; CHECK-NEXT:     .seh_startepilogue89; CHECK-NEXT:     ldr     x30, [sp], #16                  // 8-byte Folded Reload90; CHECK-NEXT:     .seh_save_reg_x x30, 1691; CHECK-NEXT:     .seh_endepilogue92; CHECK-NEXT:     br      x1193; CHECK-NEXT:     .seh_endfunclet94; CHECK-NEXT:     .seh_endproc95 96; NOTE: Only half, float, and double are supported.97declare double @simple_floats(half, float, double) nounwind;98; CHECK-LABEL:    .def    $iexit_thunk$cdecl$d$__llvm_h__fd;99; CHECK:          .section        .wowthk$aa,"xr",discard,$iexit_thunk$cdecl$d$__llvm_h__fd100; CHECK:          // %bb.0:101; CHECK-NEXT:     sub     sp, sp, #48102; CHECK-NEXT:     .seh_stackalloc 48103; CHECK-NEXT:     stp     x29, x30, [sp, #32]             // 16-byte Folded Spill104; CHECK-NEXT:     .seh_save_fplr  32105; CHECK-NEXT:     add     x29, sp, #32106; CHECK-NEXT:     .seh_add_fp     32107; CHECK-NEXT:     .seh_endprologue108; CHECK-NEXT:     adrp    x8, __os_arm64x_dispatch_call_no_redirect109; CHECK-NEXT:     ldr     x16, [x8, :lo12:__os_arm64x_dispatch_call_no_redirect]110; CHECK-NEXT:     blr     x16111; CHECK-NEXT:     .seh_startepilogue112; CHECK-NEXT:     ldp     x29, x30, [sp, #32]             // 16-byte Folded Reload113; CHECK-NEXT:     .seh_save_fplr  32114; CHECK-NEXT:     add     sp, sp, #48115; CHECK-NEXT:     .seh_stackalloc 48116; CHECK-NEXT:     .seh_endepilogue117; CHECK-NEXT:     ret118; CHECK-NEXT:     .seh_endfunclet119; CHECK-NEXT:     .seh_endproc120; CHECK-LABEL:    .def    "#simple_floats$exit_thunk";121; CHECK:          .section        .wowthk$aa,"xr",discard,"#simple_floats$exit_thunk"122; CHECK:          .weak_anti_dep  simple_floats123; CHECK:          .weak_anti_dep  "#simple_floats"124; CHECK:          // %bb.0:125; CHECK-NEXT:     str     x30, [sp, #-16]!                // 8-byte Folded Spill126; CHECK-NEXT:     .seh_save_reg_x x30, 16127; CHECK-NEXT:     .seh_endprologue128; CHECK-NEXT:     adrp    x8, __os_arm64x_check_icall129; CHECK-NEXT:     adrp    x11, simple_floats130; CHECK-NEXT:     add     x11, x11, :lo12:simple_floats131; CHECK-NEXT:     ldr     x8, [x8, :lo12:__os_arm64x_check_icall]132; CHECK-NEXT:     adrp    x10, $iexit_thunk$cdecl$d$__llvm_h__fd133; CHECK-NEXT:     add     x10, x10, :lo12:$iexit_thunk$cdecl$d$__llvm_h__fd134; CHECK-NEXT:     blr     x8135; CHECK-NEXT:     .seh_startepilogue136; CHECK-NEXT:     ldr     x30, [sp], #16                  // 8-byte Folded Reload137; CHECK-NEXT:     .seh_save_reg_x x30, 16138; CHECK-NEXT:     .seh_endepilogue139; CHECK-NEXT:     br      x11140; CHECK-NEXT:     .seh_endfunclet141; CHECK-NEXT:     .seh_endproc142 143declare void @has_varargs(...) nounwind;144; CHECK-LABEL:    .def    $iexit_thunk$cdecl$v$varargs;145; CHECK:          .section        .wowthk$aa,"xr",discard,$iexit_thunk$cdecl$v$varargs146; CHECK:          // %bb.0:147; CHECK-NEXT:     sub     sp, sp, #64148; CHECK-NEXT:     .seh_stackalloc 64149; CHECK-NEXT:     stp     x29, x30, [sp, #48]             // 16-byte Folded Spill150; CHECK-NEXT:     .seh_save_fplr  48151; CHECK-NEXT:     add     x29, sp, #48152; CHECK-NEXT:     .seh_add_fp     48153; CHECK-NEXT:     .seh_endprologue154; CHECK-NEXT:     adrp    x8, __os_arm64x_dispatch_call_no_redirect155; CHECK-NEXT:     stp     x4, x5, [sp, #32]156; CHECK-NEXT:     ldr     x16, [x8, :lo12:__os_arm64x_dispatch_call_no_redirect]157; CHECK-NEXT:     blr     x16158; CHECK-NEXT:     .seh_startepilogue159; CHECK-NEXT:     ldp     x29, x30, [sp, #48]             // 16-byte Folded Reload160; CHECK-NEXT:     .seh_save_fplr  48161; CHECK-NEXT:     add     sp, sp, #64162; CHECK-NEXT:     .seh_stackalloc 64163; CHECK-NEXT:     .seh_endepilogue164; CHECK-NEXT:     ret165; CHECK-NEXT:     .seh_endfunclet166; CHECK-NEXT:     .seh_endproc167; CHECK-LABEL:    .def    "#has_varargs$exit_thunk";168; CHECK:          .section        .wowthk$aa,"xr",discard,"#has_varargs$exit_thunk"169; CHECK:          .weak_anti_dep  has_varargs170; CHECK:          .weak_anti_dep  "#has_varargs"171; CHECK:          // %bb.0:172; CHECK-NEXT:     str     x30, [sp, #-16]!                // 8-byte Folded Spill173; CHECK-NEXT:     .seh_save_reg_x x30, 16174; CHECK-NEXT:     .seh_endprologue175; CHECK-NEXT:     adrp    x8, __os_arm64x_check_icall176; CHECK-NEXT:     adrp    x11, has_varargs177; CHECK-NEXT:     add     x11, x11, :lo12:has_varargs178; CHECK-NEXT:     ldr     x8, [x8, :lo12:__os_arm64x_check_icall]179; CHECK-NEXT:     adrp    x10, $iexit_thunk$cdecl$v$varargs180; CHECK-NEXT:     add     x10, x10, :lo12:$iexit_thunk$cdecl$v$varargs181; CHECK-NEXT:     blr     x8182; CHECK-NEXT:     .seh_startepilogue183; CHECK-NEXT:     ldr     x30, [sp], #16                  // 8-byte Folded Reload184; CHECK-NEXT:     .seh_save_reg_x x30, 16185; CHECK-NEXT:     .seh_endepilogue186; CHECK-NEXT:     br      x11187; CHECK-NEXT:     .seh_endfunclet188; CHECK-NEXT:     .seh_endproc189 190declare void @has_sret(ptr sret([100 x i8])) nounwind;191; CHECK-LABEL:    .def    $iexit_thunk$cdecl$m100$v;192; CHECK:          .section        .wowthk$aa,"xr",discard,$iexit_thunk$cdecl$m100$v193; CHECK:          // %bb.0:194; CHECK-NEXT:     sub     sp, sp, #48195; CHECK-NEXT:     .seh_stackalloc 48196; CHECK-NEXT:     stp     x29, x30, [sp, #32]             // 16-byte Folded Spill197; CHECK-NEXT:     .seh_save_fplr  32198; CHECK-NEXT:     add     x29, sp, #32199; CHECK-NEXT:     .seh_add_fp     32200; CHECK-NEXT:     .seh_endprologue201; CHECK-NEXT:     mov     x0, x8202; CHECK-NEXT:     adrp    x8, __os_arm64x_dispatch_call_no_redirect203; CHECK-NEXT:     ldr     x16, [x8, :lo12:__os_arm64x_dispatch_call_no_redirect]204; CHECK-NEXT:     blr     x16205; CHECK-NEXT:     .seh_startepilogue206; CHECK-NEXT:     ldp     x29, x30, [sp, #32]             // 16-byte Folded Reload207; CHECK-NEXT:     .seh_save_fplr  32208; CHECK-NEXT:     add     sp, sp, #48209; CHECK-NEXT:     .seh_stackalloc 48210; CHECK-NEXT:     .seh_endepilogue211; CHECK-NEXT:     ret212; CHECK-NEXT:     .seh_endfunclet213; CHECK-NEXT:     .seh_endproc214; CHECK-LABEL:    .def    "#has_sret$exit_thunk";215; CHECK:          .section        .wowthk$aa,"xr",discard,"#has_sret$exit_thunk"216; CHECK:          .weak_anti_dep  has_sret217; CHECK:          .weak_anti_dep  "#has_sret"218; CHECK:          // %bb.0:219; CHECK-NEXT:     str     x30, [sp, #-16]!                // 8-byte Folded Spill220; CHECK-NEXT:     .seh_save_reg_x x30, 16221; CHECK-NEXT:     .seh_endprologue222; CHECK-NEXT:     adrp    x9, __os_arm64x_check_icall223; CHECK-NEXT:     adrp    x11, has_sret224; CHECK-NEXT:     add     x11, x11, :lo12:has_sret225; CHECK-NEXT:     ldr     x9, [x9, :lo12:__os_arm64x_check_icall]226; CHECK-NEXT:     adrp    x10, $iexit_thunk$cdecl$m100$v227; CHECK-NEXT:     add     x10, x10, :lo12:$iexit_thunk$cdecl$m100$v228; CHECK-NEXT:     blr     x9229; CHECK-NEXT:     .seh_startepilogue230; CHECK-NEXT:     ldr     x30, [sp], #16                  // 8-byte Folded Reload231; CHECK-NEXT:     .seh_save_reg_x x30, 16232; CHECK-NEXT:     .seh_endepilogue233; CHECK-NEXT:     br      x11234; CHECK-NEXT:     .seh_endfunclet235; CHECK-NEXT:     .seh_endproc236 237%TSRet = type { i64, i64 }238declare void @has_aligned_sret(ptr align 32 sret(%TSRet)) nounwind;239; CHECK-LABEL:    .def    $iexit_thunk$cdecl$m16$v;240; CHECK:          .section        .wowthk$aa,"xr",discard,$iexit_thunk$cdecl$m16$v241; CHECK:          // %bb.0:242; CHECK-NEXT:     sub     sp, sp, #48243; CHECK-NEXT:     .seh_stackalloc 48244; CHECK-NEXT:     stp     x29, x30, [sp, #32]             // 16-byte Folded Spill245; CHECK-NEXT:     .seh_save_fplr  32246; CHECK-NEXT:     add     x29, sp, #32247; CHECK-NEXT:     .seh_add_fp     32248; CHECK-NEXT:     .seh_endprologue249; CHECK-NEXT:     mov     x0, x8250; CHECK-NEXT:     adrp    x8, __os_arm64x_dispatch_call_no_redirect251; CHECK-NEXT:     ldr     x16, [x8, :lo12:__os_arm64x_dispatch_call_no_redirect]252; CHECK-NEXT:     blr     x16253; CHECK-NEXT:     .seh_startepilogue254; CHECK-NEXT:     ldp     x29, x30, [sp, #32]             // 16-byte Folded Reload255; CHECK-NEXT:     .seh_save_fplr  32256; CHECK-NEXT:     add     sp, sp, #48257; CHECK-NEXT:     .seh_stackalloc 48258; CHECK-NEXT:     .seh_endepilogue259; CHECK-NEXT:     ret260; CHECK-NEXT:     .seh_endfunclet261; CHECK-NEXT:     .seh_endproc262; CHECK-LABEL:    .def    "#has_aligned_sret$exit_thunk";263; CHECK:          .section        .wowthk$aa,"xr",discard,"#has_aligned_sret$exit_thunk"264; CHECK:          .weak_anti_dep  has_aligned_sret265; CHECK:          .weak_anti_dep  "#has_aligned_sret"266; CHECK:          // %bb.0:267; CHECK:          str     x30, [sp, #-16]!                // 8-byte Folded Spill268; CHECK:          .seh_save_reg_x x30, 16269; CHECK:          .seh_endprologue270; CHECK:          adrp    x9, __os_arm64x_check_icall271; CHECK:          adrp    x11, has_aligned_sret272; CHECK:          add     x11, x11, :lo12:has_aligned_sret273; CHECK:          ldr     x9, [x9, :lo12:__os_arm64x_check_icall]274; CHECK:          adrp    x10, $iexit_thunk$cdecl$m16$v275; CHECK:          add     x10, x10, :lo12:$iexit_thunk$cdecl$m16$v276; CHECK:          blr     x9277; CHECK:          .seh_startepilogue278; CHECK:          ldr     x30, [sp], #16                  // 8-byte Folded Reload279; CHECK:          .seh_save_reg_x x30, 16280; CHECK:          .seh_endepilogue281; CHECK:          br      x11282; CHECK:          .seh_endfunclet283; CHECK:          .seh_endproc284 285declare [2 x i8] @small_array([2 x i8], [2 x half], [2 x float]) nounwind;286; CHECK-LABEL:    .def    $iexit_thunk$cdecl$m2$m2__llvm_H__4F8;287; CHECK:          .section        .wowthk$aa,"xr",discard,$iexit_thunk$cdecl$m2$m2__llvm_H__4F8288; CHECK:          // %bb.0:289; CHECK-NEXT:     sub     sp, sp, #80290; CHECK-NEXT:     .seh_stackalloc 80291; CHECK-NEXT:     stp     x29, x30, [sp, #64]             // 16-byte Folded Spill292; CHECK-NEXT:     .seh_save_fplr  64293; CHECK-NEXT:     add     x29, sp, #64294; CHECK-NEXT:     .seh_add_fp     64295; CHECK-NEXT:     .seh_endprologue296; CHECK-NEXT:     sturb	w0, [x29, #-2]297; CHECK-NEXT:     adrp	x8, __os_arm64x_dispatch_call_no_redirect298; CHECK-NEXT:     sturb	w1, [x29, #-1]299; CHECK-NEXT:     ldr	x16, [x8, :lo12:__os_arm64x_dispatch_call_no_redirect]300; CHECK-NEXT:     stur	h0, [x29, #-6]301; CHECK-NEXT:     ldurh	w0, [x29, #-2]302; CHECK-NEXT:     stur	h1, [x29, #-4]303; CHECK-NEXT:     stp	s2, s3, [x29, #-16]304; CHECK-NEXT:     ldur	w1, [x29, #-6]305; CHECK-NEXT:     ldur	x2, [x29, #-16]306; CHECK-NEXT:     blr	x16307; CHECK-NEXT:     mov	w0, w8308; CHECK-NEXT:     sturh	w8, [x29, #-18]309; CHECK-NEXT:     ubfx	w1, w8, #8, #8310; CHECK-NEXT:     .seh_startepilogue311; CHECK-NEXT:     ldp	x29, x30, [sp, #64]             // 16-byte Folded Reload312; CHECK-NEXT:     .seh_save_fplr	64313; CHECK-NEXT:     add	sp, sp, #80314; CHECK-NEXT:     .seh_stackalloc	80315; CHECK-NEXT:     .seh_endepilogue316; CHECK-NEXT:     ret317; CHECK-NEXT:     .seh_endfunclet318; CHECK-NEXT:     .seh_endproc319; CHECK-LABEL:    .def    "#small_array$exit_thunk";320; CHECK:          .section        .wowthk$aa,"xr",discard,"#small_array$exit_thunk"321; CHECK:          .weak_anti_dep  small_array322; CHECK:          .weak_anti_dep  "#small_array"323; CHECK:          // %bb.0:324; CHECK-NEXT:     str     x30, [sp, #-16]!                // 8-byte Folded Spill325; CHECK-NEXT:     .seh_save_reg_x x30, 16326; CHECK-NEXT:     .seh_endprologue327; CHECK-NEXT:     adrp    x8, __os_arm64x_check_icall328; CHECK-NEXT:     adrp    x11, small_array329; CHECK-NEXT:     add     x11, x11, :lo12:small_array330; CHECK-NEXT:     ldr     x8, [x8, :lo12:__os_arm64x_check_icall]331; CHECK-NEXT:     adrp    x10, $iexit_thunk$cdecl$m2$m2__llvm_H__4F8332; CHECK-NEXT:     add     x10, x10, :lo12:$iexit_thunk$cdecl$m2$m2__llvm_H__4F8333; CHECK-NEXT:     blr     x8334; CHECK-NEXT:     .seh_startepilogue335; CHECK-NEXT:     ldr     x30, [sp], #16                  // 8-byte Folded Reload336; CHECK-NEXT:     .seh_save_reg_x x30, 16337; CHECK-NEXT:     .seh_endepilogue338; CHECK-NEXT:     br      x11339; CHECK-NEXT:     .seh_endfunclet340; CHECK-NEXT:     .seh_endproc341 342declare [3 x i64] @large_array([3 x i64], [2 x double], [2 x [2 x i64]]) nounwind;343; CHECK-LABEL:    .def    $iexit_thunk$cdecl$m24$m24D16m32;344; CHECK:          .section        .wowthk$aa,"xr",discard,$iexit_thunk$cdecl$m24$m24D16m32345; CHECK:          // %bb.0:346; CHECK-NEXT:     sub     sp, sp, #144347; CHECK-NEXT:     .seh_stackalloc 144348; CHECK-NEXT:     stp     x29, x30, [sp, #128]            // 16-byte Folded Spill349; CHECK-NEXT:     .seh_save_fplr  128350; CHECK-NEXT:     add     x29, sp, #128351; CHECK-NEXT:     .seh_add_fp     128352; CHECK-NEXT:     .seh_endprologue353; CHECK-NEXT:     adrp    x8, __os_arm64x_dispatch_call_no_redirect354; CHECK-NEXT:     stp     x0, x1, [x29, #-48]355; CHECK-NEXT:     sub     x0, x29, #24356; CHECK-NEXT:     ldr     x16, [x8, :lo12:__os_arm64x_dispatch_call_no_redirect]357; CHECK-NEXT:     stur    x2, [x29, #-32]358; CHECK-NEXT:     sub     x1, x29, #48359; CHECK-NEXT:     stp     x3, x4, [sp, #32]360; CHECK-NEXT:     add     x2, sp, #64361; CHECK-NEXT:     add     x3, sp, #32362; CHECK-NEXT:     stp     d0, d1, [sp, #64]363; CHECK-NEXT:     stp     x5, x6, [sp, #48]364; CHECK-NEXT:     blr     x16365; CHECK-NEXT:     ldp     x0, x1, [x29, #-24]366; CHECK-NEXT:     ldur    x2, [x29, #-8]367; CHECK-NEXT:     .seh_startepilogue368; CHECK-NEXT:     ldp     x29, x30, [sp, #128]            // 16-byte Folded Reload369; CHECK-NEXT:     .seh_save_fplr  128370; CHECK-NEXT:     add     sp, sp, #144371; CHECK-NEXT:     .seh_stackalloc 144372; CHECK-NEXT:     .seh_endepilogue373; CHECK-NEXT:     ret374; CHECK-NEXT:     .seh_endfunclet375; CHECK-NEXT:     .seh_endproc376; CHECK-LABEL:    .def    "#large_array$exit_thunk";377; CHECK:          .section        .wowthk$aa,"xr",discard,"#large_array$exit_thunk"378; CHECK:          .weak_anti_dep  large_array379; CHECK:          .weak_anti_dep  "#large_array"380; CHECK:          // %bb.0:381; CHECK-NEXT:     str     x30, [sp, #-16]!                // 8-byte Folded Spill382; CHECK-NEXT:     .seh_save_reg_x x30, 16383; CHECK-NEXT:     .seh_endprologue384; CHECK-NEXT:     adrp    x8, __os_arm64x_check_icall385; CHECK-NEXT:     adrp    x11, large_array386; CHECK-NEXT:     add     x11, x11, :lo12:large_array387; CHECK-NEXT:     ldr     x8, [x8, :lo12:__os_arm64x_check_icall]388; CHECK-NEXT:     adrp    x10, $iexit_thunk$cdecl$m24$m24D16m32389; CHECK-NEXT:     add     x10, x10, :lo12:$iexit_thunk$cdecl$m24$m24D16m32390; CHECK-NEXT:     blr     x8391; CHECK-NEXT:     .seh_startepilogue392; CHECK-NEXT:     ldr     x30, [sp], #16                  // 8-byte Folded Reload393; CHECK-NEXT:     .seh_save_reg_x x30, 16394; CHECK-NEXT:     .seh_endepilogue395; CHECK-NEXT:     br      x11396; CHECK-NEXT:     .seh_endfunclet397; CHECK-NEXT:     .seh_endproc398 399%T1 = type { i16 }400%T2 = type { i32, float }401%T3 = type { i64, double }402%T4 = type { i64, double, i8 }403declare %T2 @simple_struct(%T1, %T2, %T3, %T4) nounwind;404; CHECK-LABEL:    .def    $iexit_thunk$cdecl$m8$i8m8m16m24;405; CHECK:          .section        .wowthk$aa,"xr",discard,$iexit_thunk$cdecl$m8$i8m8m16m24406; CHECK:          // %bb.0:407; CHECK-NEXT:     sub     sp, sp, #112408; CHECK-NEXT:     .seh_stackalloc 112409; CHECK-NEXT:     stp     x29, x30, [sp, #96]             // 16-byte Folded Spill410; CHECK-NEXT:     .seh_save_fplr  96411; CHECK-NEXT:     add     x29, sp, #96412; CHECK-NEXT:     .seh_add_fp     96413; CHECK-NEXT:     .seh_endprologue414; CHECK-NEXT:     stur    w1, [x29, #-8]415; CHECK-NEXT:     adrp    x8, __os_arm64x_dispatch_call_no_redirect416; CHECK-NEXT:     stur    s0, [x29, #-4]417; CHECK-NEXT:     ldr     x16, [x8, :lo12:__os_arm64x_dispatch_call_no_redirect]418; CHECK-NEXT:     ldur    x1, [x29, #-8]419; CHECK-NEXT:     stur    x2, [x29, #-24]420; CHECK-NEXT:     sub     x2, x29, #24421; CHECK-NEXT:     str     x3, [sp, #48]422; CHECK-NEXT:     add     x3, sp, #48423; CHECK-NEXT:     stur    d1, [x29, #-16]424; CHECK-NEXT:     str     d2, [sp, #56]425; CHECK-NEXT:     strb    w4, [sp, #64]426; CHECK-NEXT:     blr     x16427; CHECK-NEXT:     str     x8, [sp, #40]428; CHECK-NEXT:     mov     x0, x8429; CHECK-NEXT:     ldr     s0, [sp, #44]430; CHECK-NEXT:                                     // kill: def $w0 killed $w0 killed $x0431; CHECK-NEXT:     .seh_startepilogue432; CHECK-NEXT:     ldp     x29, x30, [sp, #96]             // 16-byte Folded Reload433; CHECK-NEXT:     .seh_save_fplr  96434; CHECK-NEXT:     add     sp, sp, #112435; CHECK-NEXT:     .seh_stackalloc 112436; CHECK-NEXT:     .seh_endepilogue437; CHECK-NEXT:     ret438; CHECK-NEXT:     .seh_endfunclet439; CHECK-NEXT:     .seh_endproc440; CHECK-LABEL:    .def    "#simple_struct$exit_thunk";441; CHECK:          .section        .wowthk$aa,"xr",discard,"#simple_struct$exit_thunk"442; CHECK:          .weak_anti_dep  simple_struct443; CHECK:          .weak_anti_dep  "#simple_struct"444; CHECK:          // %bb.0:445; CHECK-NEXT:     str     x30, [sp, #-16]!                // 8-byte Folded Spill446; CHECK-NEXT:     .seh_save_reg_x x30, 16447; CHECK-NEXT:     .seh_endprologue448; CHECK-NEXT:     adrp    x8, __os_arm64x_check_icall449; CHECK-NEXT:     adrp    x11, simple_struct450; CHECK-NEXT:     add     x11, x11, :lo12:simple_struct451; CHECK-NEXT:     ldr     x8, [x8, :lo12:__os_arm64x_check_icall]452; CHECK-NEXT:     adrp    x10, $iexit_thunk$cdecl$m8$i8m8m16m24453; CHECK-NEXT:     add     x10, x10, :lo12:$iexit_thunk$cdecl$m8$i8m8m16m24454; CHECK-NEXT:     blr     x8455; CHECK-NEXT:     .seh_startepilogue456; CHECK-NEXT:     ldr     x30, [sp], #16                  // 8-byte Folded Reload457; CHECK-NEXT:     .seh_save_reg_x x30, 16458; CHECK-NEXT:     .seh_endepilogue459; CHECK-NEXT:     br      x11460; CHECK-NEXT:     .seh_endfunclet461; CHECK-NEXT:     .seh_endproc462 463declare <4 x i8> @small_vector(<4 x i8> %0) nounwind;464; CHECK-LABEL:    .def	$iexit_thunk$cdecl$m$m;465; CHECK:          .section	.wowthk$aa,"xr",discard,$iexit_thunk$cdecl$m$m466; CHECK:          // %bb.0:467; CHECK-NEXT:     sub	sp, sp, #64468; CHECK-NEXT:     .seh_stackalloc	64469; CHECK-NEXT:     stp	x29, x30, [sp, #48]             // 16-byte Folded Spill470; CHECK-NEXT:     .seh_save_fplr	48471; CHECK-NEXT:     add	x29, sp, #48472; CHECK-NEXT:     .seh_add_fp	48473; CHECK-NEXT:     .seh_endprologue474; CHECK-NEXT:     uzp1	v0.8b, v0.8b, v0.8b475; CHECK-NEXT:     adrp	x8, __os_arm64x_dispatch_call_no_redirect476; CHECK-NEXT:     ldr	x16, [x8, :lo12:__os_arm64x_dispatch_call_no_redirect]477; CHECK-NEXT:     fmov	w0, s0478; CHECK-NEXT:     stur	s0, [x29, #-4]479; CHECK-NEXT:     blr	x16480; CHECK-NEXT:     stur	w8, [x29, #-8]481; CHECK-NEXT:     ldur	s0, [x29, #-8]482; CHECK-NEXT:     ushll	v0.8h, v0.8b, #0483; CHECK-NEXT:                                           // kill: def $d0 killed $d0 killed $q0484; CHECK-NEXT:     .seh_startepilogue485; CHECK-NEXT:     ldp	x29, x30, [sp, #48]             // 16-byte Folded Reload486; CHECK-NEXT:     .seh_save_fplr	48487; CHECK-NEXT:     add	sp, sp, #64488; CHECK-NEXT:     .seh_stackalloc	64489; CHECK-NEXT:     .seh_endepilogue490; CHECK-NEXT:     ret491; CHECK-NEXT:     .seh_endfunclet492; CHECK-NEXT:     .seh_endproc493; CHECK-LABEL:    .def	"#small_vector$exit_thunk";494; CHECK:          .section	.wowthk$aa,"xr",discard,"#small_vector$exit_thunk"495; CHECK:          .weak_anti_dep	small_vector496; CHECK:          .weak_anti_dep	"#small_vector"497; CHECK:          // %bb.0:498; CHECK-NEXT:     str	x30, [sp, #-16]!                // 8-byte Folded Spill499; CHECK-NEXT:     .seh_save_reg_x	x30, 16500; CHECK-NEXT:     .seh_endprologue501; CHECK-NEXT:     adrp	x8, __os_arm64x_check_icall502; CHECK-NEXT:     adrp	x11, small_vector503; CHECK-NEXT:     add	x11, x11, :lo12:small_vector504; CHECK-NEXT:     ldr	x8, [x8, :lo12:__os_arm64x_check_icall]505; CHECK-NEXT:     adrp	x10, $iexit_thunk$cdecl$m$m506; CHECK-NEXT:     add	x10, x10, :lo12:$iexit_thunk$cdecl$m$m507; CHECK-NEXT:     blr	x8508; CHECK-NEXT:     .seh_startepilogue509; CHECK-NEXT:     ldr	x30, [sp], #16                  // 8-byte Folded Reload510; CHECK-NEXT:     .seh_save_reg_x	x30, 16511; CHECK-NEXT:     .seh_endepilogue512; CHECK-NEXT:     br	x11513; CHECK-NEXT:     .seh_endfunclet514; CHECK-NEXT:     .seh_endproc515 516declare <8 x i16> @large_vector(<8 x i16> %0) nounwind;517; CHECK-LABEL:    .def	$iexit_thunk$cdecl$m16$m16;518; CHECK:          .section	.wowthk$aa,"xr",discard,$iexit_thunk$cdecl$m16$m16519; CHECK:          // %bb.0:520; CHECK-NEXT:     sub	sp, sp, #80521; CHECK-NEXT:     .seh_stackalloc	80522; CHECK-NEXT:     stp	x29, x30, [sp, #64]             // 16-byte Folded Spill523; CHECK-NEXT:     .seh_save_fplr	64524; CHECK-NEXT:     add	x29, sp, #64525; CHECK-NEXT:     .seh_add_fp	64526; CHECK-NEXT:     .seh_endprologue527; CHECK-NEXT:     adrp	x8, __os_arm64x_dispatch_call_no_redirect528; CHECK-NEXT:     sub	x0, x29, #16529; CHECK-NEXT:     add	x1, sp, #32530; CHECK-NEXT:     ldr	x16, [x8, :lo12:__os_arm64x_dispatch_call_no_redirect]531; CHECK-NEXT:     str	q0, [sp, #32]532; CHECK-NEXT:     blr	x16533; CHECK-NEXT:     ldur	q0, [x29, #-16]534; CHECK-NEXT:     .seh_startepilogue535; CHECK-NEXT:     ldp	x29, x30, [sp, #64]             // 16-byte Folded Reload536; CHECK-NEXT:     .seh_save_fplr	64537; CHECK-NEXT:     add	sp, sp, #80538; CHECK-NEXT:     .seh_stackalloc	80539; CHECK-NEXT:     .seh_endepilogue540; CHECK-NEXT:     ret541; CHECK-NEXT:     .seh_endfunclet542; CHECK-NEXT:     .seh_endproc543; CHECK-LABEL:    .def	"#large_vector$exit_thunk";544; CHECK:          .section	.wowthk$aa,"xr",discard,"#large_vector$exit_thunk"545; CHECK:          .weak_anti_dep	large_vector546; CHECK:          .weak_anti_dep	"#large_vector"547; CHECK:          // %bb.0:548; CHECK-NEXT:     str	x30, [sp, #-16]!                // 8-byte Folded Spill549; CHECK-NEXT:     .seh_save_reg_x	x30, 16550; CHECK-NEXT:     .seh_endprologue551; CHECK-NEXT:     adrp	x8, __os_arm64x_check_icall552; CHECK-NEXT:     adrp	x11, large_vector553; CHECK-NEXT:     add	x11, x11, :lo12:large_vector554; CHECK-NEXT:     ldr	x8, [x8, :lo12:__os_arm64x_check_icall]555; CHECK-NEXT:     adrp	x10, $iexit_thunk$cdecl$m16$m16556; CHECK-NEXT:     add	x10, x10, :lo12:$iexit_thunk$cdecl$m16$m16557; CHECK-NEXT:     blr	x8558; CHECK-NEXT:     .seh_startepilogue559; CHECK-NEXT:     ldr	x30, [sp], #16                  // 8-byte Folded Reload560; CHECK-NEXT:     .seh_save_reg_x	x30, 16561; CHECK-NEXT:     .seh_endepilogue562; CHECK-NEXT:     br	x11563; CHECK-NEXT:     .seh_endfunclet564; CHECK-NEXT:     .seh_endproc565 566declare void @"??@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@"()567; CHECK-LABEL:       .def    "??$exit_thunk@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@$$h@";568; CHECK-NEXT:        .scl    2;569; CHECK-NEXT:        .type   32;570; CHECK-NEXT:        .endef571; CHECK-NEXT:        .section        .wowthk$aa,"xr",discard,"??$exit_thunk@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@$$h@"572; CHECK-NEXT:        .globl  "??$exit_thunk@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@$$h@" // -- Begin function ??$exit_thunk@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@$$h@573; CHECK-NEXT:        .p2align        2574; CHECK-NEXT: "??$exit_thunk@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@$$h@": // @"??$exit_thunk@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@$$h@"575; CHECK-NEXT:         .weak_anti_dep  "??@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@"576; CHECK-NEXT: "??@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@" = "??@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@$$h@"577; CHECK-NEXT:         .weak_anti_dep  "??@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@$$h@"578; CHECK-NEXT: "??@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@$$h@" = "??$exit_thunk@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@$$h@"579; CHECK-NEXT: .seh_proc "??$exit_thunk@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@$$h@"580; CHECK-NEXT: // %bb.0:581; CHECK-NEXT:         str     x30, [sp, #-16]!                // 8-byte Folded Spill582; CHECK-NEXT:         .seh_save_reg_x x30, 16583; CHECK-NEXT:         .seh_endprologue584; CHECK-NEXT:         adrp    x8, __os_arm64x_check_icall585; CHECK-NEXT:         adrp    x11, "??@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@"586; CHECK-NEXT:         add     x11, x11, :lo12:"??@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@"587; CHECK-NEXT:         ldr     x8, [x8, :lo12:__os_arm64x_check_icall]588; CHECK-NEXT:         adrp    x10, $iexit_thunk$cdecl$v$v589; CHECK-NEXT:         add     x10, x10, :lo12:$iexit_thunk$cdecl$v$v590; CHECK-NEXT:         blr     x8591; CHECK-NEXT:         .seh_startepilogue592; CHECK-NEXT:         ldr     x30, [sp], #16                  // 8-byte Folded Reload593; CHECK-NEXT:         .seh_save_reg_x x30, 16594; CHECK-NEXT:         .seh_endepilogue595; CHECK-NEXT:         br      x11596; CHECK-NEXT:         .seh_endfunclet597; CHECK-NEXT:         .seh_endproc598 599 600 601; CHECK-LABEL:    .section        .hybmp$x,"yi"602; CHECK-NEXT:     .symidx "#func_caller"603; CHECK-NEXT:     .symidx $ientry_thunk$cdecl$v$v604; CHECK-NEXT:     .word   1605; CHECK-NEXT:     .symidx no_op606; CHECK-NEXT:     .symidx $iexit_thunk$cdecl$v$v607; CHECK-NEXT:     .word   4608; CHECK-NEXT:     .symidx "#no_op$exit_thunk"609; CHECK-NEXT:     .symidx no_op610; CHECK-NEXT:     .word   0611; CHECK-NEXT:     .symidx simple_integers612; CHECK-NEXT:     .symidx $iexit_thunk$cdecl$i8$i8i8i8i8613; CHECK-NEXT:     .word   4614; CHECK-NEXT:     .symidx "#simple_integers$exit_thunk"615; CHECK-NEXT:     .symidx simple_integers616; CHECK-NEXT:     .word   0617; CHECK-NEXT:     .symidx simple_floats618; CHECK-NEXT:     .symidx $iexit_thunk$cdecl$d$__llvm_h__fd619; CHECK-NEXT:     .word   4620; CHECK-NEXT:     .symidx "#simple_floats$exit_thunk"621; CHECK-NEXT:     .symidx simple_floats622; CHECK-NEXT:     .word   0623; CHECK-NEXT:     .symidx has_varargs624; CHECK-NEXT:     .symidx $iexit_thunk$cdecl$v$varargs625; CHECK-NEXT:     .word   4626; CHECK-NEXT:     .symidx "#has_varargs$exit_thunk"627; CHECK-NEXT:     .symidx has_varargs628; CHECK-NEXT:     .word 0629; CHECK-NEXT:     .symidx has_sret630; CHECK-NEXT:     .symidx $iexit_thunk$cdecl$m100$v631; CHECK-NEXT:     .word   4632; CHECK-NEXT:     .symidx "#has_sret$exit_thunk"633; CHECK-NEXT:     .symidx has_sret634; CHECK-NEXT:     .word   0635; CHECK-NEXT:     .symidx has_aligned_sret636; CHECK-NEXT:     .symidx $iexit_thunk$cdecl$m16$v637; CHECK-NEXT:     .word   4638; CHECK-NEXT:     .symidx "#has_aligned_sret$exit_thunk"639; CHECK-NEXT:     .symidx has_aligned_sret640; CHECK-NEXT:     .word   0641; CHECK-NEXT:     .symidx small_array642; CHECK-NEXT:     .symidx $iexit_thunk$cdecl$m2$m2__llvm_H__4F8643; CHECK-NEXT:     .word   4644; CHECK-NEXT:     .symidx "#small_array$exit_thunk"645; CHECK-NEXT:     .symidx small_array646; CHECK-NEXT:     .word   0647; CHECK-NEXT:     .symidx large_array648; CHECK-NEXT:     .symidx $iexit_thunk$cdecl$m24$m24D16m32649; CHECK-NEXT:     .word   4650; CHECK-NEXT:     .symidx "#large_array$exit_thunk"651; CHECK-NEXT:     .symidx large_array652; CHECK-NEXT:     .word   0653; CHECK-NEXT:     .symidx simple_struct654; CHECK-NEXT:     .symidx $iexit_thunk$cdecl$m8$i8m8m16m24655; CHECK-NEXT:     .word   4656; CHECK-NEXT:     .symidx "#simple_struct$exit_thunk"657; CHECK-NEXT:     .symidx simple_struct658; CHECK-NEXT:     .word   0659; CHECK-NEXT:     .symidx	small_vector660; CHECK-NEXT:     .symidx	$iexit_thunk$cdecl$m$m661; CHECK-NEXT:     .word	4662; CHECK-NEXT:     .symidx	"#small_vector$exit_thunk"663; CHECK-NEXT:     .symidx	small_vector664; CHECK-NEXT:     .word	0665; CHECK-NEXT:     .symidx	large_vector666; CHECK-NEXT:     .symidx	$iexit_thunk$cdecl$m16$m16667; CHECK-NEXT:     .word	4668; CHECK-NEXT:     .symidx	"#large_vector$exit_thunk"669; CHECK-NEXT:     .symidx	large_vector670; CHECK-NEXT:     .word	0671; CHECK-NEXT:     .symidx "??@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@"672; CHECK-NEXT:     .symidx $iexit_thunk$cdecl$v$v673; CHECK-NEXT:     .word   4674; CHECK-NEXT:     .symidx "??$exit_thunk@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@$$h@"675; CHECK-NEXT:     .symidx "??@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@"676; CHECK-NEXT:     .word   0677 678define void @func_caller() nounwind {679  call void @no_op()680  call i64 @simple_integers(i8 0, i16 0, i32 0, i64 0)681  call double @simple_floats(half 0.0, float 0.0, double 0.0)682  call void (...) @has_varargs()683  %c = alloca i8684  call void @has_sret(ptr sret([100 x i8]) %c)685  %aligned = alloca %TSRet, align 32686  store %TSRet { i64 0, i64 0 }, ptr %aligned, align 32687  call void @has_aligned_sret(ptr align 32 sret(%TSRet) %aligned)688  call [2 x i8] @small_array([2 x i8] [i8 0, i8 0], [2 x half] [half 0.0, half 0.0], [2 x float] [float 0.0, float 0.0])689  call [3 x i64] @large_array([3 x i64] [i64 0, i64 0, i64 0], [2 x double] [double 0.0, double 0.0], [2 x [2 x i64]] [[2 x i64] [i64 0, i64 0], [2 x i64] [i64 0, i64 0]])690  call %T2 @simple_struct(%T1 { i16 0 }, %T2 { i32 0, float 0.0 }, %T3 { i64 0, double 0.0 }, %T4 { i64 0, double 0.0, i8 0 })691  call <4 x i8> @small_vector(<4 x i8> <i8 0, i8 0, i8 0, i8 0>)692  call <8 x i16> @large_vector(<8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>)693  call void @"??@md5mangleaaaaaaaaaaaaaaaaaaaaaaa@"()694  ret void695}696