brintos

brintos / llvm-project-archived public Read only

0
0
Text · 31.2 KiB · 35ffc99 Raw
635 lines · plain
1; RUN: llc -mtriple=arm64ec-pc-windows-msvc < %s | FileCheck %s2 3define void @no_op() nounwind {4; CHECK-LABEL     .def    $ientry_thunk$cdecl$v$v;5; CHECK:          .section        .wowthk$aa,"xr",discard,$ientry_thunk$cdecl$v$v6; CHECK:          // %bb.0:7; CHECK-NEXT:     stp     q6, q7, [sp, #-176]!            // 32-byte Folded Spill8; CHECK-NEXT:     .seh_save_any_reg_px    q6, 1769; CHECK-NEXT:     stp     q8, q9, [sp, #32]               // 32-byte Folded Spill10; CHECK-NEXT:     .seh_save_any_reg_p     q8, 3211; CHECK-NEXT:     stp     q10, q11, [sp, #64]             // 32-byte Folded Spill12; CHECK-NEXT:     .seh_save_any_reg_p     q10, 6413; CHECK-NEXT:     stp     q12, q13, [sp, #96]             // 32-byte Folded Spill14; CHECK-NEXT:     .seh_save_any_reg_p     q12, 9615; CHECK-NEXT:     stp     q14, q15, [sp, #128]            // 32-byte Folded Spill16; CHECK-NEXT:     .seh_save_any_reg_p     q14, 12817; CHECK-NEXT:     stp     x29, x30, [sp, #160]            // 16-byte Folded Spill18; CHECK-NEXT:     .seh_save_fplr  16019; CHECK-NEXT:     add     x29, sp, #16020; CHECK-NEXT:     .seh_add_fp     16021; CHECK-NEXT:     .seh_endprologue22; CHECK-NEXT:     blr     x923; CHECK-NEXT:     adrp    x8, __os_arm64x_dispatch_ret24; CHECK-NEXT:     ldr     x0, [x8, :lo12:__os_arm64x_dispatch_ret]25; CHECK-NEXT:     .seh_startepilogue26; CHECK-NEXT:     ldp     x29, x30, [sp, #160]            // 16-byte Folded Reload27; CHECK-NEXT:     .seh_save_fplr  16028; CHECK-NEXT:     ldp     q14, q15, [sp, #128]            // 32-byte Folded Reload29; CHECK-NEXT:     .seh_save_any_reg_p     q14, 12830; CHECK-NEXT:     ldp     q12, q13, [sp, #96]             // 32-byte Folded Reload31; CHECK-NEXT:     .seh_save_any_reg_p     q12, 9632; CHECK-NEXT:     ldp     q10, q11, [sp, #64]             // 32-byte Folded Reload33; CHECK-NEXT:     .seh_save_any_reg_p     q10, 6434; CHECK-NEXT:     ldp     q8, q9, [sp, #32]               // 32-byte Folded Reload35; CHECK-NEXT:     .seh_save_any_reg_p     q8, 3236; CHECK-NEXT:     ldp     q6, q7, [sp], #176              // 32-byte Folded Reload37; CHECK-NEXT:     .seh_save_any_reg_px    q6, 17638; CHECK-NEXT:     .seh_endepilogue39; CHECK-NEXT:     br      x040; CHECK-NEXT:     .seh_endfunclet41; CHECK-NEXT:     .seh_endproc42  ret void43}44 45define i64 @simple_integers(i8, i16, i32, i64) nounwind {46; CHECK-LABEL:    .def    $ientry_thunk$cdecl$i8$i8i8i8i8;47; CHECK:          .section        .wowthk$aa,"xr",discard,$ientry_thunk$cdecl$i8$i8i8i8i848; CHECK:          // %bb.0:49; CHECK-NEXT:     stp     q6, q7, [sp, #-176]!            // 32-byte Folded Spill50; CHECK-NEXT:     .seh_save_any_reg_px    q6, 17651; CHECK-NEXT:     stp     q8, q9, [sp, #32]               // 32-byte Folded Spill52; CHECK-NEXT:     .seh_save_any_reg_p     q8, 3253; CHECK-NEXT:     stp     q10, q11, [sp, #64]             // 32-byte Folded Spill54; CHECK-NEXT:     .seh_save_any_reg_p     q10, 6455; CHECK-NEXT:     stp     q12, q13, [sp, #96]             // 32-byte Folded Spill56; CHECK-NEXT:     .seh_save_any_reg_p     q12, 9657; CHECK-NEXT:     stp     q14, q15, [sp, #128]            // 32-byte Folded Spill58; CHECK-NEXT:     .seh_save_any_reg_p     q14, 12859; CHECK-NEXT:     stp     x29, x30, [sp, #160]            // 16-byte Folded Spill60; CHECK-NEXT:     .seh_save_fplr  16061; CHECK-NEXT:     add     x29, sp, #16062; CHECK-NEXT:     .seh_add_fp     16063; CHECK-NEXT:     .seh_endprologue64; CHECK-NEXT:     blr     x965; CHECK-NEXT:     adrp    x8, __os_arm64x_dispatch_ret66; CHECK-NEXT:     ldr     x1, [x8, :lo12:__os_arm64x_dispatch_ret]67; CHECK-NEXT:     mov     x8, x068; CHECK-NEXT:     .seh_startepilogue69; CHECK-NEXT:     ldp     x29, x30, [sp, #160]            // 16-byte Folded Reload70; CHECK-NEXT:     .seh_save_fplr  16071; CHECK-NEXT:     ldp     q14, q15, [sp, #128]            // 32-byte Folded Reload72; CHECK-NEXT:     .seh_save_any_reg_p     q14, 12873; CHECK-NEXT:     ldp     q12, q13, [sp, #96]             // 32-byte Folded Reload74; CHECK-NEXT:     .seh_save_any_reg_p     q12, 9675; CHECK-NEXT:     ldp     q10, q11, [sp, #64]             // 32-byte Folded Reload76; CHECK-NEXT:     .seh_save_any_reg_p     q10, 6477; CHECK-NEXT:     ldp     q8, q9, [sp, #32]               // 32-byte Folded Reload78; CHECK-NEXT:     .seh_save_any_reg_p     q8, 3279; CHECK-NEXT:     ldp     q6, q7, [sp], #176              // 32-byte Folded Reload80; CHECK-NEXT:     .seh_save_any_reg_px    q6, 17681; CHECK-NEXT:     .seh_endepilogue82; CHECK-NEXT:     br      x183; CHECK-NEXT:     .seh_endfunclet84; CHECK-NEXT:     .seh_endproc85  ret i64 086}87 88; NOTE: Only half, float, and double are supported.89define double @simple_floats(half, float, double) nounwind {90; CHECK-LABEL:    .def    $ientry_thunk$cdecl$d$__llvm_h__fd;91; CHECK:          .section        .wowthk$aa,"xr",discard,$ientry_thunk$cdecl$d$__llvm_h__fd92; CHECK:          // %bb.0:93; CHECK-NEXT:     stp     q6, q7, [sp, #-176]!            // 32-byte Folded Spill94; CHECK-NEXT:     .seh_save_any_reg_px    q6, 17695; CHECK-NEXT:     stp     q8, q9, [sp, #32]               // 32-byte Folded Spill96; CHECK-NEXT:     .seh_save_any_reg_p     q8, 3297; CHECK-NEXT:     stp     q10, q11, [sp, #64]             // 32-byte Folded Spill98; CHECK-NEXT:     .seh_save_any_reg_p     q10, 6499; CHECK-NEXT:     stp     q12, q13, [sp, #96]             // 32-byte Folded Spill100; CHECK-NEXT:     .seh_save_any_reg_p     q12, 96101; CHECK-NEXT:     stp     q14, q15, [sp, #128]            // 32-byte Folded Spill102; CHECK-NEXT:     .seh_save_any_reg_p     q14, 128103; CHECK-NEXT:     stp     x29, x30, [sp, #160]            // 16-byte Folded Spill104; CHECK-NEXT:     .seh_save_fplr  160105; CHECK-NEXT:     add     x29, sp, #160106; CHECK-NEXT:     .seh_add_fp     160107; CHECK-NEXT:     .seh_endprologue108; CHECK-NEXT:     blr     x9109; CHECK-NEXT:     adrp    x8, __os_arm64x_dispatch_ret110; CHECK-NEXT:     ldr     x0, [x8, :lo12:__os_arm64x_dispatch_ret]111; CHECK-NEXT:     .seh_startepilogue112; CHECK-NEXT:     ldp     x29, x30, [sp, #160]            // 16-byte Folded Reload113; CHECK-NEXT:     .seh_save_fplr  160114; CHECK-NEXT:     ldp     q14, q15, [sp, #128]            // 32-byte Folded Reload115; CHECK-NEXT:     .seh_save_any_reg_p     q14, 128116; CHECK-NEXT:     ldp     q12, q13, [sp, #96]             // 32-byte Folded Reload117; CHECK-NEXT:     .seh_save_any_reg_p     q12, 96118; CHECK-NEXT:     ldp     q10, q11, [sp, #64]             // 32-byte Folded Reload119; CHECK-NEXT:     .seh_save_any_reg_p     q10, 64120; CHECK-NEXT:     ldp     q8, q9, [sp, #32]               // 32-byte Folded Reload121; CHECK-NEXT:     .seh_save_any_reg_p     q8, 32122; CHECK-NEXT:     ldp     q6, q7, [sp], #176              // 32-byte Folded Reload123; CHECK-NEXT:     .seh_save_any_reg_px    q6, 176124; CHECK-NEXT:     .seh_endepilogue125; CHECK-NEXT:     br      x0126; CHECK-NEXT:     .seh_endfunclet127; CHECK-NEXT:     .seh_endproc128  ret double 0.0129}130 131define void @has_varargs(...) nounwind {132; CHECK-LABEL:    .def    $ientry_thunk$cdecl$v$varargs;133; CHECK:          .section        .wowthk$aa,"xr",discard,$ientry_thunk$cdecl$v$varargs134; CHECK:          // %bb.0:135; CHECK-NEXT:     stp     q6, q7, [sp, #-176]!            // 32-byte Folded Spill136; CHECK-NEXT:     .seh_save_any_reg_px    q6, 176137; CHECK-NEXT:     stp     q8, q9, [sp, #32]               // 32-byte Folded Spill138; CHECK-NEXT:     .seh_save_any_reg_p     q8, 32139; CHECK-NEXT:     stp     q10, q11, [sp, #64]             // 32-byte Folded Spill140; CHECK-NEXT:     .seh_save_any_reg_p     q10, 64141; CHECK-NEXT:     stp     q12, q13, [sp, #96]             // 32-byte Folded Spill142; CHECK-NEXT:     .seh_save_any_reg_p     q12, 96143; CHECK-NEXT:     stp     q14, q15, [sp, #128]            // 32-byte Folded Spill144; CHECK-NEXT:     .seh_save_any_reg_p     q14, 128145; CHECK-NEXT:     stp     x29, x30, [sp, #160]            // 16-byte Folded Spill146; CHECK-NEXT:     .seh_save_fplr  160147; CHECK-NEXT:     add     x29, sp, #160148; CHECK-NEXT:     .seh_add_fp     160149; CHECK-NEXT:     .seh_endprologue150; CHECK-NEXT:     add     x4, x4, #32151; CHECK-NEXT:     mov     x5, xzr152; CHECK-NEXT:     blr     x9153; CHECK-NEXT:     adrp    x8, __os_arm64x_dispatch_ret154; CHECK-NEXT:     ldr     x0, [x8, :lo12:__os_arm64x_dispatch_ret]155; CHECK-NEXT:     .seh_startepilogue156; CHECK-NEXT:     ldp     x29, x30, [sp, #160]            // 16-byte Folded Reload157; CHECK-NEXT:     .seh_save_fplr  160158; CHECK-NEXT:     ldp     q14, q15, [sp, #128]            // 32-byte Folded Reload159; CHECK-NEXT:     .seh_save_any_reg_p     q14, 128160; CHECK-NEXT:     ldp     q12, q13, [sp, #96]             // 32-byte Folded Reload161; CHECK-NEXT:     .seh_save_any_reg_p     q12, 96162; CHECK-NEXT:     ldp     q10, q11, [sp, #64]             // 32-byte Folded Reload163; CHECK-NEXT:     .seh_save_any_reg_p     q10, 64164; CHECK-NEXT:     ldp     q8, q9, [sp, #32]               // 32-byte Folded Reload165; CHECK-NEXT:     .seh_save_any_reg_p     q8, 32166; CHECK-NEXT:     ldp     q6, q7, [sp], #176              // 32-byte Folded Reload167; CHECK-NEXT:     .seh_save_any_reg_px    q6, 176168; CHECK-NEXT:     .seh_endepilogue169; CHECK-NEXT:     br      x0170; CHECK-NEXT:     .seh_endfunclet171; CHECK-NEXT:     .seh_endproc172  ret void173}174 175define void @has_sret(ptr sret([100 x i8])) nounwind {176; CHECK-LABEL:    .def    $ientry_thunk$cdecl$i8$v;177; CHECK:          .section        .wowthk$aa,"xr",discard,$ientry_thunk$cdecl$i8$v178; CHECK:          // %bb.0:179; CHECK-NEXT:     stp     q6, q7, [sp, #-176]!            // 32-byte Folded Spill180; CHECK-NEXT:     .seh_save_any_reg_px    q6, 176181; CHECK-NEXT:     stp     q8, q9, [sp, #32]               // 32-byte Folded Spill182; CHECK-NEXT:     .seh_save_any_reg_p     q8, 32183; CHECK-NEXT:     stp     q10, q11, [sp, #64]             // 32-byte Folded Spill184; CHECK-NEXT:     .seh_save_any_reg_p     q10, 64185; CHECK-NEXT:     stp     q12, q13, [sp, #96]             // 32-byte Folded Spill186; CHECK-NEXT:     .seh_save_any_reg_p     q12, 96187; CHECK-NEXT:     stp     q14, q15, [sp, #128]            // 32-byte Folded Spill188; CHECK-NEXT:     .seh_save_any_reg_p     q14, 128189; CHECK-NEXT:     stp     x29, x30, [sp, #160]            // 16-byte Folded Spill190; CHECK-NEXT:     .seh_save_fplr  160191; CHECK-NEXT:     add     x29, sp, #160192; CHECK-NEXT:     .seh_add_fp     160193; CHECK-NEXT:     .seh_endprologue194; CHECK-NEXT:     blr     x9195; CHECK-NEXT:     adrp    x8, __os_arm64x_dispatch_ret196; CHECK-NEXT:     ldr     x1, [x8, :lo12:__os_arm64x_dispatch_ret]197; CHECK-NEXT:     mov     x8, x0198; CHECK-NEXT:     .seh_startepilogue199; CHECK-NEXT:     ldp     x29, x30, [sp, #160]            // 16-byte Folded Reload200; CHECK-NEXT:     .seh_save_fplr  160201; CHECK-NEXT:     ldp     q14, q15, [sp, #128]            // 32-byte Folded Reload202; CHECK-NEXT:     .seh_save_any_reg_p     q14, 128203; CHECK-NEXT:     ldp     q12, q13, [sp, #96]             // 32-byte Folded Reload204; CHECK-NEXT:     .seh_save_any_reg_p     q12, 96205; CHECK-NEXT:     ldp     q10, q11, [sp, #64]             // 32-byte Folded Reload206; CHECK-NEXT:     .seh_save_any_reg_p     q10, 64207; CHECK-NEXT:     ldp     q8, q9, [sp, #32]               // 32-byte Folded Reload208; CHECK-NEXT:     .seh_save_any_reg_p     q8, 32209; CHECK-NEXT:     ldp     q6, q7, [sp], #176              // 32-byte Folded Reload210; CHECK-NEXT:     .seh_save_any_reg_px    q6, 176211; CHECK-NEXT:     .seh_endepilogue212; CHECK-NEXT:     br      x1213; CHECK-NEXT:     .seh_endfunclet214; CHECK-NEXT:     .seh_endproc215  ret void216}217 218define i8 @matches_has_sret() nounwind {219; Verify that $ientry_thunk$cdecl$i8$v is re-used by a function with matching signature.220; CHECK-NOT: .def    $ientry_thunk$cdecl$i8$v;221  ret i8 0222}223 224%TSRet = type { i64, i64 }225define void @has_aligned_sret(ptr align 32 sret(%TSRet), i32) nounwind {226; CHECK-LABEL:    .def    $ientry_thunk$cdecl$m16$i8;227; CHECK:          .section        .wowthk$aa,"xr",discard,$ientry_thunk$cdecl$m16$i8228; CHECK:          // %bb.0:229; CHECK-NEXT:     stp     q6, q7, [sp, #-192]!            // 32-byte Folded Spill230; CHECK-NEXT:     .seh_save_any_reg_px    q6, 192231; CHECK-NEXT:     stp     q8, q9, [sp, #32]               // 32-byte Folded Spill232; CHECK-NEXT:     .seh_save_any_reg_p     q8, 32233; CHECK-NEXT:     stp     q10, q11, [sp, #64]             // 32-byte Folded Spill234; CHECK-NEXT:     .seh_save_any_reg_p     q10, 64235; CHECK-NEXT:     stp     q12, q13, [sp, #96]             // 32-byte Folded Spill236; CHECK-NEXT:     .seh_save_any_reg_p     q12, 96237; CHECK-NEXT:     stp     q14, q15, [sp, #128]            // 32-byte Folded Spill238; CHECK-NEXT:     .seh_save_any_reg_p     q14, 128239; CHECK-NEXT:     str     x19, [sp, #160]                 // 8-byte Spill240; CHECK-NEXT:     .seh_save_reg   x19, 160241; CHECK-NEXT:     stp     x29, x30, [sp, #168]            // 16-byte Folded Spill242; CHECK-NEXT:     .seh_save_fplr  168243; CHECK-NEXT:     add     x29, sp, #168244; CHECK-NEXT:     .seh_add_fp     168245; CHECK-NEXT:     .seh_endprologue246; CHECK-NEXT:     mov     x19, x0247; CHECK-NEXT:     mov     x8, x0248; CHECK-NEXT:     mov     x0, x1249; CHECK-NEXT:     blr     x9250; CHECK-NEXT:     adrp    x8, __os_arm64x_dispatch_ret251; CHECK-NEXT:     ldr     x0, [x8, :lo12:__os_arm64x_dispatch_ret]252; CHECK-NEXT:     mov     x8, x19253; CHECK-NEXT:     .seh_startepilogue254; CHECK-NEXT:     ldp     x29, x30, [sp, #168]            // 16-byte Folded Reload255; CHECK-NEXT:     .seh_save_fplr  168256; CHECK-NEXT:     ldr     x19, [sp, #160]                 // 8-byte Reload257; CHECK-NEXT:     .seh_save_reg   x19, 160258; CHECK-NEXT:     ldp     q14, q15, [sp, #128]            // 32-byte Folded Reload259; CHECK-NEXT:     .seh_save_any_reg_p     q14, 128260; CHECK-NEXT:     ldp     q12, q13, [sp, #96]             // 32-byte Folded Reload261; CHECK-NEXT:     .seh_save_any_reg_p     q12, 96262; CHECK-NEXT:     ldp     q10, q11, [sp, #64]             // 32-byte Folded Reload263; CHECK-NEXT:     .seh_save_any_reg_p     q10, 64264; CHECK-NEXT:     ldp     q8, q9, [sp, #32]               // 32-byte Folded Reload265; CHECK-NEXT:     .seh_save_any_reg_p     q8, 32266; CHECK-NEXT:     ldp     q6, q7, [sp], #192              // 32-byte Folded Reload267; CHECK-NEXT:     .seh_save_any_reg_px    q6, 192268; CHECK-NEXT:     .seh_endepilogue269; CHECK-NEXT:     br      x0270; CHECK-NEXT:     .seh_endfunclet271; CHECK-NEXT:     .seh_endproc272  ret void273}274 275define [2 x i8] @small_array([2 x i8] %0, [2 x float]) nounwind {276; CHECK-LABEL:    .def    $ientry_thunk$cdecl$m2$m2F8;277; CHECK:          .section        .wowthk$aa,"xr",discard,$ientry_thunk$cdecl$m2$m2F8278; CHECK:          // %bb.0:279; CHECK-NEXT:     sub     sp, sp, #192280; CHECK-NEXT:     .seh_stackalloc 192281; CHECK-NEXT:     stp     q6, q7, [sp, #16]               // 32-byte Folded Spill282; CHECK-NEXT:     .seh_save_any_reg_p     q6, 16283; CHECK-NEXT:     stp     q8, q9, [sp, #48]               // 32-byte Folded Spill284; CHECK-NEXT:     .seh_save_any_reg_p     q8, 48285; CHECK-NEXT:     stp     q10, q11, [sp, #80]             // 32-byte Folded Spill286; CHECK-NEXT:     .seh_save_any_reg_p     q10, 80287; CHECK-NEXT:     stp     q12, q13, [sp, #112]            // 32-byte Folded Spill288; CHECK-NEXT:     .seh_save_any_reg_p     q12, 112289; CHECK-NEXT:     stp     q14, q15, [sp, #144]            // 32-byte Folded Spill290; CHECK-NEXT:     .seh_save_any_reg_p     q14, 144291; CHECK-NEXT:     stp     x29, x30, [sp, #176]            // 16-byte Folded Spill292; CHECK-NEXT:     .seh_save_fplr  176293; CHECK-NEXT:     add     x29, sp, #176294; CHECK-NEXT:     .seh_add_fp     176295; CHECK-NEXT:     .seh_endprologue296; CHECK-NEXT:     stur    x1, [sp, #4]297; CHECK-NEXT:     ubfx    w1, w0, #8, #8298; CHECK-NEXT:     ldp     s0, s1, [sp, #4]299; CHECK-NEXT:     strh    w0, [sp, #14]300; CHECK-NEXT:     blr     x9301; CHECK-NEXT:     adrp    x9, __os_arm64x_dispatch_ret302; CHECK-NEXT:     strb    w0, [sp, #2]303; CHECK-NEXT:     strb    w1, [sp, #3]304; CHECK-NEXT:     ldrh    w8, [sp, #2]305; CHECK-NEXT:     ldr     x0, [x9, :lo12:__os_arm64x_dispatch_ret]306; CHECK-NEXT:     .seh_startepilogue307; CHECK-NEXT:     ldp     x29, x30, [sp, #176]            // 16-byte Folded Reload308; CHECK-NEXT:     .seh_save_fplr  176309; CHECK-NEXT:     ldp     q14, q15, [sp, #144]            // 32-byte Folded Reload310; CHECK-NEXT:     .seh_save_any_reg_p     q14, 144311; CHECK-NEXT:     ldp     q12, q13, [sp, #112]            // 32-byte Folded Reload312; CHECK-NEXT:     .seh_save_any_reg_p     q12, 112313; CHECK-NEXT:     ldp     q10, q11, [sp, #80]             // 32-byte Folded Reload314; CHECK-NEXT:     .seh_save_any_reg_p     q10, 80315; CHECK-NEXT:     ldp     q8, q9, [sp, #48]               // 32-byte Folded Reload316; CHECK-NEXT:     .seh_save_any_reg_p     q8, 48317; CHECK-NEXT:     ldp     q6, q7, [sp, #16]               // 32-byte Folded Reload318; CHECK-NEXT:     .seh_save_any_reg_p     q6, 16319; CHECK-NEXT:     add     sp, sp, #192320; CHECK-NEXT:     .seh_stackalloc 192321; CHECK-NEXT:     .seh_endepilogue322; CHECK-NEXT:     br      x0323; CHECK-NEXT:     .seh_endfunclet324; CHECK-NEXT:     .seh_endproc325  ret [2 x i8] %0326}327 328define [3 x i64] @large_array([3 x i64] %0, [2 x double], [2 x [2 x i64]]) nounwind {329; CHECK-LABEL:    .def    $ientry_thunk$cdecl$m24$m24D16m32;330; CHECK:          .section        .wowthk$aa,"xr",discard,$ientry_thunk$cdecl$m24$m24D16m32331; CHECK:          // %bb.0:332; CHECK-NEXT:     stp     q6, q7, [sp, #-192]!            // 32-byte Folded Spill333; CHECK-NEXT:     .seh_save_any_reg_px    q6, 192334; CHECK-NEXT:     stp     q8, q9, [sp, #32]               // 32-byte Folded Spill335; CHECK-NEXT:     .seh_save_any_reg_p     q8, 32336; CHECK-NEXT:     stp     q10, q11, [sp, #64]             // 32-byte Folded Spill337; CHECK-NEXT:     .seh_save_any_reg_p     q10, 64338; CHECK-NEXT:     stp     q12, q13, [sp, #96]             // 32-byte Folded Spill339; CHECK-NEXT:     .seh_save_any_reg_p     q12, 96340; CHECK-NEXT:     stp     q14, q15, [sp, #128]            // 32-byte Folded Spill341; CHECK-NEXT:     .seh_save_any_reg_p     q14, 128342; CHECK-NEXT:     str     x19, [sp, #160]                 // 8-byte Spill343; CHECK-NEXT:     .seh_save_reg   x19, 160344; CHECK-NEXT:     stp     x29, x30, [sp, #168]            // 16-byte Folded Spill345; CHECK-NEXT:     .seh_save_fplr  168346; CHECK-NEXT:     add     x29, sp, #168347; CHECK-NEXT:     .seh_add_fp     168348; CHECK-NEXT:     .seh_endprologue349; CHECK-NEXT:     ldp     x10, x8, [x1, #8]350; CHECK-NEXT:     mov     x19, x0351; CHECK-NEXT:     ldp     d0, d1, [x2]352; CHECK-NEXT:     ldr     x0, [x1]353; CHECK-NEXT:     ldp     x5, x6, [x3, #16]354; CHECK-NEXT:     ldp     x3, x4, [x3]355; CHECK-NEXT:     mov     x1, x10356; CHECK-NEXT:     mov     x2, x8357; CHECK-NEXT:     blr     x9358; CHECK-NEXT:     stp     x0, x1, [x19]359; CHECK-NEXT:     adrp    x8, __os_arm64x_dispatch_ret360; CHECK-NEXT:     str     x2, [x19, #16]361; CHECK-NEXT:     ldr     x0, [x8, :lo12:__os_arm64x_dispatch_ret]362; CHECK-NEXT:     .seh_startepilogue363; CHECK-NEXT:     ldp     x29, x30, [sp, #168]            // 16-byte Folded Reload364; CHECK-NEXT:     .seh_save_fplr  168365; CHECK-NEXT:     ldr     x19, [sp, #160]                 // 8-byte Reload366; CHECK-NEXT:     .seh_save_reg   x19, 160367; CHECK-NEXT:     ldp     q14, q15, [sp, #128]            // 32-byte Folded Reload368; CHECK-NEXT:     .seh_save_any_reg_p     q14, 128369; CHECK-NEXT:     ldp     q12, q13, [sp, #96]             // 32-byte Folded Reload370; CHECK-NEXT:     .seh_save_any_reg_p     q12, 96371; CHECK-NEXT:     ldp     q10, q11, [sp, #64]             // 32-byte Folded Reload372; CHECK-NEXT:     .seh_save_any_reg_p     q10, 64373; CHECK-NEXT:     ldp     q8, q9, [sp, #32]               // 32-byte Folded Reload374; CHECK-NEXT:     .seh_save_any_reg_p     q8, 32375; CHECK-NEXT:     ldp     q6, q7, [sp], #192              // 32-byte Folded Reload376; CHECK-NEXT:     .seh_save_any_reg_px    q6, 192377; CHECK-NEXT:     .seh_endepilogue378; CHECK-NEXT:     br      x0379; CHECK-NEXT:     .seh_endfunclet380; CHECK-NEXT:     .seh_endproc381  ret [3 x i64] %0382}383 384%T1 = type { i16 }385%T2 = type { i32, float }386%T3 = type { i64, double }387%T4 = type { i64, double, i8 }388define %T2 @simple_struct(%T1 %0, %T2 %1, %T3, %T4) nounwind {389; CHECK-LABEL:    .def    $ientry_thunk$cdecl$m8$i8m8m16m24;390; CHECK:          .section        .wowthk$aa,"xr",discard,$ientry_thunk$cdecl$m8$i8m8m16m24391; CHECK:          // %bb.0:392; CHECK-NEXT:     sub     sp, sp, #192393; CHECK-NEXT:     .seh_stackalloc 192394; CHECK-NEXT:     stp     q6, q7, [sp, #16]               // 32-byte Folded Spill395; CHECK-NEXT:     .seh_save_any_reg_p     q6, 16396; CHECK-NEXT:     stp     q8, q9, [sp, #48]               // 32-byte Folded Spill397; CHECK-NEXT:     .seh_save_any_reg_p     q8, 48398; CHECK-NEXT:     stp     q10, q11, [sp, #80]             // 32-byte Folded Spill399; CHECK-NEXT:     .seh_save_any_reg_p     q10, 80400; CHECK-NEXT:     stp     q12, q13, [sp, #112]            // 32-byte Folded Spill401; CHECK-NEXT:     .seh_save_any_reg_p     q12, 112402; CHECK-NEXT:     stp     q14, q15, [sp, #144]            // 32-byte Folded Spill403; CHECK-NEXT:     .seh_save_any_reg_p     q14, 144404; CHECK-NEXT:     stp     x29, x30, [sp, #176]            // 16-byte Folded Spill405; CHECK-NEXT:     .seh_save_fplr  176406; CHECK-NEXT:     add     x29, sp, #176407; CHECK-NEXT:     .seh_add_fp     176408; CHECK-NEXT:     .seh_endprologue409; CHECK-NEXT:     str     x1, [sp, #8]410; CHECK-NEXT:     ldr     x8, [x2]411; CHECK-NEXT:     ldr     x10, [x3]412; CHECK-NEXT:     ldr     d1, [x2, #8]413; CHECK-NEXT:                                     // kill: def $w1 killed $w1 killed $x1414; CHECK-NEXT:     ldr     s0, [sp, #12]415; CHECK-NEXT:     ldr     d2, [x3, #8]416; CHECK-NEXT:     mov     x2, x8417; CHECK-NEXT:     ldrb    w4, [x3, #16]418; CHECK-NEXT:     mov     x3, x10419; CHECK-NEXT:     blr     x9420; CHECK-NEXT:     adrp    x9, __os_arm64x_dispatch_ret421; CHECK-NEXT:     str     w0, [sp]422; CHECK-NEXT:     str     s0, [sp, #4]423; CHECK-NEXT:     ldr     x8, [sp]424; CHECK-NEXT:     ldr     x0, [x9, :lo12:__os_arm64x_dispatch_ret]425; CHECK-NEXT:     .seh_startepilogue426; CHECK-NEXT:     ldp     x29, x30, [sp, #176]            // 16-byte Folded Reload427; CHECK-NEXT:     .seh_save_fplr  176428; CHECK-NEXT:     ldp     q14, q15, [sp, #144]            // 32-byte Folded Reload429; CHECK-NEXT:     .seh_save_any_reg_p     q14, 144430; CHECK-NEXT:     ldp     q12, q13, [sp, #112]            // 32-byte Folded Reload431; CHECK-NEXT:     .seh_save_any_reg_p     q12, 112432; CHECK-NEXT:     ldp     q10, q11, [sp, #80]             // 32-byte Folded Reload433; CHECK-NEXT:     .seh_save_any_reg_p     q10, 80434; CHECK-NEXT:     ldp     q8, q9, [sp, #48]               // 32-byte Folded Reload435; CHECK-NEXT:     .seh_save_any_reg_p     q8, 48436; CHECK-NEXT:     ldp     q6, q7, [sp, #16]               // 32-byte Folded Reload437; CHECK-NEXT:     .seh_save_any_reg_p     q6, 16438; CHECK-NEXT:     add     sp, sp, #192439; CHECK-NEXT:     .seh_stackalloc 192440; CHECK-NEXT:     .seh_endepilogue441; CHECK-NEXT:     br      x0442; CHECK-NEXT:     .seh_endfunclet443; CHECK-NEXT:     .seh_endproc444  ret %T2 %1445}446 447define void @cxx_method(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr dead_on_unwind inreg noalias writable sret(i64) align 8 %1) {448; CHECK-LABEL:    .def    $ientry_thunk$cdecl$i8$i8i8;449; CHECK: .section        .wowthk$aa,"xr",discard,$ientry_thunk$cdecl$i8$i8i8450; CHECK:          // %bb.0:451; CHECK-NEXT:     stp     q6, q7, [sp, #-176]!            // 32-byte Folded Spill452; CHECK-NEXT:     .seh_save_any_reg_px    q6, 176453; CHECK-NEXT:     stp     q8, q9, [sp, #32]               // 32-byte Folded Spill454; CHECK-NEXT:     .seh_save_any_reg_p     q8, 32455; CHECK-NEXT:     stp     q10, q11, [sp, #64]             // 32-byte Folded Spill456; CHECK-NEXT:     .seh_save_any_reg_p     q10, 64457; CHECK-NEXT:     stp     q12, q13, [sp, #96]             // 32-byte Folded Spill458; CHECK-NEXT:     .seh_save_any_reg_p     q12, 96459; CHECK-NEXT:     stp     q14, q15, [sp, #128]            // 32-byte Folded Spill460; CHECK-NEXT:     .seh_save_any_reg_p     q14, 128461; CHECK-NEXT:     stp     x29, x30, [sp, #160]            // 16-byte Folded Spill462; CHECK-NEXT:     .seh_save_fplr  160463; CHECK-NEXT:     add     x29, sp, #160464; CHECK-NEXT:     .seh_add_fp     160465; CHECK-NEXT:     .seh_endprologue466; CHECK-NEXT:     blr     x9467; CHECK-NEXT:     adrp    x8, __os_arm64x_dispatch_ret468; CHECK-NEXT:     ldr     x1, [x8, :lo12:__os_arm64x_dispatch_ret]469; CHECK-NEXT:     mov     x8, x0470; CHECK-NEXT:     .seh_startepilogue471; CHECK-NEXT:     ldp     x29, x30, [sp, #160]            // 16-byte Folded Reload472; CHECK-NEXT:     .seh_save_fplr  160473; CHECK-NEXT:     ldp     q14, q15, [sp, #128]            // 32-byte Folded Reload474; CHECK-NEXT:     .seh_save_any_reg_p     q14, 128475; CHECK-NEXT:     ldp     q12, q13, [sp, #96]             // 32-byte Folded Reload476; CHECK-NEXT:     .seh_save_any_reg_p     q12, 96477; CHECK-NEXT:     ldp     q10, q11, [sp, #64]             // 32-byte Folded Reload478; CHECK-NEXT:     .seh_save_any_reg_p     q10, 64479; CHECK-NEXT:     ldp     q8, q9, [sp, #32]               // 32-byte Folded Reload480; CHECK-NEXT:     .seh_save_any_reg_p     q8, 32481; CHECK-NEXT:     ldp     q6, q7, [sp], #176              // 32-byte Folded Reload482; CHECK-NEXT:     .seh_save_any_reg_px    q6, 176483; CHECK-NEXT:     .seh_endepilogue484; CHECK-NEXT:     br      x1485; CHECK-NEXT:     .seh_endfunclet486; CHECK-NEXT:     .seh_endproc487  ret void488}489 490define <4 x i8> @small_vector(<4 x i8> %0) {491; CHECK-LABEL:    .def	$ientry_thunk$cdecl$m$m;492; CHECK:          .section	.wowthk$aa,"xr",discard,$ientry_thunk$cdecl$m$m493; CHECK:          // %bb.0:494; CHECK-NEXT:     sub	sp, sp, #192495; CHECK-NEXT:     .seh_stackalloc	192496; CHECK-NEXT:     stp	q6, q7, [sp, #16]               // 32-byte Folded Spill497; CHECK-NEXT:     .seh_save_any_reg_p	q6, 16498; CHECK-NEXT:     stp	q8, q9, [sp, #48]               // 32-byte Folded Spill499; CHECK-NEXT:     .seh_save_any_reg_p	q8, 48500; CHECK-NEXT:     stp	q10, q11, [sp, #80]             // 32-byte Folded Spill501; CHECK-NEXT:     .seh_save_any_reg_p	q10, 80502; CHECK-NEXT:     stp	q12, q13, [sp, #112]            // 32-byte Folded Spill503; CHECK-NEXT:     .seh_save_any_reg_p	q12, 112504; CHECK-NEXT:     stp	q14, q15, [sp, #144]            // 32-byte Folded Spill505; CHECK-NEXT:     .seh_save_any_reg_p	q14, 144506; CHECK-NEXT:     stp	x29, x30, [sp, #176]            // 16-byte Folded Spill507; CHECK-NEXT:     .seh_save_fplr	176508; CHECK-NEXT:     add	x29, sp, #176509; CHECK-NEXT:     .seh_add_fp	176510; CHECK-NEXT:     .seh_endprologue511; CHECK-NEXT:     str	w0, [sp, #12]512; CHECK-NEXT:     ldr	s0, [sp, #12]513; CHECK-NEXT:     ushll	v0.8h, v0.8b, #0514; CHECK-NEXT:                                           // kill: def $d0 killed $d0 killed $q0515; CHECK-NEXT:     blr	x9516; CHECK-NEXT:     uzp1	v0.8b, v0.8b, v0.8b517; CHECK-NEXT:     adrp	x9, __os_arm64x_dispatch_ret518; CHECK-NEXT:     str	s0, [sp, #8]519; CHECK-NEXT:     fmov	w8, s0520; CHECK-NEXT:     ldr	x0, [x9, :lo12:__os_arm64x_dispatch_ret]521; CHECK-NEXT:     .seh_startepilogue522; CHECK-NEXT:     ldp	x29, x30, [sp, #176]            // 16-byte Folded Reload523; CHECK-NEXT:     .seh_save_fplr	176524; CHECK-NEXT:     ldp	q14, q15, [sp, #144]            // 32-byte Folded Reload525; CHECK-NEXT:     .seh_save_any_reg_p	q14, 144526; CHECK-NEXT:     ldp	q12, q13, [sp, #112]            // 32-byte Folded Reload527; CHECK-NEXT:     .seh_save_any_reg_p	q12, 112528; CHECK-NEXT:     ldp	q10, q11, [sp, #80]             // 32-byte Folded Reload529; CHECK-NEXT:     .seh_save_any_reg_p	q10, 80530; CHECK-NEXT:     ldp	q8, q9, [sp, #48]               // 32-byte Folded Reload531; CHECK-NEXT:     .seh_save_any_reg_p	q8, 48532; CHECK-NEXT:     ldp	q6, q7, [sp, #16]               // 32-byte Folded Reload533; CHECK-NEXT:     .seh_save_any_reg_p	q6, 16534; CHECK-NEXT:     add	sp, sp, #192535; CHECK-NEXT:     .seh_stackalloc	192536; CHECK-NEXT:     .seh_endepilogue537; CHECK-NEXT:     br	x0538; CHECK-NEXT:     .seh_endfunclet539; CHECK-NEXT:     .seh_endproc540start:541  ret <4 x i8> %0542}543 544define <8 x i16> @large_vector(<8 x i16> %0) {545; CHECK-LABEL:    .def	$ientry_thunk$cdecl$m16$m16;546; CHECK:          .section	.wowthk$aa,"xr",discard,$ientry_thunk$cdecl$m16$m16547; CHECK:          // %bb.0:548; CHECK-NEXT:     stp	q6, q7, [sp, #-192]!            // 32-byte Folded Spill549; CHECK-NEXT:     .seh_save_any_reg_px	q6, 192550; CHECK-NEXT:     stp	q8, q9, [sp, #32]               // 32-byte Folded Spill551; CHECK-NEXT:     .seh_save_any_reg_p	q8, 32552; CHECK-NEXT:     stp	q10, q11, [sp, #64]             // 32-byte Folded Spill553; CHECK-NEXT:     .seh_save_any_reg_p	q10, 64554; CHECK-NEXT:     stp	q12, q13, [sp, #96]             // 32-byte Folded Spill555; CHECK-NEXT:     .seh_save_any_reg_p	q12, 96556; CHECK-NEXT:     stp	q14, q15, [sp, #128]            // 32-byte Folded Spill557; CHECK-NEXT:     .seh_save_any_reg_p	q14, 128558; CHECK-NEXT:     str	x19, [sp, #160]                 // 8-byte Spill559; CHECK-NEXT:     .seh_save_reg	x19, 160560; CHECK-NEXT:     stp	x29, x30, [sp, #168]            // 16-byte Folded Spill561; CHECK-NEXT:     .seh_save_fplr	168562; CHECK-NEXT:     add	x29, sp, #168563; CHECK-NEXT:     .seh_add_fp	168564; CHECK-NEXT:     .seh_endprologue565; CHECK-NEXT:     ldr	q0, [x1]566; CHECK-NEXT:     mov	x19, x0567; CHECK-NEXT:     blr	x9568; CHECK-NEXT:     adrp	x8, __os_arm64x_dispatch_ret569; CHECK-NEXT:     str	q0, [x19]570; CHECK-NEXT:     ldr	x0, [x8, :lo12:__os_arm64x_dispatch_ret]571; CHECK-NEXT:     .seh_startepilogue572; CHECK-NEXT:     ldp	x29, x30, [sp, #168]            // 16-byte Folded Reload573; CHECK-NEXT:     .seh_save_fplr	168574; CHECK-NEXT:     ldr	x19, [sp, #160]                 // 8-byte Reload575; CHECK-NEXT:     .seh_save_reg	x19, 160576; CHECK-NEXT:     ldp	q14, q15, [sp, #128]            // 32-byte Folded Reload577; CHECK-NEXT:     .seh_save_any_reg_p	q14, 128578; CHECK-NEXT:     ldp	q12, q13, [sp, #96]             // 32-byte Folded Reload579; CHECK-NEXT:     .seh_save_any_reg_p	q12, 96580; CHECK-NEXT:     ldp	q10, q11, [sp, #64]             // 32-byte Folded Reload581; CHECK-NEXT:     .seh_save_any_reg_p	q10, 64582; CHECK-NEXT:     ldp	q8, q9, [sp, #32]               // 32-byte Folded Reload583; CHECK-NEXT:     .seh_save_any_reg_p	q8, 32584; CHECK-NEXT:     ldp	q6, q7, [sp], #192              // 32-byte Folded Reload585; CHECK-NEXT:     .seh_save_any_reg_px	q6, 192586; CHECK-NEXT:     .seh_endepilogue587; CHECK-NEXT:     br	x0588; CHECK-NEXT:     .seh_endfunclet589; CHECK-NEXT:     .seh_endproc590start:591  ret <8 x i16> %0592}593 594; Verify the hybrid bitmap595; CHECK-LABEL:    .section        .hybmp$x,"yi"596; CHECK-NEXT:     .symidx "#no_op"597; CHECK-NEXT:     .symidx $ientry_thunk$cdecl$v$v598; CHECK-NEXT:     .word   1599; CHECK-NEXT:     .symidx "#simple_integers"600; CHECK-NEXT:     .symidx $ientry_thunk$cdecl$i8$i8i8i8i8601; CHECK-NEXT:     .word   1602; CHECK-NEXT:     .symidx "#simple_floats"603; CHECK-NEXT:     .symidx $ientry_thunk$cdecl$d$__llvm_h__fd604; CHECK-NEXT:     .word   1605; CHECK-NEXT:     .symidx "#has_varargs"606; CHECK-NEXT:     .symidx $ientry_thunk$cdecl$v$varargs607; CHECK-NEXT:     .word   1608; CHECK-NEXT:     .symidx "#has_sret"609; CHECK-NEXT:     .symidx $ientry_thunk$cdecl$m100$v610; CHECK-NEXT:     .word   1611; CHECK-NEXT:     .symidx "#matches_has_sret"612; CHECK-NEXT:     .symidx $ientry_thunk$cdecl$i8$v613; CHECK-NEXT:     .word   1614; CHECK-NEXT:     .symidx "#has_aligned_sret"615; CHECK-NEXT:     .symidx $ientry_thunk$cdecl$m16$i8616; CHECK-NEXT:     .word   1617; CHECK-NEXT:     .symidx "#small_array"618; CHECK-NEXT:     .symidx $ientry_thunk$cdecl$m2$m2F8619; CHECK-NEXT:     .word   1620; CHECK-NEXT:     .symidx "#large_array"621; CHECK-NEXT:     .symidx $ientry_thunk$cdecl$m24$m24D16m32622; CHECK-NEXT:     .word   1623; CHECK-NEXT:     .symidx "#simple_struct"624; CHECK-NEXT:     .symidx $ientry_thunk$cdecl$m8$i8m8m16m24625; CHECK-NEXT:     .word   1626; CHECK-NEXT:     .symidx "#cxx_method"627; CHECK-NEXT:     .symidx $ientry_thunk$cdecl$i8$i8i8628; CHECK-NEXT:     .word   1629; CHECK-NEXT:     .symidx	"#small_vector"630; CHECK-NEXT:     .symidx	$ientry_thunk$cdecl$m$m631; CHECK-NEXT:     .word	1632; CHECK-NEXT:     .symidx	"#large_vector"633; CHECK-NEXT:     .symidx	$ientry_thunk$cdecl$m16$m16634; CHECK-NEXT:     .word	1635