7344 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=aarch64 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-NOFP16,CHECK-NOFP16-SD3; RUN: llc -mtriple=aarch64 -mattr=+fullfp16 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-FP16,CHECK-FP16-SD4; RUN: llc -mtriple=aarch64 -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-NOFP16,CHECK-NOFP16-GI5; RUN: llc -mtriple=aarch64 -mattr=+fullfp16 -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-FP16,CHECK-FP16-GI6 7define i64 @fptos_f64_i64(double %a) {8; CHECK-LABEL: fptos_f64_i64:9; CHECK: // %bb.0: // %entry10; CHECK-NEXT: fcvtzs x0, d011; CHECK-NEXT: ret12entry:13 %c = fptosi double %a to i6414 ret i64 %c15}16 17define i64 @fptou_f64_i64(double %a) {18; CHECK-LABEL: fptou_f64_i64:19; CHECK: // %bb.0: // %entry20; CHECK-NEXT: fcvtzu x0, d021; CHECK-NEXT: ret22entry:23 %c = fptoui double %a to i6424 ret i64 %c25}26 27define i32 @fptos_f64_i32(double %a) {28; CHECK-LABEL: fptos_f64_i32:29; CHECK: // %bb.0: // %entry30; CHECK-NEXT: fcvtzs w0, d031; CHECK-NEXT: ret32entry:33 %c = fptosi double %a to i3234 ret i32 %c35}36 37define i32 @fptou_f64_i32(double %a) {38; CHECK-LABEL: fptou_f64_i32:39; CHECK: // %bb.0: // %entry40; CHECK-NEXT: fcvtzu w0, d041; CHECK-NEXT: ret42entry:43 %c = fptoui double %a to i3244 ret i32 %c45}46 47define i16 @fptos_f64_i16(double %a) {48; CHECK-LABEL: fptos_f64_i16:49; CHECK: // %bb.0: // %entry50; CHECK-NEXT: fcvtzs w0, d051; CHECK-NEXT: ret52entry:53 %c = fptosi double %a to i1654 ret i16 %c55}56 57define i16 @fptou_f64_i16(double %a) {58; CHECK-NOFP16-SD-LABEL: fptou_f64_i16:59; CHECK-NOFP16-SD: // %bb.0: // %entry60; CHECK-NOFP16-SD-NEXT: fcvtzs w0, d061; CHECK-NOFP16-SD-NEXT: ret62;63; CHECK-FP16-SD-LABEL: fptou_f64_i16:64; CHECK-FP16-SD: // %bb.0: // %entry65; CHECK-FP16-SD-NEXT: fcvtzs w0, d066; CHECK-FP16-SD-NEXT: ret67;68; CHECK-NOFP16-GI-LABEL: fptou_f64_i16:69; CHECK-NOFP16-GI: // %bb.0: // %entry70; CHECK-NOFP16-GI-NEXT: fcvtzu w0, d071; CHECK-NOFP16-GI-NEXT: ret72;73; CHECK-FP16-GI-LABEL: fptou_f64_i16:74; CHECK-FP16-GI: // %bb.0: // %entry75; CHECK-FP16-GI-NEXT: fcvtzu w0, d076; CHECK-FP16-GI-NEXT: ret77entry:78 %c = fptoui double %a to i1679 ret i16 %c80}81 82define i8 @fptos_f64_i8(double %a) {83; CHECK-LABEL: fptos_f64_i8:84; CHECK: // %bb.0: // %entry85; CHECK-NEXT: fcvtzs w0, d086; CHECK-NEXT: ret87entry:88 %c = fptosi double %a to i889 ret i8 %c90}91 92define i8 @fptou_f64_i8(double %a) {93; CHECK-NOFP16-SD-LABEL: fptou_f64_i8:94; CHECK-NOFP16-SD: // %bb.0: // %entry95; CHECK-NOFP16-SD-NEXT: fcvtzs w0, d096; CHECK-NOFP16-SD-NEXT: ret97;98; CHECK-FP16-SD-LABEL: fptou_f64_i8:99; CHECK-FP16-SD: // %bb.0: // %entry100; CHECK-FP16-SD-NEXT: fcvtzs w0, d0101; CHECK-FP16-SD-NEXT: ret102;103; CHECK-NOFP16-GI-LABEL: fptou_f64_i8:104; CHECK-NOFP16-GI: // %bb.0: // %entry105; CHECK-NOFP16-GI-NEXT: fcvtzu w0, d0106; CHECK-NOFP16-GI-NEXT: ret107;108; CHECK-FP16-GI-LABEL: fptou_f64_i8:109; CHECK-FP16-GI: // %bb.0: // %entry110; CHECK-FP16-GI-NEXT: fcvtzu w0, d0111; CHECK-FP16-GI-NEXT: ret112entry:113 %c = fptoui double %a to i8114 ret i8 %c115}116 117define i128 @fptos_f64_i128(double %a) {118; CHECK-LABEL: fptos_f64_i128:119; CHECK: // %bb.0: // %entry120; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill121; CHECK-NEXT: .cfi_def_cfa_offset 16122; CHECK-NEXT: .cfi_offset w30, -16123; CHECK-NEXT: bl __fixdfti124; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload125; CHECK-NEXT: ret126entry:127 %c = fptosi double %a to i128128 ret i128 %c129}130 131define i128 @fptou_f64_i128(double %a) {132; CHECK-LABEL: fptou_f64_i128:133; CHECK: // %bb.0: // %entry134; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill135; CHECK-NEXT: .cfi_def_cfa_offset 16136; CHECK-NEXT: .cfi_offset w30, -16137; CHECK-NEXT: bl __fixunsdfti138; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload139; CHECK-NEXT: ret140entry:141 %c = fptoui double %a to i128142 ret i128 %c143}144 145define i64 @fptos_f32_i64(float %a) {146; CHECK-LABEL: fptos_f32_i64:147; CHECK: // %bb.0: // %entry148; CHECK-NEXT: fcvtzs x0, s0149; CHECK-NEXT: ret150entry:151 %c = fptosi float %a to i64152 ret i64 %c153}154 155define i64 @fptou_f32_i64(float %a) {156; CHECK-LABEL: fptou_f32_i64:157; CHECK: // %bb.0: // %entry158; CHECK-NEXT: fcvtzu x0, s0159; CHECK-NEXT: ret160entry:161 %c = fptoui float %a to i64162 ret i64 %c163}164 165define i32 @fptos_f32_i32(float %a) {166; CHECK-LABEL: fptos_f32_i32:167; CHECK: // %bb.0: // %entry168; CHECK-NEXT: fcvtzs w0, s0169; CHECK-NEXT: ret170entry:171 %c = fptosi float %a to i32172 ret i32 %c173}174 175define i32 @fptou_f32_i32(float %a) {176; CHECK-LABEL: fptou_f32_i32:177; CHECK: // %bb.0: // %entry178; CHECK-NEXT: fcvtzu w0, s0179; CHECK-NEXT: ret180entry:181 %c = fptoui float %a to i32182 ret i32 %c183}184 185define i16 @fptos_f32_i16(float %a) {186; CHECK-LABEL: fptos_f32_i16:187; CHECK: // %bb.0: // %entry188; CHECK-NEXT: fcvtzs w0, s0189; CHECK-NEXT: ret190entry:191 %c = fptosi float %a to i16192 ret i16 %c193}194 195define i16 @fptou_f32_i16(float %a) {196; CHECK-NOFP16-SD-LABEL: fptou_f32_i16:197; CHECK-NOFP16-SD: // %bb.0: // %entry198; CHECK-NOFP16-SD-NEXT: fcvtzs w0, s0199; CHECK-NOFP16-SD-NEXT: ret200;201; CHECK-FP16-SD-LABEL: fptou_f32_i16:202; CHECK-FP16-SD: // %bb.0: // %entry203; CHECK-FP16-SD-NEXT: fcvtzs w0, s0204; CHECK-FP16-SD-NEXT: ret205;206; CHECK-NOFP16-GI-LABEL: fptou_f32_i16:207; CHECK-NOFP16-GI: // %bb.0: // %entry208; CHECK-NOFP16-GI-NEXT: fcvtzu w0, s0209; CHECK-NOFP16-GI-NEXT: ret210;211; CHECK-FP16-GI-LABEL: fptou_f32_i16:212; CHECK-FP16-GI: // %bb.0: // %entry213; CHECK-FP16-GI-NEXT: fcvtzu w0, s0214; CHECK-FP16-GI-NEXT: ret215entry:216 %c = fptoui float %a to i16217 ret i16 %c218}219 220define i8 @fptos_f32_i8(float %a) {221; CHECK-LABEL: fptos_f32_i8:222; CHECK: // %bb.0: // %entry223; CHECK-NEXT: fcvtzs w0, s0224; CHECK-NEXT: ret225entry:226 %c = fptosi float %a to i8227 ret i8 %c228}229 230define i8 @fptou_f32_i8(float %a) {231; CHECK-NOFP16-SD-LABEL: fptou_f32_i8:232; CHECK-NOFP16-SD: // %bb.0: // %entry233; CHECK-NOFP16-SD-NEXT: fcvtzs w0, s0234; CHECK-NOFP16-SD-NEXT: ret235;236; CHECK-FP16-SD-LABEL: fptou_f32_i8:237; CHECK-FP16-SD: // %bb.0: // %entry238; CHECK-FP16-SD-NEXT: fcvtzs w0, s0239; CHECK-FP16-SD-NEXT: ret240;241; CHECK-NOFP16-GI-LABEL: fptou_f32_i8:242; CHECK-NOFP16-GI: // %bb.0: // %entry243; CHECK-NOFP16-GI-NEXT: fcvtzu w0, s0244; CHECK-NOFP16-GI-NEXT: ret245;246; CHECK-FP16-GI-LABEL: fptou_f32_i8:247; CHECK-FP16-GI: // %bb.0: // %entry248; CHECK-FP16-GI-NEXT: fcvtzu w0, s0249; CHECK-FP16-GI-NEXT: ret250entry:251 %c = fptoui float %a to i8252 ret i8 %c253}254 255define i128 @fptos_f32_i128(float %a) {256; CHECK-LABEL: fptos_f32_i128:257; CHECK: // %bb.0: // %entry258; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill259; CHECK-NEXT: .cfi_def_cfa_offset 16260; CHECK-NEXT: .cfi_offset w30, -16261; CHECK-NEXT: bl __fixsfti262; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload263; CHECK-NEXT: ret264entry:265 %c = fptosi float %a to i128266 ret i128 %c267}268 269define i128 @fptou_f32_i128(float %a) {270; CHECK-LABEL: fptou_f32_i128:271; CHECK: // %bb.0: // %entry272; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill273; CHECK-NEXT: .cfi_def_cfa_offset 16274; CHECK-NEXT: .cfi_offset w30, -16275; CHECK-NEXT: bl __fixunssfti276; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload277; CHECK-NEXT: ret278entry:279 %c = fptoui float %a to i128280 ret i128 %c281}282 283define i64 @fptos_f16_i64(half %a) {284; CHECK-NOFP16-LABEL: fptos_f16_i64:285; CHECK-NOFP16: // %bb.0: // %entry286; CHECK-NOFP16-NEXT: fcvt s0, h0287; CHECK-NOFP16-NEXT: fcvtzs x0, s0288; CHECK-NOFP16-NEXT: ret289;290; CHECK-FP16-LABEL: fptos_f16_i64:291; CHECK-FP16: // %bb.0: // %entry292; CHECK-FP16-NEXT: fcvtzs x0, h0293; CHECK-FP16-NEXT: ret294entry:295 %c = fptosi half %a to i64296 ret i64 %c297}298 299define i64 @fptou_f16_i64(half %a) {300; CHECK-NOFP16-LABEL: fptou_f16_i64:301; CHECK-NOFP16: // %bb.0: // %entry302; CHECK-NOFP16-NEXT: fcvt s0, h0303; CHECK-NOFP16-NEXT: fcvtzu x0, s0304; CHECK-NOFP16-NEXT: ret305;306; CHECK-FP16-LABEL: fptou_f16_i64:307; CHECK-FP16: // %bb.0: // %entry308; CHECK-FP16-NEXT: fcvtzu x0, h0309; CHECK-FP16-NEXT: ret310entry:311 %c = fptoui half %a to i64312 ret i64 %c313}314 315define i32 @fptos_f16_i32(half %a) {316; CHECK-NOFP16-LABEL: fptos_f16_i32:317; CHECK-NOFP16: // %bb.0: // %entry318; CHECK-NOFP16-NEXT: fcvt s0, h0319; CHECK-NOFP16-NEXT: fcvtzs w0, s0320; CHECK-NOFP16-NEXT: ret321;322; CHECK-FP16-LABEL: fptos_f16_i32:323; CHECK-FP16: // %bb.0: // %entry324; CHECK-FP16-NEXT: fcvtzs w0, h0325; CHECK-FP16-NEXT: ret326entry:327 %c = fptosi half %a to i32328 ret i32 %c329}330 331define i32 @fptou_f16_i32(half %a) {332; CHECK-NOFP16-LABEL: fptou_f16_i32:333; CHECK-NOFP16: // %bb.0: // %entry334; CHECK-NOFP16-NEXT: fcvt s0, h0335; CHECK-NOFP16-NEXT: fcvtzu w0, s0336; CHECK-NOFP16-NEXT: ret337;338; CHECK-FP16-LABEL: fptou_f16_i32:339; CHECK-FP16: // %bb.0: // %entry340; CHECK-FP16-NEXT: fcvtzu w0, h0341; CHECK-FP16-NEXT: ret342entry:343 %c = fptoui half %a to i32344 ret i32 %c345}346 347define i16 @fptos_f16_i16(half %a) {348; CHECK-NOFP16-LABEL: fptos_f16_i16:349; CHECK-NOFP16: // %bb.0: // %entry350; CHECK-NOFP16-NEXT: fcvt s0, h0351; CHECK-NOFP16-NEXT: fcvtzs w0, s0352; CHECK-NOFP16-NEXT: ret353;354; CHECK-FP16-LABEL: fptos_f16_i16:355; CHECK-FP16: // %bb.0: // %entry356; CHECK-FP16-NEXT: fcvtzs w0, h0357; CHECK-FP16-NEXT: ret358entry:359 %c = fptosi half %a to i16360 ret i16 %c361}362 363define i16 @fptou_f16_i16(half %a) {364; CHECK-NOFP16-SD-LABEL: fptou_f16_i16:365; CHECK-NOFP16-SD: // %bb.0: // %entry366; CHECK-NOFP16-SD-NEXT: fcvt s0, h0367; CHECK-NOFP16-SD-NEXT: fcvtzs w0, s0368; CHECK-NOFP16-SD-NEXT: ret369;370; CHECK-FP16-SD-LABEL: fptou_f16_i16:371; CHECK-FP16-SD: // %bb.0: // %entry372; CHECK-FP16-SD-NEXT: fcvtzs w0, h0373; CHECK-FP16-SD-NEXT: ret374;375; CHECK-NOFP16-GI-LABEL: fptou_f16_i16:376; CHECK-NOFP16-GI: // %bb.0: // %entry377; CHECK-NOFP16-GI-NEXT: fcvt s0, h0378; CHECK-NOFP16-GI-NEXT: fcvtzu w0, s0379; CHECK-NOFP16-GI-NEXT: ret380;381; CHECK-FP16-GI-LABEL: fptou_f16_i16:382; CHECK-FP16-GI: // %bb.0: // %entry383; CHECK-FP16-GI-NEXT: fcvtzu w0, h0384; CHECK-FP16-GI-NEXT: ret385entry:386 %c = fptoui half %a to i16387 ret i16 %c388}389 390define i8 @fptos_f16_i8(half %a) {391; CHECK-NOFP16-LABEL: fptos_f16_i8:392; CHECK-NOFP16: // %bb.0: // %entry393; CHECK-NOFP16-NEXT: fcvt s0, h0394; CHECK-NOFP16-NEXT: fcvtzs w0, s0395; CHECK-NOFP16-NEXT: ret396;397; CHECK-FP16-LABEL: fptos_f16_i8:398; CHECK-FP16: // %bb.0: // %entry399; CHECK-FP16-NEXT: fcvtzs w0, h0400; CHECK-FP16-NEXT: ret401entry:402 %c = fptosi half %a to i8403 ret i8 %c404}405 406define i8 @fptou_f16_i8(half %a) {407; CHECK-NOFP16-SD-LABEL: fptou_f16_i8:408; CHECK-NOFP16-SD: // %bb.0: // %entry409; CHECK-NOFP16-SD-NEXT: fcvt s0, h0410; CHECK-NOFP16-SD-NEXT: fcvtzs w0, s0411; CHECK-NOFP16-SD-NEXT: ret412;413; CHECK-FP16-SD-LABEL: fptou_f16_i8:414; CHECK-FP16-SD: // %bb.0: // %entry415; CHECK-FP16-SD-NEXT: fcvtzs w0, h0416; CHECK-FP16-SD-NEXT: ret417;418; CHECK-NOFP16-GI-LABEL: fptou_f16_i8:419; CHECK-NOFP16-GI: // %bb.0: // %entry420; CHECK-NOFP16-GI-NEXT: fcvt s0, h0421; CHECK-NOFP16-GI-NEXT: fcvtzu w0, s0422; CHECK-NOFP16-GI-NEXT: ret423;424; CHECK-FP16-GI-LABEL: fptou_f16_i8:425; CHECK-FP16-GI: // %bb.0: // %entry426; CHECK-FP16-GI-NEXT: fcvtzu w0, h0427; CHECK-FP16-GI-NEXT: ret428entry:429 %c = fptoui half %a to i8430 ret i8 %c431}432 433define i128 @fptos_f16_i128(half %a) {434; CHECK-NOFP16-SD-LABEL: fptos_f16_i128:435; CHECK-NOFP16-SD: // %bb.0: // %entry436; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill437; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16438; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16439; CHECK-NOFP16-SD-NEXT: bl __fixhfti440; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload441; CHECK-NOFP16-SD-NEXT: ret442;443; CHECK-FP16-SD-LABEL: fptos_f16_i128:444; CHECK-FP16-SD: // %bb.0: // %entry445; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill446; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16447; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16448; CHECK-FP16-SD-NEXT: bl __fixhfti449; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload450; CHECK-FP16-SD-NEXT: ret451;452; CHECK-NOFP16-GI-LABEL: fptos_f16_i128:453; CHECK-NOFP16-GI: // %bb.0: // %entry454; CHECK-NOFP16-GI-NEXT: fcvt s0, h0455; CHECK-NOFP16-GI-NEXT: fcvtzs x0, s0456; CHECK-NOFP16-GI-NEXT: asr x1, x0, #63457; CHECK-NOFP16-GI-NEXT: ret458;459; CHECK-FP16-GI-LABEL: fptos_f16_i128:460; CHECK-FP16-GI: // %bb.0: // %entry461; CHECK-FP16-GI-NEXT: fcvtzs x0, h0462; CHECK-FP16-GI-NEXT: asr x1, x0, #63463; CHECK-FP16-GI-NEXT: ret464entry:465 %c = fptosi half %a to i128466 ret i128 %c467}468 469define i128 @fptou_f16_i128(half %a) {470; CHECK-NOFP16-SD-LABEL: fptou_f16_i128:471; CHECK-NOFP16-SD: // %bb.0: // %entry472; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill473; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16474; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16475; CHECK-NOFP16-SD-NEXT: bl __fixunshfti476; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload477; CHECK-NOFP16-SD-NEXT: ret478;479; CHECK-FP16-SD-LABEL: fptou_f16_i128:480; CHECK-FP16-SD: // %bb.0: // %entry481; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill482; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16483; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16484; CHECK-FP16-SD-NEXT: bl __fixunshfti485; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload486; CHECK-FP16-SD-NEXT: ret487;488; CHECK-NOFP16-GI-LABEL: fptou_f16_i128:489; CHECK-NOFP16-GI: // %bb.0: // %entry490; CHECK-NOFP16-GI-NEXT: fcvt s0, h0491; CHECK-NOFP16-GI-NEXT: mov x1, xzr492; CHECK-NOFP16-GI-NEXT: fcvtzu x0, s0493; CHECK-NOFP16-GI-NEXT: ret494;495; CHECK-FP16-GI-LABEL: fptou_f16_i128:496; CHECK-FP16-GI: // %bb.0: // %entry497; CHECK-FP16-GI-NEXT: fcvtzu x0, h0498; CHECK-FP16-GI-NEXT: mov x1, xzr499; CHECK-FP16-GI-NEXT: ret500entry:501 %c = fptoui half %a to i128502 ret i128 %c503}504 505define i64 @fptos_f128_i64(fp128 %a) {506; CHECK-NOFP16-SD-LABEL: fptos_f128_i64:507; CHECK-NOFP16-SD: // %bb.0: // %entry508; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill509; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16510; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16511; CHECK-NOFP16-SD-NEXT: bl __fixtfdi512; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload513; CHECK-NOFP16-SD-NEXT: ret514;515; CHECK-FP16-SD-LABEL: fptos_f128_i64:516; CHECK-FP16-SD: // %bb.0: // %entry517; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill518; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16519; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16520; CHECK-FP16-SD-NEXT: bl __fixtfdi521; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload522; CHECK-FP16-SD-NEXT: ret523;524; CHECK-NOFP16-GI-LABEL: fptos_f128_i64:525; CHECK-NOFP16-GI: // %bb.0: // %entry526; CHECK-NOFP16-GI-NEXT: b __fixtfdi527;528; CHECK-FP16-GI-LABEL: fptos_f128_i64:529; CHECK-FP16-GI: // %bb.0: // %entry530; CHECK-FP16-GI-NEXT: b __fixtfdi531entry:532 %c = fptosi fp128 %a to i64533 ret i64 %c534}535 536define i64 @fptou_f128_i64(fp128 %a) {537; CHECK-NOFP16-SD-LABEL: fptou_f128_i64:538; CHECK-NOFP16-SD: // %bb.0: // %entry539; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill540; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16541; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16542; CHECK-NOFP16-SD-NEXT: bl __fixunstfdi543; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload544; CHECK-NOFP16-SD-NEXT: ret545;546; CHECK-FP16-SD-LABEL: fptou_f128_i64:547; CHECK-FP16-SD: // %bb.0: // %entry548; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill549; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16550; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16551; CHECK-FP16-SD-NEXT: bl __fixunstfdi552; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload553; CHECK-FP16-SD-NEXT: ret554;555; CHECK-NOFP16-GI-LABEL: fptou_f128_i64:556; CHECK-NOFP16-GI: // %bb.0: // %entry557; CHECK-NOFP16-GI-NEXT: b __fixunstfdi558;559; CHECK-FP16-GI-LABEL: fptou_f128_i64:560; CHECK-FP16-GI: // %bb.0: // %entry561; CHECK-FP16-GI-NEXT: b __fixunstfdi562entry:563 %c = fptoui fp128 %a to i64564 ret i64 %c565}566 567define i32 @fptos_f128_i32(fp128 %a) {568; CHECK-NOFP16-SD-LABEL: fptos_f128_i32:569; CHECK-NOFP16-SD: // %bb.0: // %entry570; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill571; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16572; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16573; CHECK-NOFP16-SD-NEXT: bl __fixtfsi574; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload575; CHECK-NOFP16-SD-NEXT: ret576;577; CHECK-FP16-SD-LABEL: fptos_f128_i32:578; CHECK-FP16-SD: // %bb.0: // %entry579; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill580; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16581; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16582; CHECK-FP16-SD-NEXT: bl __fixtfsi583; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload584; CHECK-FP16-SD-NEXT: ret585;586; CHECK-NOFP16-GI-LABEL: fptos_f128_i32:587; CHECK-NOFP16-GI: // %bb.0: // %entry588; CHECK-NOFP16-GI-NEXT: b __fixtfsi589;590; CHECK-FP16-GI-LABEL: fptos_f128_i32:591; CHECK-FP16-GI: // %bb.0: // %entry592; CHECK-FP16-GI-NEXT: b __fixtfsi593entry:594 %c = fptosi fp128 %a to i32595 ret i32 %c596}597 598define i32 @fptou_f128_i32(fp128 %a) {599; CHECK-NOFP16-SD-LABEL: fptou_f128_i32:600; CHECK-NOFP16-SD: // %bb.0: // %entry601; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill602; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16603; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16604; CHECK-NOFP16-SD-NEXT: bl __fixunstfsi605; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload606; CHECK-NOFP16-SD-NEXT: ret607;608; CHECK-FP16-SD-LABEL: fptou_f128_i32:609; CHECK-FP16-SD: // %bb.0: // %entry610; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill611; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16612; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16613; CHECK-FP16-SD-NEXT: bl __fixunstfsi614; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload615; CHECK-FP16-SD-NEXT: ret616;617; CHECK-NOFP16-GI-LABEL: fptou_f128_i32:618; CHECK-NOFP16-GI: // %bb.0: // %entry619; CHECK-NOFP16-GI-NEXT: b __fixunstfsi620;621; CHECK-FP16-GI-LABEL: fptou_f128_i32:622; CHECK-FP16-GI: // %bb.0: // %entry623; CHECK-FP16-GI-NEXT: b __fixunstfsi624entry:625 %c = fptoui fp128 %a to i32626 ret i32 %c627}628 629define i16 @fptos_f128_i16(fp128 %a) {630; CHECK-LABEL: fptos_f128_i16:631; CHECK: // %bb.0: // %entry632; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill633; CHECK-NEXT: .cfi_def_cfa_offset 16634; CHECK-NEXT: .cfi_offset w30, -16635; CHECK-NEXT: bl __fixtfsi636; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload637; CHECK-NEXT: ret638entry:639 %c = fptosi fp128 %a to i16640 ret i16 %c641}642 643define i16 @fptou_f128_i16(fp128 %a) {644; CHECK-NOFP16-SD-LABEL: fptou_f128_i16:645; CHECK-NOFP16-SD: // %bb.0: // %entry646; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill647; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16648; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16649; CHECK-NOFP16-SD-NEXT: bl __fixtfsi650; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload651; CHECK-NOFP16-SD-NEXT: ret652;653; CHECK-FP16-SD-LABEL: fptou_f128_i16:654; CHECK-FP16-SD: // %bb.0: // %entry655; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill656; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16657; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16658; CHECK-FP16-SD-NEXT: bl __fixtfsi659; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload660; CHECK-FP16-SD-NEXT: ret661;662; CHECK-NOFP16-GI-LABEL: fptou_f128_i16:663; CHECK-NOFP16-GI: // %bb.0: // %entry664; CHECK-NOFP16-GI-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill665; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 16666; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -16667; CHECK-NOFP16-GI-NEXT: bl __fixunstfsi668; CHECK-NOFP16-GI-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload669; CHECK-NOFP16-GI-NEXT: ret670;671; CHECK-FP16-GI-LABEL: fptou_f128_i16:672; CHECK-FP16-GI: // %bb.0: // %entry673; CHECK-FP16-GI-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill674; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 16675; CHECK-FP16-GI-NEXT: .cfi_offset w30, -16676; CHECK-FP16-GI-NEXT: bl __fixunstfsi677; CHECK-FP16-GI-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload678; CHECK-FP16-GI-NEXT: ret679entry:680 %c = fptoui fp128 %a to i16681 ret i16 %c682}683 684define i8 @fptos_f128_i8(fp128 %a) {685; CHECK-LABEL: fptos_f128_i8:686; CHECK: // %bb.0: // %entry687; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill688; CHECK-NEXT: .cfi_def_cfa_offset 16689; CHECK-NEXT: .cfi_offset w30, -16690; CHECK-NEXT: bl __fixtfsi691; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload692; CHECK-NEXT: ret693entry:694 %c = fptosi fp128 %a to i8695 ret i8 %c696}697 698define i8 @fptou_f128_i8(fp128 %a) {699; CHECK-NOFP16-SD-LABEL: fptou_f128_i8:700; CHECK-NOFP16-SD: // %bb.0: // %entry701; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill702; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16703; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16704; CHECK-NOFP16-SD-NEXT: bl __fixtfsi705; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload706; CHECK-NOFP16-SD-NEXT: ret707;708; CHECK-FP16-SD-LABEL: fptou_f128_i8:709; CHECK-FP16-SD: // %bb.0: // %entry710; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill711; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16712; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16713; CHECK-FP16-SD-NEXT: bl __fixtfsi714; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload715; CHECK-FP16-SD-NEXT: ret716;717; CHECK-NOFP16-GI-LABEL: fptou_f128_i8:718; CHECK-NOFP16-GI: // %bb.0: // %entry719; CHECK-NOFP16-GI-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill720; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 16721; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -16722; CHECK-NOFP16-GI-NEXT: bl __fixunstfsi723; CHECK-NOFP16-GI-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload724; CHECK-NOFP16-GI-NEXT: ret725;726; CHECK-FP16-GI-LABEL: fptou_f128_i8:727; CHECK-FP16-GI: // %bb.0: // %entry728; CHECK-FP16-GI-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill729; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 16730; CHECK-FP16-GI-NEXT: .cfi_offset w30, -16731; CHECK-FP16-GI-NEXT: bl __fixunstfsi732; CHECK-FP16-GI-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload733; CHECK-FP16-GI-NEXT: ret734entry:735 %c = fptoui fp128 %a to i8736 ret i8 %c737}738 739define i128 @fptos_f128_i128(fp128 %a) {740; CHECK-LABEL: fptos_f128_i128:741; CHECK: // %bb.0: // %entry742; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill743; CHECK-NEXT: .cfi_def_cfa_offset 16744; CHECK-NEXT: .cfi_offset w30, -16745; CHECK-NEXT: bl __fixtfti746; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload747; CHECK-NEXT: ret748entry:749 %c = fptosi fp128 %a to i128750 ret i128 %c751}752 753define i128 @fptou_f128_i128(fp128 %a) {754; CHECK-LABEL: fptou_f128_i128:755; CHECK: // %bb.0: // %entry756; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill757; CHECK-NEXT: .cfi_def_cfa_offset 16758; CHECK-NEXT: .cfi_offset w30, -16759; CHECK-NEXT: bl __fixunstfti760; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload761; CHECK-NEXT: ret762entry:763 %c = fptoui fp128 %a to i128764 ret i128 %c765}766 767define void @fptos_store_f64_i64(double %a, ptr %p) {768; CHECK-NOFP16-SD-LABEL: fptos_store_f64_i64:769; CHECK-NOFP16-SD: // %bb.0: // %entry770; CHECK-NOFP16-SD-NEXT: fcvtzs d0, d0771; CHECK-NOFP16-SD-NEXT: str d0, [x0]772; CHECK-NOFP16-SD-NEXT: ret773;774; CHECK-FP16-SD-LABEL: fptos_store_f64_i64:775; CHECK-FP16-SD: // %bb.0: // %entry776; CHECK-FP16-SD-NEXT: fcvtzs d0, d0777; CHECK-FP16-SD-NEXT: str d0, [x0]778; CHECK-FP16-SD-NEXT: ret779;780; CHECK-NOFP16-GI-LABEL: fptos_store_f64_i64:781; CHECK-NOFP16-GI: // %bb.0: // %entry782; CHECK-NOFP16-GI-NEXT: fcvtzs x8, d0783; CHECK-NOFP16-GI-NEXT: str x8, [x0]784; CHECK-NOFP16-GI-NEXT: ret785;786; CHECK-FP16-GI-LABEL: fptos_store_f64_i64:787; CHECK-FP16-GI: // %bb.0: // %entry788; CHECK-FP16-GI-NEXT: fcvtzs x8, d0789; CHECK-FP16-GI-NEXT: str x8, [x0]790; CHECK-FP16-GI-NEXT: ret791entry:792 %c = fptosi double %a to i64793 store i64 %c, ptr %p794 ret void795}796 797define void @fptou_store_f64_i64(double %a, ptr %p) {798; CHECK-NOFP16-SD-LABEL: fptou_store_f64_i64:799; CHECK-NOFP16-SD: // %bb.0: // %entry800; CHECK-NOFP16-SD-NEXT: fcvtzu d0, d0801; CHECK-NOFP16-SD-NEXT: str d0, [x0]802; CHECK-NOFP16-SD-NEXT: ret803;804; CHECK-FP16-SD-LABEL: fptou_store_f64_i64:805; CHECK-FP16-SD: // %bb.0: // %entry806; CHECK-FP16-SD-NEXT: fcvtzu d0, d0807; CHECK-FP16-SD-NEXT: str d0, [x0]808; CHECK-FP16-SD-NEXT: ret809;810; CHECK-NOFP16-GI-LABEL: fptou_store_f64_i64:811; CHECK-NOFP16-GI: // %bb.0: // %entry812; CHECK-NOFP16-GI-NEXT: fcvtzu x8, d0813; CHECK-NOFP16-GI-NEXT: str x8, [x0]814; CHECK-NOFP16-GI-NEXT: ret815;816; CHECK-FP16-GI-LABEL: fptou_store_f64_i64:817; CHECK-FP16-GI: // %bb.0: // %entry818; CHECK-FP16-GI-NEXT: fcvtzu x8, d0819; CHECK-FP16-GI-NEXT: str x8, [x0]820; CHECK-FP16-GI-NEXT: ret821entry:822 %c = fptoui double %a to i64823 store i64 %c, ptr %p824 ret void825}826 827define void @fptos_store_f64_i32(double %a, ptr %p) {828; CHECK-LABEL: fptos_store_f64_i32:829; CHECK: // %bb.0: // %entry830; CHECK-NEXT: fcvtzs w8, d0831; CHECK-NEXT: str w8, [x0]832; CHECK-NEXT: ret833entry:834 %c = fptosi double %a to i32835 store i32 %c, ptr %p836 ret void837}838 839define void @fptou_store_f64_i32(double %a, ptr %p) {840; CHECK-LABEL: fptou_store_f64_i32:841; CHECK: // %bb.0: // %entry842; CHECK-NEXT: fcvtzu w8, d0843; CHECK-NEXT: str w8, [x0]844; CHECK-NEXT: ret845entry:846 %c = fptoui double %a to i32847 store i32 %c, ptr %p848 ret void849}850 851define void @fptos_store_f64_i16(double %a, ptr %p) {852; CHECK-LABEL: fptos_store_f64_i16:853; CHECK: // %bb.0: // %entry854; CHECK-NEXT: fcvtzs w8, d0855; CHECK-NEXT: strh w8, [x0]856; CHECK-NEXT: ret857entry:858 %c = fptosi double %a to i16859 store i16 %c, ptr %p860 ret void861}862 863define void @fptou_store_f64_i16(double %a, ptr %p) {864; CHECK-NOFP16-SD-LABEL: fptou_store_f64_i16:865; CHECK-NOFP16-SD: // %bb.0: // %entry866; CHECK-NOFP16-SD-NEXT: fcvtzs w8, d0867; CHECK-NOFP16-SD-NEXT: strh w8, [x0]868; CHECK-NOFP16-SD-NEXT: ret869;870; CHECK-FP16-SD-LABEL: fptou_store_f64_i16:871; CHECK-FP16-SD: // %bb.0: // %entry872; CHECK-FP16-SD-NEXT: fcvtzs w8, d0873; CHECK-FP16-SD-NEXT: strh w8, [x0]874; CHECK-FP16-SD-NEXT: ret875;876; CHECK-NOFP16-GI-LABEL: fptou_store_f64_i16:877; CHECK-NOFP16-GI: // %bb.0: // %entry878; CHECK-NOFP16-GI-NEXT: fcvtzu w8, d0879; CHECK-NOFP16-GI-NEXT: strh w8, [x0]880; CHECK-NOFP16-GI-NEXT: ret881;882; CHECK-FP16-GI-LABEL: fptou_store_f64_i16:883; CHECK-FP16-GI: // %bb.0: // %entry884; CHECK-FP16-GI-NEXT: fcvtzu w8, d0885; CHECK-FP16-GI-NEXT: strh w8, [x0]886; CHECK-FP16-GI-NEXT: ret887entry:888 %c = fptoui double %a to i16889 store i16 %c, ptr %p890 ret void891}892 893define void @fptos_store_f64_i8(double %a, ptr %p) {894; CHECK-LABEL: fptos_store_f64_i8:895; CHECK: // %bb.0: // %entry896; CHECK-NEXT: fcvtzs w8, d0897; CHECK-NEXT: strb w8, [x0]898; CHECK-NEXT: ret899entry:900 %c = fptosi double %a to i8901 store i8 %c, ptr %p902 ret void903}904 905define void @fptou_store_f64_i8(double %a, ptr %p) {906; CHECK-NOFP16-SD-LABEL: fptou_store_f64_i8:907; CHECK-NOFP16-SD: // %bb.0: // %entry908; CHECK-NOFP16-SD-NEXT: fcvtzs w8, d0909; CHECK-NOFP16-SD-NEXT: strb w8, [x0]910; CHECK-NOFP16-SD-NEXT: ret911;912; CHECK-FP16-SD-LABEL: fptou_store_f64_i8:913; CHECK-FP16-SD: // %bb.0: // %entry914; CHECK-FP16-SD-NEXT: fcvtzs w8, d0915; CHECK-FP16-SD-NEXT: strb w8, [x0]916; CHECK-FP16-SD-NEXT: ret917;918; CHECK-NOFP16-GI-LABEL: fptou_store_f64_i8:919; CHECK-NOFP16-GI: // %bb.0: // %entry920; CHECK-NOFP16-GI-NEXT: fcvtzu w8, d0921; CHECK-NOFP16-GI-NEXT: strb w8, [x0]922; CHECK-NOFP16-GI-NEXT: ret923;924; CHECK-FP16-GI-LABEL: fptou_store_f64_i8:925; CHECK-FP16-GI: // %bb.0: // %entry926; CHECK-FP16-GI-NEXT: fcvtzu w8, d0927; CHECK-FP16-GI-NEXT: strb w8, [x0]928; CHECK-FP16-GI-NEXT: ret929entry:930 %c = fptoui double %a to i8931 store i8 %c, ptr %p932 ret void933}934 935define void @fptos_store_f32_i64(float %a, ptr %p) {936; CHECK-LABEL: fptos_store_f32_i64:937; CHECK: // %bb.0: // %entry938; CHECK-NEXT: fcvtzs x8, s0939; CHECK-NEXT: str x8, [x0]940; CHECK-NEXT: ret941entry:942 %c = fptosi float %a to i64943 store i64 %c, ptr %p944 ret void945}946 947define void @fptou_store_f32_i64(float %a, ptr %p) {948; CHECK-LABEL: fptou_store_f32_i64:949; CHECK: // %bb.0: // %entry950; CHECK-NEXT: fcvtzu x8, s0951; CHECK-NEXT: str x8, [x0]952; CHECK-NEXT: ret953entry:954 %c = fptoui float %a to i64955 store i64 %c, ptr %p956 ret void957}958 959define void @fptos_store_f32_i32(float %a, ptr %p) {960; CHECK-NOFP16-SD-LABEL: fptos_store_f32_i32:961; CHECK-NOFP16-SD: // %bb.0: // %entry962; CHECK-NOFP16-SD-NEXT: fcvtzs s0, s0963; CHECK-NOFP16-SD-NEXT: str s0, [x0]964; CHECK-NOFP16-SD-NEXT: ret965;966; CHECK-FP16-SD-LABEL: fptos_store_f32_i32:967; CHECK-FP16-SD: // %bb.0: // %entry968; CHECK-FP16-SD-NEXT: fcvtzs s0, s0969; CHECK-FP16-SD-NEXT: str s0, [x0]970; CHECK-FP16-SD-NEXT: ret971;972; CHECK-NOFP16-GI-LABEL: fptos_store_f32_i32:973; CHECK-NOFP16-GI: // %bb.0: // %entry974; CHECK-NOFP16-GI-NEXT: fcvtzs w8, s0975; CHECK-NOFP16-GI-NEXT: str w8, [x0]976; CHECK-NOFP16-GI-NEXT: ret977;978; CHECK-FP16-GI-LABEL: fptos_store_f32_i32:979; CHECK-FP16-GI: // %bb.0: // %entry980; CHECK-FP16-GI-NEXT: fcvtzs w8, s0981; CHECK-FP16-GI-NEXT: str w8, [x0]982; CHECK-FP16-GI-NEXT: ret983entry:984 %c = fptosi float %a to i32985 store i32 %c, ptr %p986 ret void987}988 989define void @fptou_store_f32_i32(float %a, ptr %p) {990; CHECK-NOFP16-SD-LABEL: fptou_store_f32_i32:991; CHECK-NOFP16-SD: // %bb.0: // %entry992; CHECK-NOFP16-SD-NEXT: fcvtzu s0, s0993; CHECK-NOFP16-SD-NEXT: str s0, [x0]994; CHECK-NOFP16-SD-NEXT: ret995;996; CHECK-FP16-SD-LABEL: fptou_store_f32_i32:997; CHECK-FP16-SD: // %bb.0: // %entry998; CHECK-FP16-SD-NEXT: fcvtzu s0, s0999; CHECK-FP16-SD-NEXT: str s0, [x0]1000; CHECK-FP16-SD-NEXT: ret1001;1002; CHECK-NOFP16-GI-LABEL: fptou_store_f32_i32:1003; CHECK-NOFP16-GI: // %bb.0: // %entry1004; CHECK-NOFP16-GI-NEXT: fcvtzu w8, s01005; CHECK-NOFP16-GI-NEXT: str w8, [x0]1006; CHECK-NOFP16-GI-NEXT: ret1007;1008; CHECK-FP16-GI-LABEL: fptou_store_f32_i32:1009; CHECK-FP16-GI: // %bb.0: // %entry1010; CHECK-FP16-GI-NEXT: fcvtzu w8, s01011; CHECK-FP16-GI-NEXT: str w8, [x0]1012; CHECK-FP16-GI-NEXT: ret1013entry:1014 %c = fptoui float %a to i321015 store i32 %c, ptr %p1016 ret void1017}1018 1019define void @fptos_store_f32_i16(float %a, ptr %p) {1020; CHECK-NOFP16-SD-LABEL: fptos_store_f32_i16:1021; CHECK-NOFP16-SD: // %bb.0: // %entry1022; CHECK-NOFP16-SD-NEXT: fcvtzs s0, s01023; CHECK-NOFP16-SD-NEXT: str h0, [x0]1024; CHECK-NOFP16-SD-NEXT: ret1025;1026; CHECK-FP16-SD-LABEL: fptos_store_f32_i16:1027; CHECK-FP16-SD: // %bb.0: // %entry1028; CHECK-FP16-SD-NEXT: fcvtzs s0, s01029; CHECK-FP16-SD-NEXT: str h0, [x0]1030; CHECK-FP16-SD-NEXT: ret1031;1032; CHECK-NOFP16-GI-LABEL: fptos_store_f32_i16:1033; CHECK-NOFP16-GI: // %bb.0: // %entry1034; CHECK-NOFP16-GI-NEXT: fcvtzs w8, s01035; CHECK-NOFP16-GI-NEXT: strh w8, [x0]1036; CHECK-NOFP16-GI-NEXT: ret1037;1038; CHECK-FP16-GI-LABEL: fptos_store_f32_i16:1039; CHECK-FP16-GI: // %bb.0: // %entry1040; CHECK-FP16-GI-NEXT: fcvtzs w8, s01041; CHECK-FP16-GI-NEXT: strh w8, [x0]1042; CHECK-FP16-GI-NEXT: ret1043entry:1044 %c = fptosi float %a to i161045 store i16 %c, ptr %p1046 ret void1047}1048 1049define void @fptou_store_f32_i16(float %a, ptr %p) {1050; CHECK-NOFP16-SD-LABEL: fptou_store_f32_i16:1051; CHECK-NOFP16-SD: // %bb.0: // %entry1052; CHECK-NOFP16-SD-NEXT: fcvtzs s0, s01053; CHECK-NOFP16-SD-NEXT: str h0, [x0]1054; CHECK-NOFP16-SD-NEXT: ret1055;1056; CHECK-FP16-SD-LABEL: fptou_store_f32_i16:1057; CHECK-FP16-SD: // %bb.0: // %entry1058; CHECK-FP16-SD-NEXT: fcvtzs s0, s01059; CHECK-FP16-SD-NEXT: str h0, [x0]1060; CHECK-FP16-SD-NEXT: ret1061;1062; CHECK-NOFP16-GI-LABEL: fptou_store_f32_i16:1063; CHECK-NOFP16-GI: // %bb.0: // %entry1064; CHECK-NOFP16-GI-NEXT: fcvtzu w8, s01065; CHECK-NOFP16-GI-NEXT: strh w8, [x0]1066; CHECK-NOFP16-GI-NEXT: ret1067;1068; CHECK-FP16-GI-LABEL: fptou_store_f32_i16:1069; CHECK-FP16-GI: // %bb.0: // %entry1070; CHECK-FP16-GI-NEXT: fcvtzu w8, s01071; CHECK-FP16-GI-NEXT: strh w8, [x0]1072; CHECK-FP16-GI-NEXT: ret1073entry:1074 %c = fptoui float %a to i161075 store i16 %c, ptr %p1076 ret void1077}1078 1079define void @fptos_store_f32_i8(float %a, ptr %p) {1080; CHECK-NOFP16-SD-LABEL: fptos_store_f32_i8:1081; CHECK-NOFP16-SD: // %bb.0: // %entry1082; CHECK-NOFP16-SD-NEXT: fcvtzs s0, s01083; CHECK-NOFP16-SD-NEXT: str b0, [x0]1084; CHECK-NOFP16-SD-NEXT: ret1085;1086; CHECK-FP16-SD-LABEL: fptos_store_f32_i8:1087; CHECK-FP16-SD: // %bb.0: // %entry1088; CHECK-FP16-SD-NEXT: fcvtzs s0, s01089; CHECK-FP16-SD-NEXT: str b0, [x0]1090; CHECK-FP16-SD-NEXT: ret1091;1092; CHECK-NOFP16-GI-LABEL: fptos_store_f32_i8:1093; CHECK-NOFP16-GI: // %bb.0: // %entry1094; CHECK-NOFP16-GI-NEXT: fcvtzs w8, s01095; CHECK-NOFP16-GI-NEXT: strb w8, [x0]1096; CHECK-NOFP16-GI-NEXT: ret1097;1098; CHECK-FP16-GI-LABEL: fptos_store_f32_i8:1099; CHECK-FP16-GI: // %bb.0: // %entry1100; CHECK-FP16-GI-NEXT: fcvtzs w8, s01101; CHECK-FP16-GI-NEXT: strb w8, [x0]1102; CHECK-FP16-GI-NEXT: ret1103entry:1104 %c = fptosi float %a to i81105 store i8 %c, ptr %p1106 ret void1107}1108 1109define void @fptou_store_f32_i8(float %a, ptr %p) {1110; CHECK-NOFP16-SD-LABEL: fptou_store_f32_i8:1111; CHECK-NOFP16-SD: // %bb.0: // %entry1112; CHECK-NOFP16-SD-NEXT: fcvtzs s0, s01113; CHECK-NOFP16-SD-NEXT: str b0, [x0]1114; CHECK-NOFP16-SD-NEXT: ret1115;1116; CHECK-FP16-SD-LABEL: fptou_store_f32_i8:1117; CHECK-FP16-SD: // %bb.0: // %entry1118; CHECK-FP16-SD-NEXT: fcvtzs s0, s01119; CHECK-FP16-SD-NEXT: str b0, [x0]1120; CHECK-FP16-SD-NEXT: ret1121;1122; CHECK-NOFP16-GI-LABEL: fptou_store_f32_i8:1123; CHECK-NOFP16-GI: // %bb.0: // %entry1124; CHECK-NOFP16-GI-NEXT: fcvtzu w8, s01125; CHECK-NOFP16-GI-NEXT: strb w8, [x0]1126; CHECK-NOFP16-GI-NEXT: ret1127;1128; CHECK-FP16-GI-LABEL: fptou_store_f32_i8:1129; CHECK-FP16-GI: // %bb.0: // %entry1130; CHECK-FP16-GI-NEXT: fcvtzu w8, s01131; CHECK-FP16-GI-NEXT: strb w8, [x0]1132; CHECK-FP16-GI-NEXT: ret1133entry:1134 %c = fptoui float %a to i81135 store i8 %c, ptr %p1136 ret void1137}1138 1139define void @fptos_store_f16_i64(half %a, ptr %p) {1140; CHECK-NOFP16-LABEL: fptos_store_f16_i64:1141; CHECK-NOFP16: // %bb.0: // %entry1142; CHECK-NOFP16-NEXT: fcvt s0, h01143; CHECK-NOFP16-NEXT: fcvtzs x8, s01144; CHECK-NOFP16-NEXT: str x8, [x0]1145; CHECK-NOFP16-NEXT: ret1146;1147; CHECK-FP16-LABEL: fptos_store_f16_i64:1148; CHECK-FP16: // %bb.0: // %entry1149; CHECK-FP16-NEXT: fcvtzs x8, h01150; CHECK-FP16-NEXT: str x8, [x0]1151; CHECK-FP16-NEXT: ret1152entry:1153 %c = fptosi half %a to i641154 store i64 %c, ptr %p1155 ret void1156}1157 1158define void @fptou_store_f16_i64(half %a, ptr %p) {1159; CHECK-NOFP16-LABEL: fptou_store_f16_i64:1160; CHECK-NOFP16: // %bb.0: // %entry1161; CHECK-NOFP16-NEXT: fcvt s0, h01162; CHECK-NOFP16-NEXT: fcvtzu x8, s01163; CHECK-NOFP16-NEXT: str x8, [x0]1164; CHECK-NOFP16-NEXT: ret1165;1166; CHECK-FP16-LABEL: fptou_store_f16_i64:1167; CHECK-FP16: // %bb.0: // %entry1168; CHECK-FP16-NEXT: fcvtzu x8, h01169; CHECK-FP16-NEXT: str x8, [x0]1170; CHECK-FP16-NEXT: ret1171entry:1172 %c = fptoui half %a to i641173 store i64 %c, ptr %p1174 ret void1175}1176 1177define void @fptos_store_f16_i32(half %a, ptr %p) {1178; CHECK-NOFP16-SD-LABEL: fptos_store_f16_i32:1179; CHECK-NOFP16-SD: // %bb.0: // %entry1180; CHECK-NOFP16-SD-NEXT: fcvt s0, h01181; CHECK-NOFP16-SD-NEXT: fcvtzs s0, s01182; CHECK-NOFP16-SD-NEXT: str s0, [x0]1183; CHECK-NOFP16-SD-NEXT: ret1184;1185; CHECK-FP16-LABEL: fptos_store_f16_i32:1186; CHECK-FP16: // %bb.0: // %entry1187; CHECK-FP16-NEXT: fcvtzs w8, h01188; CHECK-FP16-NEXT: str w8, [x0]1189; CHECK-FP16-NEXT: ret1190;1191; CHECK-NOFP16-GI-LABEL: fptos_store_f16_i32:1192; CHECK-NOFP16-GI: // %bb.0: // %entry1193; CHECK-NOFP16-GI-NEXT: fcvt s0, h01194; CHECK-NOFP16-GI-NEXT: fcvtzs w8, s01195; CHECK-NOFP16-GI-NEXT: str w8, [x0]1196; CHECK-NOFP16-GI-NEXT: ret1197entry:1198 %c = fptosi half %a to i321199 store i32 %c, ptr %p1200 ret void1201}1202 1203define void @fptou_store_f16_i32(half %a, ptr %p) {1204; CHECK-NOFP16-SD-LABEL: fptou_store_f16_i32:1205; CHECK-NOFP16-SD: // %bb.0: // %entry1206; CHECK-NOFP16-SD-NEXT: fcvt s0, h01207; CHECK-NOFP16-SD-NEXT: fcvtzu s0, s01208; CHECK-NOFP16-SD-NEXT: str s0, [x0]1209; CHECK-NOFP16-SD-NEXT: ret1210;1211; CHECK-FP16-LABEL: fptou_store_f16_i32:1212; CHECK-FP16: // %bb.0: // %entry1213; CHECK-FP16-NEXT: fcvtzu w8, h01214; CHECK-FP16-NEXT: str w8, [x0]1215; CHECK-FP16-NEXT: ret1216;1217; CHECK-NOFP16-GI-LABEL: fptou_store_f16_i32:1218; CHECK-NOFP16-GI: // %bb.0: // %entry1219; CHECK-NOFP16-GI-NEXT: fcvt s0, h01220; CHECK-NOFP16-GI-NEXT: fcvtzu w8, s01221; CHECK-NOFP16-GI-NEXT: str w8, [x0]1222; CHECK-NOFP16-GI-NEXT: ret1223entry:1224 %c = fptoui half %a to i321225 store i32 %c, ptr %p1226 ret void1227}1228 1229define void @fptos_store_f16_i16(half %a, ptr %p) {1230; CHECK-NOFP16-SD-LABEL: fptos_store_f16_i16:1231; CHECK-NOFP16-SD: // %bb.0: // %entry1232; CHECK-NOFP16-SD-NEXT: fcvt s0, h01233; CHECK-NOFP16-SD-NEXT: fcvtzs s0, s01234; CHECK-NOFP16-SD-NEXT: str h0, [x0]1235; CHECK-NOFP16-SD-NEXT: ret1236;1237; CHECK-FP16-LABEL: fptos_store_f16_i16:1238; CHECK-FP16: // %bb.0: // %entry1239; CHECK-FP16-NEXT: fcvtzs w8, h01240; CHECK-FP16-NEXT: strh w8, [x0]1241; CHECK-FP16-NEXT: ret1242;1243; CHECK-NOFP16-GI-LABEL: fptos_store_f16_i16:1244; CHECK-NOFP16-GI: // %bb.0: // %entry1245; CHECK-NOFP16-GI-NEXT: fcvt s0, h01246; CHECK-NOFP16-GI-NEXT: fcvtzs w8, s01247; CHECK-NOFP16-GI-NEXT: strh w8, [x0]1248; CHECK-NOFP16-GI-NEXT: ret1249entry:1250 %c = fptosi half %a to i161251 store i16 %c, ptr %p1252 ret void1253}1254 1255define void @fptou_store_f16_i16(half %a, ptr %p) {1256; CHECK-NOFP16-SD-LABEL: fptou_store_f16_i16:1257; CHECK-NOFP16-SD: // %bb.0: // %entry1258; CHECK-NOFP16-SD-NEXT: fcvt s0, h01259; CHECK-NOFP16-SD-NEXT: fcvtzs s0, s01260; CHECK-NOFP16-SD-NEXT: str h0, [x0]1261; CHECK-NOFP16-SD-NEXT: ret1262;1263; CHECK-FP16-SD-LABEL: fptou_store_f16_i16:1264; CHECK-FP16-SD: // %bb.0: // %entry1265; CHECK-FP16-SD-NEXT: fcvtzs w8, h01266; CHECK-FP16-SD-NEXT: strh w8, [x0]1267; CHECK-FP16-SD-NEXT: ret1268;1269; CHECK-NOFP16-GI-LABEL: fptou_store_f16_i16:1270; CHECK-NOFP16-GI: // %bb.0: // %entry1271; CHECK-NOFP16-GI-NEXT: fcvt s0, h01272; CHECK-NOFP16-GI-NEXT: fcvtzu w8, s01273; CHECK-NOFP16-GI-NEXT: strh w8, [x0]1274; CHECK-NOFP16-GI-NEXT: ret1275;1276; CHECK-FP16-GI-LABEL: fptou_store_f16_i16:1277; CHECK-FP16-GI: // %bb.0: // %entry1278; CHECK-FP16-GI-NEXT: fcvtzu w8, h01279; CHECK-FP16-GI-NEXT: strh w8, [x0]1280; CHECK-FP16-GI-NEXT: ret1281entry:1282 %c = fptoui half %a to i161283 store i16 %c, ptr %p1284 ret void1285}1286 1287define void @fptos_store_f16_i8(half %a, ptr %p) {1288; CHECK-NOFP16-SD-LABEL: fptos_store_f16_i8:1289; CHECK-NOFP16-SD: // %bb.0: // %entry1290; CHECK-NOFP16-SD-NEXT: fcvt s0, h01291; CHECK-NOFP16-SD-NEXT: fcvtzs s0, s01292; CHECK-NOFP16-SD-NEXT: str b0, [x0]1293; CHECK-NOFP16-SD-NEXT: ret1294;1295; CHECK-FP16-LABEL: fptos_store_f16_i8:1296; CHECK-FP16: // %bb.0: // %entry1297; CHECK-FP16-NEXT: fcvtzs w8, h01298; CHECK-FP16-NEXT: strb w8, [x0]1299; CHECK-FP16-NEXT: ret1300;1301; CHECK-NOFP16-GI-LABEL: fptos_store_f16_i8:1302; CHECK-NOFP16-GI: // %bb.0: // %entry1303; CHECK-NOFP16-GI-NEXT: fcvt s0, h01304; CHECK-NOFP16-GI-NEXT: fcvtzs w8, s01305; CHECK-NOFP16-GI-NEXT: strb w8, [x0]1306; CHECK-NOFP16-GI-NEXT: ret1307entry:1308 %c = fptosi half %a to i81309 store i8 %c, ptr %p1310 ret void1311}1312 1313define void @fptou_store_f16_i8(half %a, ptr %p) {1314; CHECK-NOFP16-SD-LABEL: fptou_store_f16_i8:1315; CHECK-NOFP16-SD: // %bb.0: // %entry1316; CHECK-NOFP16-SD-NEXT: fcvt s0, h01317; CHECK-NOFP16-SD-NEXT: fcvtzs s0, s01318; CHECK-NOFP16-SD-NEXT: str b0, [x0]1319; CHECK-NOFP16-SD-NEXT: ret1320;1321; CHECK-FP16-SD-LABEL: fptou_store_f16_i8:1322; CHECK-FP16-SD: // %bb.0: // %entry1323; CHECK-FP16-SD-NEXT: fcvtzs w8, h01324; CHECK-FP16-SD-NEXT: strb w8, [x0]1325; CHECK-FP16-SD-NEXT: ret1326;1327; CHECK-NOFP16-GI-LABEL: fptou_store_f16_i8:1328; CHECK-NOFP16-GI: // %bb.0: // %entry1329; CHECK-NOFP16-GI-NEXT: fcvt s0, h01330; CHECK-NOFP16-GI-NEXT: fcvtzu w8, s01331; CHECK-NOFP16-GI-NEXT: strb w8, [x0]1332; CHECK-NOFP16-GI-NEXT: ret1333;1334; CHECK-FP16-GI-LABEL: fptou_store_f16_i8:1335; CHECK-FP16-GI: // %bb.0: // %entry1336; CHECK-FP16-GI-NEXT: fcvtzu w8, h01337; CHECK-FP16-GI-NEXT: strb w8, [x0]1338; CHECK-FP16-GI-NEXT: ret1339entry:1340 %c = fptoui half %a to i81341 store i8 %c, ptr %p1342 ret void1343}1344 1345define <2 x i64> @fptos_v2f64_v2i64(<2 x double> %a) {1346; CHECK-LABEL: fptos_v2f64_v2i64:1347; CHECK: // %bb.0: // %entry1348; CHECK-NEXT: fcvtzs v0.2d, v0.2d1349; CHECK-NEXT: ret1350entry:1351 %c = fptosi <2 x double> %a to <2 x i64>1352 ret <2 x i64> %c1353}1354 1355define <2 x i64> @fptou_v2f64_v2i64(<2 x double> %a) {1356; CHECK-LABEL: fptou_v2f64_v2i64:1357; CHECK: // %bb.0: // %entry1358; CHECK-NEXT: fcvtzu v0.2d, v0.2d1359; CHECK-NEXT: ret1360entry:1361 %c = fptoui <2 x double> %a to <2 x i64>1362 ret <2 x i64> %c1363}1364 1365define <3 x i64> @fptos_v3f64_v3i64(<3 x double> %a) {1366; CHECK-NOFP16-SD-LABEL: fptos_v3f64_v3i64:1367; CHECK-NOFP16-SD: // %bb.0: // %entry1368; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q01369; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 def $q11370; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 def $q21371; CHECK-NOFP16-SD-NEXT: mov v0.d[1], v1.d[0]1372; CHECK-NOFP16-SD-NEXT: fcvtzs v2.2d, v2.2d1373; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q21374; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d1375; CHECK-NOFP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #81376; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q01377; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q11378; CHECK-NOFP16-SD-NEXT: ret1379;1380; CHECK-FP16-SD-LABEL: fptos_v3f64_v3i64:1381; CHECK-FP16-SD: // %bb.0: // %entry1382; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q01383; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 def $q11384; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 def $q21385; CHECK-FP16-SD-NEXT: mov v0.d[1], v1.d[0]1386; CHECK-FP16-SD-NEXT: fcvtzs v2.2d, v2.2d1387; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q21388; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d1389; CHECK-FP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #81390; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q01391; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q11392; CHECK-FP16-SD-NEXT: ret1393;1394; CHECK-NOFP16-GI-LABEL: fptos_v3f64_v3i64:1395; CHECK-NOFP16-GI: // %bb.0: // %entry1396; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q01397; CHECK-NOFP16-GI-NEXT: // kill: def $d1 killed $d1 def $q11398; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 def $q21399; CHECK-NOFP16-GI-NEXT: mov v0.d[1], v1.d[0]1400; CHECK-NOFP16-GI-NEXT: fcvtzs v2.2d, v2.2d1401; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q21402; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v0.2d1403; CHECK-NOFP16-GI-NEXT: mov d1, v0.d[1]1404; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q01405; CHECK-NOFP16-GI-NEXT: ret1406;1407; CHECK-FP16-GI-LABEL: fptos_v3f64_v3i64:1408; CHECK-FP16-GI: // %bb.0: // %entry1409; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q01410; CHECK-FP16-GI-NEXT: // kill: def $d1 killed $d1 def $q11411; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 def $q21412; CHECK-FP16-GI-NEXT: mov v0.d[1], v1.d[0]1413; CHECK-FP16-GI-NEXT: fcvtzs v2.2d, v2.2d1414; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q21415; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v0.2d1416; CHECK-FP16-GI-NEXT: mov d1, v0.d[1]1417; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q01418; CHECK-FP16-GI-NEXT: ret1419entry:1420 %c = fptosi <3 x double> %a to <3 x i64>1421 ret <3 x i64> %c1422}1423 1424define <3 x i64> @fptou_v3f64_v3i64(<3 x double> %a) {1425; CHECK-NOFP16-SD-LABEL: fptou_v3f64_v3i64:1426; CHECK-NOFP16-SD: // %bb.0: // %entry1427; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q01428; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 def $q11429; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 def $q21430; CHECK-NOFP16-SD-NEXT: mov v0.d[1], v1.d[0]1431; CHECK-NOFP16-SD-NEXT: fcvtzu v2.2d, v2.2d1432; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q21433; CHECK-NOFP16-SD-NEXT: fcvtzu v0.2d, v0.2d1434; CHECK-NOFP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #81435; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q01436; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q11437; CHECK-NOFP16-SD-NEXT: ret1438;1439; CHECK-FP16-SD-LABEL: fptou_v3f64_v3i64:1440; CHECK-FP16-SD: // %bb.0: // %entry1441; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q01442; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 def $q11443; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 def $q21444; CHECK-FP16-SD-NEXT: mov v0.d[1], v1.d[0]1445; CHECK-FP16-SD-NEXT: fcvtzu v2.2d, v2.2d1446; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q21447; CHECK-FP16-SD-NEXT: fcvtzu v0.2d, v0.2d1448; CHECK-FP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #81449; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q01450; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q11451; CHECK-FP16-SD-NEXT: ret1452;1453; CHECK-NOFP16-GI-LABEL: fptou_v3f64_v3i64:1454; CHECK-NOFP16-GI: // %bb.0: // %entry1455; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q01456; CHECK-NOFP16-GI-NEXT: // kill: def $d1 killed $d1 def $q11457; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 def $q21458; CHECK-NOFP16-GI-NEXT: mov v0.d[1], v1.d[0]1459; CHECK-NOFP16-GI-NEXT: fcvtzu v2.2d, v2.2d1460; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q21461; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v0.2d1462; CHECK-NOFP16-GI-NEXT: mov d1, v0.d[1]1463; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q01464; CHECK-NOFP16-GI-NEXT: ret1465;1466; CHECK-FP16-GI-LABEL: fptou_v3f64_v3i64:1467; CHECK-FP16-GI: // %bb.0: // %entry1468; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q01469; CHECK-FP16-GI-NEXT: // kill: def $d1 killed $d1 def $q11470; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 def $q21471; CHECK-FP16-GI-NEXT: mov v0.d[1], v1.d[0]1472; CHECK-FP16-GI-NEXT: fcvtzu v2.2d, v2.2d1473; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q21474; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v0.2d1475; CHECK-FP16-GI-NEXT: mov d1, v0.d[1]1476; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q01477; CHECK-FP16-GI-NEXT: ret1478entry:1479 %c = fptoui <3 x double> %a to <3 x i64>1480 ret <3 x i64> %c1481}1482 1483define <4 x i64> @fptos_v4f64_v4i64(<4 x double> %a) {1484; CHECK-LABEL: fptos_v4f64_v4i64:1485; CHECK: // %bb.0: // %entry1486; CHECK-NEXT: fcvtzs v0.2d, v0.2d1487; CHECK-NEXT: fcvtzs v1.2d, v1.2d1488; CHECK-NEXT: ret1489entry:1490 %c = fptosi <4 x double> %a to <4 x i64>1491 ret <4 x i64> %c1492}1493 1494define <4 x i64> @fptou_v4f64_v4i64(<4 x double> %a) {1495; CHECK-LABEL: fptou_v4f64_v4i64:1496; CHECK: // %bb.0: // %entry1497; CHECK-NEXT: fcvtzu v0.2d, v0.2d1498; CHECK-NEXT: fcvtzu v1.2d, v1.2d1499; CHECK-NEXT: ret1500entry:1501 %c = fptoui <4 x double> %a to <4 x i64>1502 ret <4 x i64> %c1503}1504 1505define <2 x i32> @fptos_v2f64_v2i32(<2 x double> %a) {1506; CHECK-LABEL: fptos_v2f64_v2i32:1507; CHECK: // %bb.0: // %entry1508; CHECK-NEXT: fcvtzs v0.2d, v0.2d1509; CHECK-NEXT: xtn v0.2s, v0.2d1510; CHECK-NEXT: ret1511entry:1512 %c = fptosi <2 x double> %a to <2 x i32>1513 ret <2 x i32> %c1514}1515 1516define <2 x i32> @fptou_v2f64_v2i32(<2 x double> %a) {1517; CHECK-LABEL: fptou_v2f64_v2i32:1518; CHECK: // %bb.0: // %entry1519; CHECK-NEXT: fcvtzu v0.2d, v0.2d1520; CHECK-NEXT: xtn v0.2s, v0.2d1521; CHECK-NEXT: ret1522entry:1523 %c = fptoui <2 x double> %a to <2 x i32>1524 ret <2 x i32> %c1525}1526 1527define <3 x i32> @fptos_v3f64_v3i32(<3 x double> %a) {1528; CHECK-LABEL: fptos_v3f64_v3i32:1529; CHECK: // %bb.0: // %entry1530; CHECK-NEXT: // kill: def $d0 killed $d0 def $q01531; CHECK-NEXT: // kill: def $d1 killed $d1 def $q11532; CHECK-NEXT: // kill: def $d2 killed $d2 def $q21533; CHECK-NEXT: mov v0.d[1], v1.d[0]1534; CHECK-NEXT: fcvtzs v1.2d, v2.2d1535; CHECK-NEXT: fcvtzs v0.2d, v0.2d1536; CHECK-NEXT: uzp1 v0.4s, v0.4s, v1.4s1537; CHECK-NEXT: ret1538entry:1539 %c = fptosi <3 x double> %a to <3 x i32>1540 ret <3 x i32> %c1541}1542 1543define <3 x i32> @fptou_v3f64_v3i32(<3 x double> %a) {1544; CHECK-LABEL: fptou_v3f64_v3i32:1545; CHECK: // %bb.0: // %entry1546; CHECK-NEXT: // kill: def $d0 killed $d0 def $q01547; CHECK-NEXT: // kill: def $d1 killed $d1 def $q11548; CHECK-NEXT: // kill: def $d2 killed $d2 def $q21549; CHECK-NEXT: mov v0.d[1], v1.d[0]1550; CHECK-NEXT: fcvtzu v1.2d, v2.2d1551; CHECK-NEXT: fcvtzu v0.2d, v0.2d1552; CHECK-NEXT: uzp1 v0.4s, v0.4s, v1.4s1553; CHECK-NEXT: ret1554entry:1555 %c = fptoui <3 x double> %a to <3 x i32>1556 ret <3 x i32> %c1557}1558 1559define <4 x i32> @fptos_v4f64_v4i32(<4 x double> %a) {1560; CHECK-NOFP16-SD-LABEL: fptos_v4f64_v4i32:1561; CHECK-NOFP16-SD: // %bb.0: // %entry1562; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d1563; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d1564; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s1565; CHECK-NOFP16-SD-NEXT: ret1566;1567; CHECK-FP16-SD-LABEL: fptos_v4f64_v4i32:1568; CHECK-FP16-SD: // %bb.0: // %entry1569; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d1570; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d1571; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s1572; CHECK-FP16-SD-NEXT: ret1573;1574; CHECK-NOFP16-GI-LABEL: fptos_v4f64_v4i32:1575; CHECK-NOFP16-GI: // %bb.0: // %entry1576; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v0.2d1577; CHECK-NOFP16-GI-NEXT: fcvtzs v1.2d, v1.2d1578; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1579; CHECK-NOFP16-GI-NEXT: ret1580;1581; CHECK-FP16-GI-LABEL: fptos_v4f64_v4i32:1582; CHECK-FP16-GI: // %bb.0: // %entry1583; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v0.2d1584; CHECK-FP16-GI-NEXT: fcvtzs v1.2d, v1.2d1585; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1586; CHECK-FP16-GI-NEXT: ret1587entry:1588 %c = fptosi <4 x double> %a to <4 x i32>1589 ret <4 x i32> %c1590}1591 1592define <4 x i32> @fptou_v4f64_v4i32(<4 x double> %a) {1593; CHECK-NOFP16-SD-LABEL: fptou_v4f64_v4i32:1594; CHECK-NOFP16-SD: // %bb.0: // %entry1595; CHECK-NOFP16-SD-NEXT: fcvtzu v1.2d, v1.2d1596; CHECK-NOFP16-SD-NEXT: fcvtzu v0.2d, v0.2d1597; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s1598; CHECK-NOFP16-SD-NEXT: ret1599;1600; CHECK-FP16-SD-LABEL: fptou_v4f64_v4i32:1601; CHECK-FP16-SD: // %bb.0: // %entry1602; CHECK-FP16-SD-NEXT: fcvtzu v1.2d, v1.2d1603; CHECK-FP16-SD-NEXT: fcvtzu v0.2d, v0.2d1604; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s1605; CHECK-FP16-SD-NEXT: ret1606;1607; CHECK-NOFP16-GI-LABEL: fptou_v4f64_v4i32:1608; CHECK-NOFP16-GI: // %bb.0: // %entry1609; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v0.2d1610; CHECK-NOFP16-GI-NEXT: fcvtzu v1.2d, v1.2d1611; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1612; CHECK-NOFP16-GI-NEXT: ret1613;1614; CHECK-FP16-GI-LABEL: fptou_v4f64_v4i32:1615; CHECK-FP16-GI: // %bb.0: // %entry1616; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v0.2d1617; CHECK-FP16-GI-NEXT: fcvtzu v1.2d, v1.2d1618; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1619; CHECK-FP16-GI-NEXT: ret1620entry:1621 %c = fptoui <4 x double> %a to <4 x i32>1622 ret <4 x i32> %c1623}1624 1625define <8 x i32> @fptos_v8f64_v8i32(<8 x double> %a) {1626; CHECK-NOFP16-SD-LABEL: fptos_v8f64_v8i32:1627; CHECK-NOFP16-SD: // %bb.0: // %entry1628; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d1629; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d1630; CHECK-NOFP16-SD-NEXT: fcvtzs v3.2d, v3.2d1631; CHECK-NOFP16-SD-NEXT: fcvtzs v2.2d, v2.2d1632; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s1633; CHECK-NOFP16-SD-NEXT: uzp1 v1.4s, v2.4s, v3.4s1634; CHECK-NOFP16-SD-NEXT: ret1635;1636; CHECK-FP16-SD-LABEL: fptos_v8f64_v8i32:1637; CHECK-FP16-SD: // %bb.0: // %entry1638; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d1639; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d1640; CHECK-FP16-SD-NEXT: fcvtzs v3.2d, v3.2d1641; CHECK-FP16-SD-NEXT: fcvtzs v2.2d, v2.2d1642; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s1643; CHECK-FP16-SD-NEXT: uzp1 v1.4s, v2.4s, v3.4s1644; CHECK-FP16-SD-NEXT: ret1645;1646; CHECK-NOFP16-GI-LABEL: fptos_v8f64_v8i32:1647; CHECK-NOFP16-GI: // %bb.0: // %entry1648; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v0.2d1649; CHECK-NOFP16-GI-NEXT: fcvtzs v1.2d, v1.2d1650; CHECK-NOFP16-GI-NEXT: fcvtzs v2.2d, v2.2d1651; CHECK-NOFP16-GI-NEXT: fcvtzs v3.2d, v3.2d1652; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1653; CHECK-NOFP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s1654; CHECK-NOFP16-GI-NEXT: ret1655;1656; CHECK-FP16-GI-LABEL: fptos_v8f64_v8i32:1657; CHECK-FP16-GI: // %bb.0: // %entry1658; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v0.2d1659; CHECK-FP16-GI-NEXT: fcvtzs v1.2d, v1.2d1660; CHECK-FP16-GI-NEXT: fcvtzs v2.2d, v2.2d1661; CHECK-FP16-GI-NEXT: fcvtzs v3.2d, v3.2d1662; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1663; CHECK-FP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s1664; CHECK-FP16-GI-NEXT: ret1665entry:1666 %c = fptosi <8 x double> %a to <8 x i32>1667 ret <8 x i32> %c1668}1669 1670define <8 x i32> @fptou_v8f64_v8i32(<8 x double> %a) {1671; CHECK-NOFP16-SD-LABEL: fptou_v8f64_v8i32:1672; CHECK-NOFP16-SD: // %bb.0: // %entry1673; CHECK-NOFP16-SD-NEXT: fcvtzu v1.2d, v1.2d1674; CHECK-NOFP16-SD-NEXT: fcvtzu v0.2d, v0.2d1675; CHECK-NOFP16-SD-NEXT: fcvtzu v3.2d, v3.2d1676; CHECK-NOFP16-SD-NEXT: fcvtzu v2.2d, v2.2d1677; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s1678; CHECK-NOFP16-SD-NEXT: uzp1 v1.4s, v2.4s, v3.4s1679; CHECK-NOFP16-SD-NEXT: ret1680;1681; CHECK-FP16-SD-LABEL: fptou_v8f64_v8i32:1682; CHECK-FP16-SD: // %bb.0: // %entry1683; CHECK-FP16-SD-NEXT: fcvtzu v1.2d, v1.2d1684; CHECK-FP16-SD-NEXT: fcvtzu v0.2d, v0.2d1685; CHECK-FP16-SD-NEXT: fcvtzu v3.2d, v3.2d1686; CHECK-FP16-SD-NEXT: fcvtzu v2.2d, v2.2d1687; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s1688; CHECK-FP16-SD-NEXT: uzp1 v1.4s, v2.4s, v3.4s1689; CHECK-FP16-SD-NEXT: ret1690;1691; CHECK-NOFP16-GI-LABEL: fptou_v8f64_v8i32:1692; CHECK-NOFP16-GI: // %bb.0: // %entry1693; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v0.2d1694; CHECK-NOFP16-GI-NEXT: fcvtzu v1.2d, v1.2d1695; CHECK-NOFP16-GI-NEXT: fcvtzu v2.2d, v2.2d1696; CHECK-NOFP16-GI-NEXT: fcvtzu v3.2d, v3.2d1697; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1698; CHECK-NOFP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s1699; CHECK-NOFP16-GI-NEXT: ret1700;1701; CHECK-FP16-GI-LABEL: fptou_v8f64_v8i32:1702; CHECK-FP16-GI: // %bb.0: // %entry1703; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v0.2d1704; CHECK-FP16-GI-NEXT: fcvtzu v1.2d, v1.2d1705; CHECK-FP16-GI-NEXT: fcvtzu v2.2d, v2.2d1706; CHECK-FP16-GI-NEXT: fcvtzu v3.2d, v3.2d1707; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1708; CHECK-FP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s1709; CHECK-FP16-GI-NEXT: ret1710entry:1711 %c = fptoui <8 x double> %a to <8 x i32>1712 ret <8 x i32> %c1713}1714 1715define <2 x i16> @fptos_v2f64_v2i16(<2 x double> %a) {1716; CHECK-LABEL: fptos_v2f64_v2i16:1717; CHECK: // %bb.0: // %entry1718; CHECK-NEXT: fcvtzs v0.2d, v0.2d1719; CHECK-NEXT: xtn v0.2s, v0.2d1720; CHECK-NEXT: ret1721entry:1722 %c = fptosi <2 x double> %a to <2 x i16>1723 ret <2 x i16> %c1724}1725 1726define <2 x i16> @fptou_v2f64_v2i16(<2 x double> %a) {1727; CHECK-NOFP16-SD-LABEL: fptou_v2f64_v2i16:1728; CHECK-NOFP16-SD: // %bb.0: // %entry1729; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d1730; CHECK-NOFP16-SD-NEXT: xtn v0.2s, v0.2d1731; CHECK-NOFP16-SD-NEXT: ret1732;1733; CHECK-FP16-SD-LABEL: fptou_v2f64_v2i16:1734; CHECK-FP16-SD: // %bb.0: // %entry1735; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d1736; CHECK-FP16-SD-NEXT: xtn v0.2s, v0.2d1737; CHECK-FP16-SD-NEXT: ret1738;1739; CHECK-NOFP16-GI-LABEL: fptou_v2f64_v2i16:1740; CHECK-NOFP16-GI: // %bb.0: // %entry1741; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v0.2d1742; CHECK-NOFP16-GI-NEXT: xtn v0.2s, v0.2d1743; CHECK-NOFP16-GI-NEXT: ret1744;1745; CHECK-FP16-GI-LABEL: fptou_v2f64_v2i16:1746; CHECK-FP16-GI: // %bb.0: // %entry1747; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v0.2d1748; CHECK-FP16-GI-NEXT: xtn v0.2s, v0.2d1749; CHECK-FP16-GI-NEXT: ret1750entry:1751 %c = fptoui <2 x double> %a to <2 x i16>1752 ret <2 x i16> %c1753}1754 1755define <3 x i16> @fptos_v3f64_v3i16(<3 x double> %a) {1756; CHECK-LABEL: fptos_v3f64_v3i16:1757; CHECK: // %bb.0: // %entry1758; CHECK-NEXT: // kill: def $d0 killed $d0 def $q01759; CHECK-NEXT: // kill: def $d1 killed $d1 def $q11760; CHECK-NEXT: // kill: def $d2 killed $d2 def $q21761; CHECK-NEXT: mov v0.d[1], v1.d[0]1762; CHECK-NEXT: fcvtzs v1.2d, v2.2d1763; CHECK-NEXT: fcvtzs v0.2d, v0.2d1764; CHECK-NEXT: uzp1 v0.4s, v0.4s, v1.4s1765; CHECK-NEXT: xtn v0.4h, v0.4s1766; CHECK-NEXT: ret1767entry:1768 %c = fptosi <3 x double> %a to <3 x i16>1769 ret <3 x i16> %c1770}1771 1772define <3 x i16> @fptou_v3f64_v3i16(<3 x double> %a) {1773; CHECK-NOFP16-SD-LABEL: fptou_v3f64_v3i16:1774; CHECK-NOFP16-SD: // %bb.0: // %entry1775; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q01776; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 def $q11777; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 def $q21778; CHECK-NOFP16-SD-NEXT: mov v0.d[1], v1.d[0]1779; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v2.2d1780; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d1781; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s1782; CHECK-NOFP16-SD-NEXT: xtn v0.4h, v0.4s1783; CHECK-NOFP16-SD-NEXT: ret1784;1785; CHECK-FP16-SD-LABEL: fptou_v3f64_v3i16:1786; CHECK-FP16-SD: // %bb.0: // %entry1787; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q01788; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 def $q11789; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 def $q21790; CHECK-FP16-SD-NEXT: mov v0.d[1], v1.d[0]1791; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v2.2d1792; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d1793; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s1794; CHECK-FP16-SD-NEXT: xtn v0.4h, v0.4s1795; CHECK-FP16-SD-NEXT: ret1796;1797; CHECK-NOFP16-GI-LABEL: fptou_v3f64_v3i16:1798; CHECK-NOFP16-GI: // %bb.0: // %entry1799; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q01800; CHECK-NOFP16-GI-NEXT: // kill: def $d1 killed $d1 def $q11801; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 def $q21802; CHECK-NOFP16-GI-NEXT: mov v0.d[1], v1.d[0]1803; CHECK-NOFP16-GI-NEXT: fcvtzu v1.2d, v2.2d1804; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v0.2d1805; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1806; CHECK-NOFP16-GI-NEXT: xtn v0.4h, v0.4s1807; CHECK-NOFP16-GI-NEXT: ret1808;1809; CHECK-FP16-GI-LABEL: fptou_v3f64_v3i16:1810; CHECK-FP16-GI: // %bb.0: // %entry1811; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q01812; CHECK-FP16-GI-NEXT: // kill: def $d1 killed $d1 def $q11813; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 def $q21814; CHECK-FP16-GI-NEXT: mov v0.d[1], v1.d[0]1815; CHECK-FP16-GI-NEXT: fcvtzu v1.2d, v2.2d1816; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v0.2d1817; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1818; CHECK-FP16-GI-NEXT: xtn v0.4h, v0.4s1819; CHECK-FP16-GI-NEXT: ret1820entry:1821 %c = fptoui <3 x double> %a to <3 x i16>1822 ret <3 x i16> %c1823}1824 1825define <4 x i16> @fptos_v4f64_v4i16(<4 x double> %a) {1826; CHECK-NOFP16-SD-LABEL: fptos_v4f64_v4i16:1827; CHECK-NOFP16-SD: // %bb.0: // %entry1828; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d1829; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d1830; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s1831; CHECK-NOFP16-SD-NEXT: xtn v0.4h, v0.4s1832; CHECK-NOFP16-SD-NEXT: ret1833;1834; CHECK-FP16-SD-LABEL: fptos_v4f64_v4i16:1835; CHECK-FP16-SD: // %bb.0: // %entry1836; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d1837; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d1838; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s1839; CHECK-FP16-SD-NEXT: xtn v0.4h, v0.4s1840; CHECK-FP16-SD-NEXT: ret1841;1842; CHECK-NOFP16-GI-LABEL: fptos_v4f64_v4i16:1843; CHECK-NOFP16-GI: // %bb.0: // %entry1844; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v0.2d1845; CHECK-NOFP16-GI-NEXT: fcvtzs v1.2d, v1.2d1846; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1847; CHECK-NOFP16-GI-NEXT: xtn v0.4h, v0.4s1848; CHECK-NOFP16-GI-NEXT: ret1849;1850; CHECK-FP16-GI-LABEL: fptos_v4f64_v4i16:1851; CHECK-FP16-GI: // %bb.0: // %entry1852; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v0.2d1853; CHECK-FP16-GI-NEXT: fcvtzs v1.2d, v1.2d1854; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1855; CHECK-FP16-GI-NEXT: xtn v0.4h, v0.4s1856; CHECK-FP16-GI-NEXT: ret1857entry:1858 %c = fptosi <4 x double> %a to <4 x i16>1859 ret <4 x i16> %c1860}1861 1862define <4 x i16> @fptou_v4f64_v4i16(<4 x double> %a) {1863; CHECK-NOFP16-SD-LABEL: fptou_v4f64_v4i16:1864; CHECK-NOFP16-SD: // %bb.0: // %entry1865; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d1866; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d1867; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s1868; CHECK-NOFP16-SD-NEXT: xtn v0.4h, v0.4s1869; CHECK-NOFP16-SD-NEXT: ret1870;1871; CHECK-FP16-SD-LABEL: fptou_v4f64_v4i16:1872; CHECK-FP16-SD: // %bb.0: // %entry1873; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d1874; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d1875; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s1876; CHECK-FP16-SD-NEXT: xtn v0.4h, v0.4s1877; CHECK-FP16-SD-NEXT: ret1878;1879; CHECK-NOFP16-GI-LABEL: fptou_v4f64_v4i16:1880; CHECK-NOFP16-GI: // %bb.0: // %entry1881; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v0.2d1882; CHECK-NOFP16-GI-NEXT: fcvtzu v1.2d, v1.2d1883; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1884; CHECK-NOFP16-GI-NEXT: xtn v0.4h, v0.4s1885; CHECK-NOFP16-GI-NEXT: ret1886;1887; CHECK-FP16-GI-LABEL: fptou_v4f64_v4i16:1888; CHECK-FP16-GI: // %bb.0: // %entry1889; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v0.2d1890; CHECK-FP16-GI-NEXT: fcvtzu v1.2d, v1.2d1891; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1892; CHECK-FP16-GI-NEXT: xtn v0.4h, v0.4s1893; CHECK-FP16-GI-NEXT: ret1894entry:1895 %c = fptoui <4 x double> %a to <4 x i16>1896 ret <4 x i16> %c1897}1898 1899define <8 x i16> @fptos_v8f64_v8i16(<8 x double> %a) {1900; CHECK-NOFP16-SD-LABEL: fptos_v8f64_v8i16:1901; CHECK-NOFP16-SD: // %bb.0: // %entry1902; CHECK-NOFP16-SD-NEXT: fcvtzs v3.2d, v3.2d1903; CHECK-NOFP16-SD-NEXT: fcvtzs v2.2d, v2.2d1904; CHECK-NOFP16-SD-NEXT: adrp x8, .LCPI84_01905; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d1906; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d1907; CHECK-NOFP16-SD-NEXT: xtn v6.2s, v3.2d1908; CHECK-NOFP16-SD-NEXT: xtn v5.2s, v2.2d1909; CHECK-NOFP16-SD-NEXT: xtn v4.2s, v1.2d1910; CHECK-NOFP16-SD-NEXT: xtn v3.2s, v0.2d1911; CHECK-NOFP16-SD-NEXT: ldr q0, [x8, :lo12:.LCPI84_0]1912; CHECK-NOFP16-SD-NEXT: tbl v0.16b, { v3.16b, v4.16b, v5.16b, v6.16b }, v0.16b1913; CHECK-NOFP16-SD-NEXT: ret1914;1915; CHECK-FP16-SD-LABEL: fptos_v8f64_v8i16:1916; CHECK-FP16-SD: // %bb.0: // %entry1917; CHECK-FP16-SD-NEXT: fcvtzs v3.2d, v3.2d1918; CHECK-FP16-SD-NEXT: fcvtzs v2.2d, v2.2d1919; CHECK-FP16-SD-NEXT: adrp x8, .LCPI84_01920; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d1921; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d1922; CHECK-FP16-SD-NEXT: xtn v6.2s, v3.2d1923; CHECK-FP16-SD-NEXT: xtn v5.2s, v2.2d1924; CHECK-FP16-SD-NEXT: xtn v4.2s, v1.2d1925; CHECK-FP16-SD-NEXT: xtn v3.2s, v0.2d1926; CHECK-FP16-SD-NEXT: ldr q0, [x8, :lo12:.LCPI84_0]1927; CHECK-FP16-SD-NEXT: tbl v0.16b, { v3.16b, v4.16b, v5.16b, v6.16b }, v0.16b1928; CHECK-FP16-SD-NEXT: ret1929;1930; CHECK-NOFP16-GI-LABEL: fptos_v8f64_v8i16:1931; CHECK-NOFP16-GI: // %bb.0: // %entry1932; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v0.2d1933; CHECK-NOFP16-GI-NEXT: fcvtzs v1.2d, v1.2d1934; CHECK-NOFP16-GI-NEXT: fcvtzs v2.2d, v2.2d1935; CHECK-NOFP16-GI-NEXT: fcvtzs v3.2d, v3.2d1936; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1937; CHECK-NOFP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s1938; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h1939; CHECK-NOFP16-GI-NEXT: ret1940;1941; CHECK-FP16-GI-LABEL: fptos_v8f64_v8i16:1942; CHECK-FP16-GI: // %bb.0: // %entry1943; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v0.2d1944; CHECK-FP16-GI-NEXT: fcvtzs v1.2d, v1.2d1945; CHECK-FP16-GI-NEXT: fcvtzs v2.2d, v2.2d1946; CHECK-FP16-GI-NEXT: fcvtzs v3.2d, v3.2d1947; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1948; CHECK-FP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s1949; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h1950; CHECK-FP16-GI-NEXT: ret1951entry:1952 %c = fptosi <8 x double> %a to <8 x i16>1953 ret <8 x i16> %c1954}1955 1956define <8 x i16> @fptou_v8f64_v8i16(<8 x double> %a) {1957; CHECK-NOFP16-SD-LABEL: fptou_v8f64_v8i16:1958; CHECK-NOFP16-SD: // %bb.0: // %entry1959; CHECK-NOFP16-SD-NEXT: fcvtzs v3.2d, v3.2d1960; CHECK-NOFP16-SD-NEXT: fcvtzs v2.2d, v2.2d1961; CHECK-NOFP16-SD-NEXT: adrp x8, .LCPI85_01962; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d1963; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d1964; CHECK-NOFP16-SD-NEXT: xtn v6.2s, v3.2d1965; CHECK-NOFP16-SD-NEXT: xtn v5.2s, v2.2d1966; CHECK-NOFP16-SD-NEXT: xtn v4.2s, v1.2d1967; CHECK-NOFP16-SD-NEXT: xtn v3.2s, v0.2d1968; CHECK-NOFP16-SD-NEXT: ldr q0, [x8, :lo12:.LCPI85_0]1969; CHECK-NOFP16-SD-NEXT: tbl v0.16b, { v3.16b, v4.16b, v5.16b, v6.16b }, v0.16b1970; CHECK-NOFP16-SD-NEXT: ret1971;1972; CHECK-FP16-SD-LABEL: fptou_v8f64_v8i16:1973; CHECK-FP16-SD: // %bb.0: // %entry1974; CHECK-FP16-SD-NEXT: fcvtzs v3.2d, v3.2d1975; CHECK-FP16-SD-NEXT: fcvtzs v2.2d, v2.2d1976; CHECK-FP16-SD-NEXT: adrp x8, .LCPI85_01977; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d1978; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d1979; CHECK-FP16-SD-NEXT: xtn v6.2s, v3.2d1980; CHECK-FP16-SD-NEXT: xtn v5.2s, v2.2d1981; CHECK-FP16-SD-NEXT: xtn v4.2s, v1.2d1982; CHECK-FP16-SD-NEXT: xtn v3.2s, v0.2d1983; CHECK-FP16-SD-NEXT: ldr q0, [x8, :lo12:.LCPI85_0]1984; CHECK-FP16-SD-NEXT: tbl v0.16b, { v3.16b, v4.16b, v5.16b, v6.16b }, v0.16b1985; CHECK-FP16-SD-NEXT: ret1986;1987; CHECK-NOFP16-GI-LABEL: fptou_v8f64_v8i16:1988; CHECK-NOFP16-GI: // %bb.0: // %entry1989; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v0.2d1990; CHECK-NOFP16-GI-NEXT: fcvtzu v1.2d, v1.2d1991; CHECK-NOFP16-GI-NEXT: fcvtzu v2.2d, v2.2d1992; CHECK-NOFP16-GI-NEXT: fcvtzu v3.2d, v3.2d1993; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s1994; CHECK-NOFP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s1995; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h1996; CHECK-NOFP16-GI-NEXT: ret1997;1998; CHECK-FP16-GI-LABEL: fptou_v8f64_v8i16:1999; CHECK-FP16-GI: // %bb.0: // %entry2000; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v0.2d2001; CHECK-FP16-GI-NEXT: fcvtzu v1.2d, v1.2d2002; CHECK-FP16-GI-NEXT: fcvtzu v2.2d, v2.2d2003; CHECK-FP16-GI-NEXT: fcvtzu v3.2d, v3.2d2004; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2005; CHECK-FP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s2006; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h2007; CHECK-FP16-GI-NEXT: ret2008entry:2009 %c = fptoui <8 x double> %a to <8 x i16>2010 ret <8 x i16> %c2011}2012 2013define <16 x i16> @fptos_v16f64_v16i16(<16 x double> %a) {2014; CHECK-NOFP16-SD-LABEL: fptos_v16f64_v16i16:2015; CHECK-NOFP16-SD: // %bb.0: // %entry2016; CHECK-NOFP16-SD-NEXT: fcvtzs v3.2d, v3.2d2017; CHECK-NOFP16-SD-NEXT: fcvtzs v7.2d, v7.2d2018; CHECK-NOFP16-SD-NEXT: adrp x8, .LCPI86_02019; CHECK-NOFP16-SD-NEXT: fcvtzs v2.2d, v2.2d2020; CHECK-NOFP16-SD-NEXT: fcvtzs v6.2d, v6.2d2021; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d2022; CHECK-NOFP16-SD-NEXT: fcvtzs v5.2d, v5.2d2023; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d2024; CHECK-NOFP16-SD-NEXT: fcvtzs v4.2d, v4.2d2025; CHECK-NOFP16-SD-NEXT: xtn v19.2s, v3.2d2026; CHECK-NOFP16-SD-NEXT: xtn v23.2s, v7.2d2027; CHECK-NOFP16-SD-NEXT: xtn v18.2s, v2.2d2028; CHECK-NOFP16-SD-NEXT: xtn v22.2s, v6.2d2029; CHECK-NOFP16-SD-NEXT: xtn v17.2s, v1.2d2030; CHECK-NOFP16-SD-NEXT: xtn v21.2s, v5.2d2031; CHECK-NOFP16-SD-NEXT: ldr q1, [x8, :lo12:.LCPI86_0]2032; CHECK-NOFP16-SD-NEXT: xtn v16.2s, v0.2d2033; CHECK-NOFP16-SD-NEXT: xtn v20.2s, v4.2d2034; CHECK-NOFP16-SD-NEXT: tbl v0.16b, { v16.16b, v17.16b, v18.16b, v19.16b }, v1.16b2035; CHECK-NOFP16-SD-NEXT: tbl v1.16b, { v20.16b, v21.16b, v22.16b, v23.16b }, v1.16b2036; CHECK-NOFP16-SD-NEXT: ret2037;2038; CHECK-FP16-SD-LABEL: fptos_v16f64_v16i16:2039; CHECK-FP16-SD: // %bb.0: // %entry2040; CHECK-FP16-SD-NEXT: fcvtzs v3.2d, v3.2d2041; CHECK-FP16-SD-NEXT: fcvtzs v7.2d, v7.2d2042; CHECK-FP16-SD-NEXT: adrp x8, .LCPI86_02043; CHECK-FP16-SD-NEXT: fcvtzs v2.2d, v2.2d2044; CHECK-FP16-SD-NEXT: fcvtzs v6.2d, v6.2d2045; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d2046; CHECK-FP16-SD-NEXT: fcvtzs v5.2d, v5.2d2047; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d2048; CHECK-FP16-SD-NEXT: fcvtzs v4.2d, v4.2d2049; CHECK-FP16-SD-NEXT: xtn v19.2s, v3.2d2050; CHECK-FP16-SD-NEXT: xtn v23.2s, v7.2d2051; CHECK-FP16-SD-NEXT: xtn v18.2s, v2.2d2052; CHECK-FP16-SD-NEXT: xtn v22.2s, v6.2d2053; CHECK-FP16-SD-NEXT: xtn v17.2s, v1.2d2054; CHECK-FP16-SD-NEXT: xtn v21.2s, v5.2d2055; CHECK-FP16-SD-NEXT: ldr q1, [x8, :lo12:.LCPI86_0]2056; CHECK-FP16-SD-NEXT: xtn v16.2s, v0.2d2057; CHECK-FP16-SD-NEXT: xtn v20.2s, v4.2d2058; CHECK-FP16-SD-NEXT: tbl v0.16b, { v16.16b, v17.16b, v18.16b, v19.16b }, v1.16b2059; CHECK-FP16-SD-NEXT: tbl v1.16b, { v20.16b, v21.16b, v22.16b, v23.16b }, v1.16b2060; CHECK-FP16-SD-NEXT: ret2061;2062; CHECK-NOFP16-GI-LABEL: fptos_v16f64_v16i16:2063; CHECK-NOFP16-GI: // %bb.0: // %entry2064; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v0.2d2065; CHECK-NOFP16-GI-NEXT: fcvtzs v1.2d, v1.2d2066; CHECK-NOFP16-GI-NEXT: fcvtzs v2.2d, v2.2d2067; CHECK-NOFP16-GI-NEXT: fcvtzs v3.2d, v3.2d2068; CHECK-NOFP16-GI-NEXT: fcvtzs v4.2d, v4.2d2069; CHECK-NOFP16-GI-NEXT: fcvtzs v5.2d, v5.2d2070; CHECK-NOFP16-GI-NEXT: fcvtzs v6.2d, v6.2d2071; CHECK-NOFP16-GI-NEXT: fcvtzs v7.2d, v7.2d2072; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2073; CHECK-NOFP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s2074; CHECK-NOFP16-GI-NEXT: uzp1 v2.4s, v4.4s, v5.4s2075; CHECK-NOFP16-GI-NEXT: uzp1 v3.4s, v6.4s, v7.4s2076; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h2077; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h2078; CHECK-NOFP16-GI-NEXT: ret2079;2080; CHECK-FP16-GI-LABEL: fptos_v16f64_v16i16:2081; CHECK-FP16-GI: // %bb.0: // %entry2082; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v0.2d2083; CHECK-FP16-GI-NEXT: fcvtzs v1.2d, v1.2d2084; CHECK-FP16-GI-NEXT: fcvtzs v2.2d, v2.2d2085; CHECK-FP16-GI-NEXT: fcvtzs v3.2d, v3.2d2086; CHECK-FP16-GI-NEXT: fcvtzs v4.2d, v4.2d2087; CHECK-FP16-GI-NEXT: fcvtzs v5.2d, v5.2d2088; CHECK-FP16-GI-NEXT: fcvtzs v6.2d, v6.2d2089; CHECK-FP16-GI-NEXT: fcvtzs v7.2d, v7.2d2090; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2091; CHECK-FP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s2092; CHECK-FP16-GI-NEXT: uzp1 v2.4s, v4.4s, v5.4s2093; CHECK-FP16-GI-NEXT: uzp1 v3.4s, v6.4s, v7.4s2094; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h2095; CHECK-FP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h2096; CHECK-FP16-GI-NEXT: ret2097entry:2098 %c = fptosi <16 x double> %a to <16 x i16>2099 ret <16 x i16> %c2100}2101 2102define <16 x i16> @fptou_v16f64_v16i16(<16 x double> %a) {2103; CHECK-NOFP16-SD-LABEL: fptou_v16f64_v16i16:2104; CHECK-NOFP16-SD: // %bb.0: // %entry2105; CHECK-NOFP16-SD-NEXT: fcvtzs v3.2d, v3.2d2106; CHECK-NOFP16-SD-NEXT: fcvtzs v7.2d, v7.2d2107; CHECK-NOFP16-SD-NEXT: adrp x8, .LCPI87_02108; CHECK-NOFP16-SD-NEXT: fcvtzs v2.2d, v2.2d2109; CHECK-NOFP16-SD-NEXT: fcvtzs v6.2d, v6.2d2110; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d2111; CHECK-NOFP16-SD-NEXT: fcvtzs v5.2d, v5.2d2112; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d2113; CHECK-NOFP16-SD-NEXT: fcvtzs v4.2d, v4.2d2114; CHECK-NOFP16-SD-NEXT: xtn v19.2s, v3.2d2115; CHECK-NOFP16-SD-NEXT: xtn v23.2s, v7.2d2116; CHECK-NOFP16-SD-NEXT: xtn v18.2s, v2.2d2117; CHECK-NOFP16-SD-NEXT: xtn v22.2s, v6.2d2118; CHECK-NOFP16-SD-NEXT: xtn v17.2s, v1.2d2119; CHECK-NOFP16-SD-NEXT: xtn v21.2s, v5.2d2120; CHECK-NOFP16-SD-NEXT: ldr q1, [x8, :lo12:.LCPI87_0]2121; CHECK-NOFP16-SD-NEXT: xtn v16.2s, v0.2d2122; CHECK-NOFP16-SD-NEXT: xtn v20.2s, v4.2d2123; CHECK-NOFP16-SD-NEXT: tbl v0.16b, { v16.16b, v17.16b, v18.16b, v19.16b }, v1.16b2124; CHECK-NOFP16-SD-NEXT: tbl v1.16b, { v20.16b, v21.16b, v22.16b, v23.16b }, v1.16b2125; CHECK-NOFP16-SD-NEXT: ret2126;2127; CHECK-FP16-SD-LABEL: fptou_v16f64_v16i16:2128; CHECK-FP16-SD: // %bb.0: // %entry2129; CHECK-FP16-SD-NEXT: fcvtzs v3.2d, v3.2d2130; CHECK-FP16-SD-NEXT: fcvtzs v7.2d, v7.2d2131; CHECK-FP16-SD-NEXT: adrp x8, .LCPI87_02132; CHECK-FP16-SD-NEXT: fcvtzs v2.2d, v2.2d2133; CHECK-FP16-SD-NEXT: fcvtzs v6.2d, v6.2d2134; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d2135; CHECK-FP16-SD-NEXT: fcvtzs v5.2d, v5.2d2136; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d2137; CHECK-FP16-SD-NEXT: fcvtzs v4.2d, v4.2d2138; CHECK-FP16-SD-NEXT: xtn v19.2s, v3.2d2139; CHECK-FP16-SD-NEXT: xtn v23.2s, v7.2d2140; CHECK-FP16-SD-NEXT: xtn v18.2s, v2.2d2141; CHECK-FP16-SD-NEXT: xtn v22.2s, v6.2d2142; CHECK-FP16-SD-NEXT: xtn v17.2s, v1.2d2143; CHECK-FP16-SD-NEXT: xtn v21.2s, v5.2d2144; CHECK-FP16-SD-NEXT: ldr q1, [x8, :lo12:.LCPI87_0]2145; CHECK-FP16-SD-NEXT: xtn v16.2s, v0.2d2146; CHECK-FP16-SD-NEXT: xtn v20.2s, v4.2d2147; CHECK-FP16-SD-NEXT: tbl v0.16b, { v16.16b, v17.16b, v18.16b, v19.16b }, v1.16b2148; CHECK-FP16-SD-NEXT: tbl v1.16b, { v20.16b, v21.16b, v22.16b, v23.16b }, v1.16b2149; CHECK-FP16-SD-NEXT: ret2150;2151; CHECK-NOFP16-GI-LABEL: fptou_v16f64_v16i16:2152; CHECK-NOFP16-GI: // %bb.0: // %entry2153; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v0.2d2154; CHECK-NOFP16-GI-NEXT: fcvtzu v1.2d, v1.2d2155; CHECK-NOFP16-GI-NEXT: fcvtzu v2.2d, v2.2d2156; CHECK-NOFP16-GI-NEXT: fcvtzu v3.2d, v3.2d2157; CHECK-NOFP16-GI-NEXT: fcvtzu v4.2d, v4.2d2158; CHECK-NOFP16-GI-NEXT: fcvtzu v5.2d, v5.2d2159; CHECK-NOFP16-GI-NEXT: fcvtzu v6.2d, v6.2d2160; CHECK-NOFP16-GI-NEXT: fcvtzu v7.2d, v7.2d2161; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2162; CHECK-NOFP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s2163; CHECK-NOFP16-GI-NEXT: uzp1 v2.4s, v4.4s, v5.4s2164; CHECK-NOFP16-GI-NEXT: uzp1 v3.4s, v6.4s, v7.4s2165; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h2166; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h2167; CHECK-NOFP16-GI-NEXT: ret2168;2169; CHECK-FP16-GI-LABEL: fptou_v16f64_v16i16:2170; CHECK-FP16-GI: // %bb.0: // %entry2171; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v0.2d2172; CHECK-FP16-GI-NEXT: fcvtzu v1.2d, v1.2d2173; CHECK-FP16-GI-NEXT: fcvtzu v2.2d, v2.2d2174; CHECK-FP16-GI-NEXT: fcvtzu v3.2d, v3.2d2175; CHECK-FP16-GI-NEXT: fcvtzu v4.2d, v4.2d2176; CHECK-FP16-GI-NEXT: fcvtzu v5.2d, v5.2d2177; CHECK-FP16-GI-NEXT: fcvtzu v6.2d, v6.2d2178; CHECK-FP16-GI-NEXT: fcvtzu v7.2d, v7.2d2179; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2180; CHECK-FP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s2181; CHECK-FP16-GI-NEXT: uzp1 v2.4s, v4.4s, v5.4s2182; CHECK-FP16-GI-NEXT: uzp1 v3.4s, v6.4s, v7.4s2183; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h2184; CHECK-FP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h2185; CHECK-FP16-GI-NEXT: ret2186entry:2187 %c = fptoui <16 x double> %a to <16 x i16>2188 ret <16 x i16> %c2189}2190 2191define <2 x i8> @fptos_v2f64_v2i8(<2 x double> %a) {2192; CHECK-LABEL: fptos_v2f64_v2i8:2193; CHECK: // %bb.0: // %entry2194; CHECK-NEXT: fcvtzs v0.2d, v0.2d2195; CHECK-NEXT: xtn v0.2s, v0.2d2196; CHECK-NEXT: ret2197entry:2198 %c = fptosi <2 x double> %a to <2 x i8>2199 ret <2 x i8> %c2200}2201 2202define <2 x i8> @fptou_v2f64_v2i8(<2 x double> %a) {2203; CHECK-NOFP16-SD-LABEL: fptou_v2f64_v2i8:2204; CHECK-NOFP16-SD: // %bb.0: // %entry2205; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d2206; CHECK-NOFP16-SD-NEXT: xtn v0.2s, v0.2d2207; CHECK-NOFP16-SD-NEXT: ret2208;2209; CHECK-FP16-SD-LABEL: fptou_v2f64_v2i8:2210; CHECK-FP16-SD: // %bb.0: // %entry2211; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d2212; CHECK-FP16-SD-NEXT: xtn v0.2s, v0.2d2213; CHECK-FP16-SD-NEXT: ret2214;2215; CHECK-NOFP16-GI-LABEL: fptou_v2f64_v2i8:2216; CHECK-NOFP16-GI: // %bb.0: // %entry2217; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v0.2d2218; CHECK-NOFP16-GI-NEXT: xtn v0.2s, v0.2d2219; CHECK-NOFP16-GI-NEXT: ret2220;2221; CHECK-FP16-GI-LABEL: fptou_v2f64_v2i8:2222; CHECK-FP16-GI: // %bb.0: // %entry2223; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v0.2d2224; CHECK-FP16-GI-NEXT: xtn v0.2s, v0.2d2225; CHECK-FP16-GI-NEXT: ret2226entry:2227 %c = fptoui <2 x double> %a to <2 x i8>2228 ret <2 x i8> %c2229}2230 2231define <3 x i8> @fptos_v3f64_v3i8(<3 x double> %a) {2232; CHECK-NOFP16-SD-LABEL: fptos_v3f64_v3i8:2233; CHECK-NOFP16-SD: // %bb.0: // %entry2234; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q02235; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 def $q12236; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 def $q22237; CHECK-NOFP16-SD-NEXT: mov v0.d[1], v1.d[0]2238; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v2.2d2239; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d2240; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2241; CHECK-NOFP16-SD-NEXT: xtn v0.4h, v0.4s2242; CHECK-NOFP16-SD-NEXT: umov w0, v0.h[0]2243; CHECK-NOFP16-SD-NEXT: umov w1, v0.h[1]2244; CHECK-NOFP16-SD-NEXT: umov w2, v0.h[2]2245; CHECK-NOFP16-SD-NEXT: ret2246;2247; CHECK-FP16-SD-LABEL: fptos_v3f64_v3i8:2248; CHECK-FP16-SD: // %bb.0: // %entry2249; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q02250; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 def $q12251; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 def $q22252; CHECK-FP16-SD-NEXT: mov v0.d[1], v1.d[0]2253; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v2.2d2254; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d2255; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2256; CHECK-FP16-SD-NEXT: xtn v0.4h, v0.4s2257; CHECK-FP16-SD-NEXT: umov w0, v0.h[0]2258; CHECK-FP16-SD-NEXT: umov w1, v0.h[1]2259; CHECK-FP16-SD-NEXT: umov w2, v0.h[2]2260; CHECK-FP16-SD-NEXT: ret2261;2262; CHECK-NOFP16-GI-LABEL: fptos_v3f64_v3i8:2263; CHECK-NOFP16-GI: // %bb.0: // %entry2264; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q02265; CHECK-NOFP16-GI-NEXT: // kill: def $d1 killed $d1 def $q12266; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 def $q22267; CHECK-NOFP16-GI-NEXT: mov v0.d[1], v1.d[0]2268; CHECK-NOFP16-GI-NEXT: fcvtzs v1.2d, v2.2d2269; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v0.2d2270; CHECK-NOFP16-GI-NEXT: fmov x2, d12271; CHECK-NOFP16-GI-NEXT: // kill: def $w2 killed $w2 killed $x22272; CHECK-NOFP16-GI-NEXT: mov d2, v0.d[1]2273; CHECK-NOFP16-GI-NEXT: fmov x0, d02274; CHECK-NOFP16-GI-NEXT: // kill: def $w0 killed $w0 killed $x02275; CHECK-NOFP16-GI-NEXT: fmov x1, d22276; CHECK-NOFP16-GI-NEXT: // kill: def $w1 killed $w1 killed $x12277; CHECK-NOFP16-GI-NEXT: ret2278;2279; CHECK-FP16-GI-LABEL: fptos_v3f64_v3i8:2280; CHECK-FP16-GI: // %bb.0: // %entry2281; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q02282; CHECK-FP16-GI-NEXT: // kill: def $d1 killed $d1 def $q12283; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 def $q22284; CHECK-FP16-GI-NEXT: mov v0.d[1], v1.d[0]2285; CHECK-FP16-GI-NEXT: fcvtzs v1.2d, v2.2d2286; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v0.2d2287; CHECK-FP16-GI-NEXT: fmov x2, d12288; CHECK-FP16-GI-NEXT: // kill: def $w2 killed $w2 killed $x22289; CHECK-FP16-GI-NEXT: mov d2, v0.d[1]2290; CHECK-FP16-GI-NEXT: fmov x0, d02291; CHECK-FP16-GI-NEXT: // kill: def $w0 killed $w0 killed $x02292; CHECK-FP16-GI-NEXT: fmov x1, d22293; CHECK-FP16-GI-NEXT: // kill: def $w1 killed $w1 killed $x12294; CHECK-FP16-GI-NEXT: ret2295entry:2296 %c = fptosi <3 x double> %a to <3 x i8>2297 ret <3 x i8> %c2298}2299 2300define <3 x i8> @fptou_v3f64_v3i8(<3 x double> %a) {2301; CHECK-NOFP16-SD-LABEL: fptou_v3f64_v3i8:2302; CHECK-NOFP16-SD: // %bb.0: // %entry2303; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q02304; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 def $q12305; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 def $q22306; CHECK-NOFP16-SD-NEXT: mov v0.d[1], v1.d[0]2307; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v2.2d2308; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d2309; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2310; CHECK-NOFP16-SD-NEXT: xtn v0.4h, v0.4s2311; CHECK-NOFP16-SD-NEXT: umov w0, v0.h[0]2312; CHECK-NOFP16-SD-NEXT: umov w1, v0.h[1]2313; CHECK-NOFP16-SD-NEXT: umov w2, v0.h[2]2314; CHECK-NOFP16-SD-NEXT: ret2315;2316; CHECK-FP16-SD-LABEL: fptou_v3f64_v3i8:2317; CHECK-FP16-SD: // %bb.0: // %entry2318; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q02319; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 def $q12320; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 def $q22321; CHECK-FP16-SD-NEXT: mov v0.d[1], v1.d[0]2322; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v2.2d2323; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d2324; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2325; CHECK-FP16-SD-NEXT: xtn v0.4h, v0.4s2326; CHECK-FP16-SD-NEXT: umov w0, v0.h[0]2327; CHECK-FP16-SD-NEXT: umov w1, v0.h[1]2328; CHECK-FP16-SD-NEXT: umov w2, v0.h[2]2329; CHECK-FP16-SD-NEXT: ret2330;2331; CHECK-NOFP16-GI-LABEL: fptou_v3f64_v3i8:2332; CHECK-NOFP16-GI: // %bb.0: // %entry2333; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q02334; CHECK-NOFP16-GI-NEXT: // kill: def $d1 killed $d1 def $q12335; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 def $q22336; CHECK-NOFP16-GI-NEXT: mov v0.d[1], v1.d[0]2337; CHECK-NOFP16-GI-NEXT: fcvtzu v1.2d, v2.2d2338; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v0.2d2339; CHECK-NOFP16-GI-NEXT: fmov x2, d12340; CHECK-NOFP16-GI-NEXT: // kill: def $w2 killed $w2 killed $x22341; CHECK-NOFP16-GI-NEXT: mov d2, v0.d[1]2342; CHECK-NOFP16-GI-NEXT: fmov x0, d02343; CHECK-NOFP16-GI-NEXT: // kill: def $w0 killed $w0 killed $x02344; CHECK-NOFP16-GI-NEXT: fmov x1, d22345; CHECK-NOFP16-GI-NEXT: // kill: def $w1 killed $w1 killed $x12346; CHECK-NOFP16-GI-NEXT: ret2347;2348; CHECK-FP16-GI-LABEL: fptou_v3f64_v3i8:2349; CHECK-FP16-GI: // %bb.0: // %entry2350; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q02351; CHECK-FP16-GI-NEXT: // kill: def $d1 killed $d1 def $q12352; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 def $q22353; CHECK-FP16-GI-NEXT: mov v0.d[1], v1.d[0]2354; CHECK-FP16-GI-NEXT: fcvtzu v1.2d, v2.2d2355; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v0.2d2356; CHECK-FP16-GI-NEXT: fmov x2, d12357; CHECK-FP16-GI-NEXT: // kill: def $w2 killed $w2 killed $x22358; CHECK-FP16-GI-NEXT: mov d2, v0.d[1]2359; CHECK-FP16-GI-NEXT: fmov x0, d02360; CHECK-FP16-GI-NEXT: // kill: def $w0 killed $w0 killed $x02361; CHECK-FP16-GI-NEXT: fmov x1, d22362; CHECK-FP16-GI-NEXT: // kill: def $w1 killed $w1 killed $x12363; CHECK-FP16-GI-NEXT: ret2364entry:2365 %c = fptoui <3 x double> %a to <3 x i8>2366 ret <3 x i8> %c2367}2368 2369define <4 x i8> @fptos_v4f64_v4i8(<4 x double> %a) {2370; CHECK-NOFP16-SD-LABEL: fptos_v4f64_v4i8:2371; CHECK-NOFP16-SD: // %bb.0: // %entry2372; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d2373; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d2374; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2375; CHECK-NOFP16-SD-NEXT: xtn v0.4h, v0.4s2376; CHECK-NOFP16-SD-NEXT: ret2377;2378; CHECK-FP16-SD-LABEL: fptos_v4f64_v4i8:2379; CHECK-FP16-SD: // %bb.0: // %entry2380; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d2381; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d2382; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2383; CHECK-FP16-SD-NEXT: xtn v0.4h, v0.4s2384; CHECK-FP16-SD-NEXT: ret2385;2386; CHECK-NOFP16-GI-LABEL: fptos_v4f64_v4i8:2387; CHECK-NOFP16-GI: // %bb.0: // %entry2388; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v0.2d2389; CHECK-NOFP16-GI-NEXT: fcvtzs v1.2d, v1.2d2390; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2391; CHECK-NOFP16-GI-NEXT: xtn v0.4h, v0.4s2392; CHECK-NOFP16-GI-NEXT: ret2393;2394; CHECK-FP16-GI-LABEL: fptos_v4f64_v4i8:2395; CHECK-FP16-GI: // %bb.0: // %entry2396; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v0.2d2397; CHECK-FP16-GI-NEXT: fcvtzs v1.2d, v1.2d2398; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2399; CHECK-FP16-GI-NEXT: xtn v0.4h, v0.4s2400; CHECK-FP16-GI-NEXT: ret2401entry:2402 %c = fptosi <4 x double> %a to <4 x i8>2403 ret <4 x i8> %c2404}2405 2406define <4 x i8> @fptou_v4f64_v4i8(<4 x double> %a) {2407; CHECK-NOFP16-SD-LABEL: fptou_v4f64_v4i8:2408; CHECK-NOFP16-SD: // %bb.0: // %entry2409; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d2410; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d2411; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2412; CHECK-NOFP16-SD-NEXT: xtn v0.4h, v0.4s2413; CHECK-NOFP16-SD-NEXT: ret2414;2415; CHECK-FP16-SD-LABEL: fptou_v4f64_v4i8:2416; CHECK-FP16-SD: // %bb.0: // %entry2417; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d2418; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d2419; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2420; CHECK-FP16-SD-NEXT: xtn v0.4h, v0.4s2421; CHECK-FP16-SD-NEXT: ret2422;2423; CHECK-NOFP16-GI-LABEL: fptou_v4f64_v4i8:2424; CHECK-NOFP16-GI: // %bb.0: // %entry2425; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v0.2d2426; CHECK-NOFP16-GI-NEXT: fcvtzu v1.2d, v1.2d2427; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2428; CHECK-NOFP16-GI-NEXT: xtn v0.4h, v0.4s2429; CHECK-NOFP16-GI-NEXT: ret2430;2431; CHECK-FP16-GI-LABEL: fptou_v4f64_v4i8:2432; CHECK-FP16-GI: // %bb.0: // %entry2433; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v0.2d2434; CHECK-FP16-GI-NEXT: fcvtzu v1.2d, v1.2d2435; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2436; CHECK-FP16-GI-NEXT: xtn v0.4h, v0.4s2437; CHECK-FP16-GI-NEXT: ret2438entry:2439 %c = fptoui <4 x double> %a to <4 x i8>2440 ret <4 x i8> %c2441}2442 2443define <8 x i8> @fptos_v8f64_v8i8(<8 x double> %a) {2444; CHECK-NOFP16-SD-LABEL: fptos_v8f64_v8i8:2445; CHECK-NOFP16-SD: // %bb.0: // %entry2446; CHECK-NOFP16-SD-NEXT: fcvtzs v3.2d, v3.2d2447; CHECK-NOFP16-SD-NEXT: fcvtzs v2.2d, v2.2d2448; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d2449; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d2450; CHECK-NOFP16-SD-NEXT: uzp1 v2.4s, v2.4s, v3.4s2451; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2452; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v2.8h2453; CHECK-NOFP16-SD-NEXT: xtn v0.8b, v0.8h2454; CHECK-NOFP16-SD-NEXT: ret2455;2456; CHECK-FP16-SD-LABEL: fptos_v8f64_v8i8:2457; CHECK-FP16-SD: // %bb.0: // %entry2458; CHECK-FP16-SD-NEXT: fcvtzs v3.2d, v3.2d2459; CHECK-FP16-SD-NEXT: fcvtzs v2.2d, v2.2d2460; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d2461; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d2462; CHECK-FP16-SD-NEXT: uzp1 v2.4s, v2.4s, v3.4s2463; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2464; CHECK-FP16-SD-NEXT: uzp1 v0.8h, v0.8h, v2.8h2465; CHECK-FP16-SD-NEXT: xtn v0.8b, v0.8h2466; CHECK-FP16-SD-NEXT: ret2467;2468; CHECK-NOFP16-GI-LABEL: fptos_v8f64_v8i8:2469; CHECK-NOFP16-GI: // %bb.0: // %entry2470; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v0.2d2471; CHECK-NOFP16-GI-NEXT: fcvtzs v1.2d, v1.2d2472; CHECK-NOFP16-GI-NEXT: fcvtzs v2.2d, v2.2d2473; CHECK-NOFP16-GI-NEXT: fcvtzs v3.2d, v3.2d2474; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2475; CHECK-NOFP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s2476; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h2477; CHECK-NOFP16-GI-NEXT: xtn v0.8b, v0.8h2478; CHECK-NOFP16-GI-NEXT: ret2479;2480; CHECK-FP16-GI-LABEL: fptos_v8f64_v8i8:2481; CHECK-FP16-GI: // %bb.0: // %entry2482; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v0.2d2483; CHECK-FP16-GI-NEXT: fcvtzs v1.2d, v1.2d2484; CHECK-FP16-GI-NEXT: fcvtzs v2.2d, v2.2d2485; CHECK-FP16-GI-NEXT: fcvtzs v3.2d, v3.2d2486; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2487; CHECK-FP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s2488; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h2489; CHECK-FP16-GI-NEXT: xtn v0.8b, v0.8h2490; CHECK-FP16-GI-NEXT: ret2491entry:2492 %c = fptosi <8 x double> %a to <8 x i8>2493 ret <8 x i8> %c2494}2495 2496define <8 x i8> @fptou_v8f64_v8i8(<8 x double> %a) {2497; CHECK-NOFP16-SD-LABEL: fptou_v8f64_v8i8:2498; CHECK-NOFP16-SD: // %bb.0: // %entry2499; CHECK-NOFP16-SD-NEXT: fcvtzs v3.2d, v3.2d2500; CHECK-NOFP16-SD-NEXT: fcvtzs v2.2d, v2.2d2501; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d2502; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d2503; CHECK-NOFP16-SD-NEXT: uzp1 v2.4s, v2.4s, v3.4s2504; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2505; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v2.8h2506; CHECK-NOFP16-SD-NEXT: xtn v0.8b, v0.8h2507; CHECK-NOFP16-SD-NEXT: ret2508;2509; CHECK-FP16-SD-LABEL: fptou_v8f64_v8i8:2510; CHECK-FP16-SD: // %bb.0: // %entry2511; CHECK-FP16-SD-NEXT: fcvtzs v3.2d, v3.2d2512; CHECK-FP16-SD-NEXT: fcvtzs v2.2d, v2.2d2513; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d2514; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d2515; CHECK-FP16-SD-NEXT: uzp1 v2.4s, v2.4s, v3.4s2516; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2517; CHECK-FP16-SD-NEXT: uzp1 v0.8h, v0.8h, v2.8h2518; CHECK-FP16-SD-NEXT: xtn v0.8b, v0.8h2519; CHECK-FP16-SD-NEXT: ret2520;2521; CHECK-NOFP16-GI-LABEL: fptou_v8f64_v8i8:2522; CHECK-NOFP16-GI: // %bb.0: // %entry2523; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v0.2d2524; CHECK-NOFP16-GI-NEXT: fcvtzu v1.2d, v1.2d2525; CHECK-NOFP16-GI-NEXT: fcvtzu v2.2d, v2.2d2526; CHECK-NOFP16-GI-NEXT: fcvtzu v3.2d, v3.2d2527; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2528; CHECK-NOFP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s2529; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h2530; CHECK-NOFP16-GI-NEXT: xtn v0.8b, v0.8h2531; CHECK-NOFP16-GI-NEXT: ret2532;2533; CHECK-FP16-GI-LABEL: fptou_v8f64_v8i8:2534; CHECK-FP16-GI: // %bb.0: // %entry2535; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v0.2d2536; CHECK-FP16-GI-NEXT: fcvtzu v1.2d, v1.2d2537; CHECK-FP16-GI-NEXT: fcvtzu v2.2d, v2.2d2538; CHECK-FP16-GI-NEXT: fcvtzu v3.2d, v3.2d2539; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2540; CHECK-FP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s2541; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h2542; CHECK-FP16-GI-NEXT: xtn v0.8b, v0.8h2543; CHECK-FP16-GI-NEXT: ret2544entry:2545 %c = fptoui <8 x double> %a to <8 x i8>2546 ret <8 x i8> %c2547}2548 2549define <16 x i8> @fptos_v16f64_v16i8(<16 x double> %a) {2550; CHECK-NOFP16-SD-LABEL: fptos_v16f64_v16i8:2551; CHECK-NOFP16-SD: // %bb.0: // %entry2552; CHECK-NOFP16-SD-NEXT: fcvtzs v7.2d, v7.2d2553; CHECK-NOFP16-SD-NEXT: fcvtzs v6.2d, v6.2d2554; CHECK-NOFP16-SD-NEXT: fcvtzs v5.2d, v5.2d2555; CHECK-NOFP16-SD-NEXT: fcvtzs v4.2d, v4.2d2556; CHECK-NOFP16-SD-NEXT: fcvtzs v3.2d, v3.2d2557; CHECK-NOFP16-SD-NEXT: fcvtzs v2.2d, v2.2d2558; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d2559; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d2560; CHECK-NOFP16-SD-NEXT: uzp1 v6.4s, v6.4s, v7.4s2561; CHECK-NOFP16-SD-NEXT: uzp1 v4.4s, v4.4s, v5.4s2562; CHECK-NOFP16-SD-NEXT: uzp1 v2.4s, v2.4s, v3.4s2563; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2564; CHECK-NOFP16-SD-NEXT: uzp1 v1.8h, v4.8h, v6.8h2565; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v2.8h2566; CHECK-NOFP16-SD-NEXT: uzp1 v0.16b, v0.16b, v1.16b2567; CHECK-NOFP16-SD-NEXT: ret2568;2569; CHECK-FP16-SD-LABEL: fptos_v16f64_v16i8:2570; CHECK-FP16-SD: // %bb.0: // %entry2571; CHECK-FP16-SD-NEXT: fcvtzs v7.2d, v7.2d2572; CHECK-FP16-SD-NEXT: fcvtzs v6.2d, v6.2d2573; CHECK-FP16-SD-NEXT: fcvtzs v5.2d, v5.2d2574; CHECK-FP16-SD-NEXT: fcvtzs v4.2d, v4.2d2575; CHECK-FP16-SD-NEXT: fcvtzs v3.2d, v3.2d2576; CHECK-FP16-SD-NEXT: fcvtzs v2.2d, v2.2d2577; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d2578; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d2579; CHECK-FP16-SD-NEXT: uzp1 v6.4s, v6.4s, v7.4s2580; CHECK-FP16-SD-NEXT: uzp1 v4.4s, v4.4s, v5.4s2581; CHECK-FP16-SD-NEXT: uzp1 v2.4s, v2.4s, v3.4s2582; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2583; CHECK-FP16-SD-NEXT: uzp1 v1.8h, v4.8h, v6.8h2584; CHECK-FP16-SD-NEXT: uzp1 v0.8h, v0.8h, v2.8h2585; CHECK-FP16-SD-NEXT: uzp1 v0.16b, v0.16b, v1.16b2586; CHECK-FP16-SD-NEXT: ret2587;2588; CHECK-NOFP16-GI-LABEL: fptos_v16f64_v16i8:2589; CHECK-NOFP16-GI: // %bb.0: // %entry2590; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v0.2d2591; CHECK-NOFP16-GI-NEXT: fcvtzs v1.2d, v1.2d2592; CHECK-NOFP16-GI-NEXT: fcvtzs v2.2d, v2.2d2593; CHECK-NOFP16-GI-NEXT: fcvtzs v3.2d, v3.2d2594; CHECK-NOFP16-GI-NEXT: fcvtzs v4.2d, v4.2d2595; CHECK-NOFP16-GI-NEXT: fcvtzs v5.2d, v5.2d2596; CHECK-NOFP16-GI-NEXT: fcvtzs v6.2d, v6.2d2597; CHECK-NOFP16-GI-NEXT: fcvtzs v7.2d, v7.2d2598; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2599; CHECK-NOFP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s2600; CHECK-NOFP16-GI-NEXT: uzp1 v2.4s, v4.4s, v5.4s2601; CHECK-NOFP16-GI-NEXT: uzp1 v3.4s, v6.4s, v7.4s2602; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h2603; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h2604; CHECK-NOFP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b2605; CHECK-NOFP16-GI-NEXT: ret2606;2607; CHECK-FP16-GI-LABEL: fptos_v16f64_v16i8:2608; CHECK-FP16-GI: // %bb.0: // %entry2609; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v0.2d2610; CHECK-FP16-GI-NEXT: fcvtzs v1.2d, v1.2d2611; CHECK-FP16-GI-NEXT: fcvtzs v2.2d, v2.2d2612; CHECK-FP16-GI-NEXT: fcvtzs v3.2d, v3.2d2613; CHECK-FP16-GI-NEXT: fcvtzs v4.2d, v4.2d2614; CHECK-FP16-GI-NEXT: fcvtzs v5.2d, v5.2d2615; CHECK-FP16-GI-NEXT: fcvtzs v6.2d, v6.2d2616; CHECK-FP16-GI-NEXT: fcvtzs v7.2d, v7.2d2617; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2618; CHECK-FP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s2619; CHECK-FP16-GI-NEXT: uzp1 v2.4s, v4.4s, v5.4s2620; CHECK-FP16-GI-NEXT: uzp1 v3.4s, v6.4s, v7.4s2621; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h2622; CHECK-FP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h2623; CHECK-FP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b2624; CHECK-FP16-GI-NEXT: ret2625entry:2626 %c = fptosi <16 x double> %a to <16 x i8>2627 ret <16 x i8> %c2628}2629 2630define <16 x i8> @fptou_v16f64_v16i8(<16 x double> %a) {2631; CHECK-NOFP16-SD-LABEL: fptou_v16f64_v16i8:2632; CHECK-NOFP16-SD: // %bb.0: // %entry2633; CHECK-NOFP16-SD-NEXT: fcvtzs v7.2d, v7.2d2634; CHECK-NOFP16-SD-NEXT: fcvtzs v6.2d, v6.2d2635; CHECK-NOFP16-SD-NEXT: fcvtzs v5.2d, v5.2d2636; CHECK-NOFP16-SD-NEXT: fcvtzs v4.2d, v4.2d2637; CHECK-NOFP16-SD-NEXT: fcvtzs v3.2d, v3.2d2638; CHECK-NOFP16-SD-NEXT: fcvtzs v2.2d, v2.2d2639; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d2640; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d2641; CHECK-NOFP16-SD-NEXT: uzp1 v6.4s, v6.4s, v7.4s2642; CHECK-NOFP16-SD-NEXT: uzp1 v4.4s, v4.4s, v5.4s2643; CHECK-NOFP16-SD-NEXT: uzp1 v2.4s, v2.4s, v3.4s2644; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2645; CHECK-NOFP16-SD-NEXT: uzp1 v1.8h, v4.8h, v6.8h2646; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v2.8h2647; CHECK-NOFP16-SD-NEXT: uzp1 v0.16b, v0.16b, v1.16b2648; CHECK-NOFP16-SD-NEXT: ret2649;2650; CHECK-FP16-SD-LABEL: fptou_v16f64_v16i8:2651; CHECK-FP16-SD: // %bb.0: // %entry2652; CHECK-FP16-SD-NEXT: fcvtzs v7.2d, v7.2d2653; CHECK-FP16-SD-NEXT: fcvtzs v6.2d, v6.2d2654; CHECK-FP16-SD-NEXT: fcvtzs v5.2d, v5.2d2655; CHECK-FP16-SD-NEXT: fcvtzs v4.2d, v4.2d2656; CHECK-FP16-SD-NEXT: fcvtzs v3.2d, v3.2d2657; CHECK-FP16-SD-NEXT: fcvtzs v2.2d, v2.2d2658; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d2659; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d2660; CHECK-FP16-SD-NEXT: uzp1 v6.4s, v6.4s, v7.4s2661; CHECK-FP16-SD-NEXT: uzp1 v4.4s, v4.4s, v5.4s2662; CHECK-FP16-SD-NEXT: uzp1 v2.4s, v2.4s, v3.4s2663; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2664; CHECK-FP16-SD-NEXT: uzp1 v1.8h, v4.8h, v6.8h2665; CHECK-FP16-SD-NEXT: uzp1 v0.8h, v0.8h, v2.8h2666; CHECK-FP16-SD-NEXT: uzp1 v0.16b, v0.16b, v1.16b2667; CHECK-FP16-SD-NEXT: ret2668;2669; CHECK-NOFP16-GI-LABEL: fptou_v16f64_v16i8:2670; CHECK-NOFP16-GI: // %bb.0: // %entry2671; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v0.2d2672; CHECK-NOFP16-GI-NEXT: fcvtzu v1.2d, v1.2d2673; CHECK-NOFP16-GI-NEXT: fcvtzu v2.2d, v2.2d2674; CHECK-NOFP16-GI-NEXT: fcvtzu v3.2d, v3.2d2675; CHECK-NOFP16-GI-NEXT: fcvtzu v4.2d, v4.2d2676; CHECK-NOFP16-GI-NEXT: fcvtzu v5.2d, v5.2d2677; CHECK-NOFP16-GI-NEXT: fcvtzu v6.2d, v6.2d2678; CHECK-NOFP16-GI-NEXT: fcvtzu v7.2d, v7.2d2679; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2680; CHECK-NOFP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s2681; CHECK-NOFP16-GI-NEXT: uzp1 v2.4s, v4.4s, v5.4s2682; CHECK-NOFP16-GI-NEXT: uzp1 v3.4s, v6.4s, v7.4s2683; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h2684; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h2685; CHECK-NOFP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b2686; CHECK-NOFP16-GI-NEXT: ret2687;2688; CHECK-FP16-GI-LABEL: fptou_v16f64_v16i8:2689; CHECK-FP16-GI: // %bb.0: // %entry2690; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v0.2d2691; CHECK-FP16-GI-NEXT: fcvtzu v1.2d, v1.2d2692; CHECK-FP16-GI-NEXT: fcvtzu v2.2d, v2.2d2693; CHECK-FP16-GI-NEXT: fcvtzu v3.2d, v3.2d2694; CHECK-FP16-GI-NEXT: fcvtzu v4.2d, v4.2d2695; CHECK-FP16-GI-NEXT: fcvtzu v5.2d, v5.2d2696; CHECK-FP16-GI-NEXT: fcvtzu v6.2d, v6.2d2697; CHECK-FP16-GI-NEXT: fcvtzu v7.2d, v7.2d2698; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2699; CHECK-FP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s2700; CHECK-FP16-GI-NEXT: uzp1 v2.4s, v4.4s, v5.4s2701; CHECK-FP16-GI-NEXT: uzp1 v3.4s, v6.4s, v7.4s2702; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h2703; CHECK-FP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h2704; CHECK-FP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b2705; CHECK-FP16-GI-NEXT: ret2706entry:2707 %c = fptoui <16 x double> %a to <16 x i8>2708 ret <16 x i8> %c2709}2710 2711define <32 x i8> @fptos_v32f64_v32i8(<32 x double> %a) {2712; CHECK-NOFP16-SD-LABEL: fptos_v32f64_v32i8:2713; CHECK-NOFP16-SD: // %bb.0: // %entry2714; CHECK-NOFP16-SD-NEXT: ldp q16, q17, [sp]2715; CHECK-NOFP16-SD-NEXT: fcvtzs v7.2d, v7.2d2716; CHECK-NOFP16-SD-NEXT: ldp q18, q19, [sp, #32]2717; CHECK-NOFP16-SD-NEXT: fcvtzs v6.2d, v6.2d2718; CHECK-NOFP16-SD-NEXT: ldp q20, q21, [sp, #64]2719; CHECK-NOFP16-SD-NEXT: fcvtzs v5.2d, v5.2d2720; CHECK-NOFP16-SD-NEXT: ldp q22, q23, [sp, #96]2721; CHECK-NOFP16-SD-NEXT: fcvtzs v4.2d, v4.2d2722; CHECK-NOFP16-SD-NEXT: fcvtzs v3.2d, v3.2d2723; CHECK-NOFP16-SD-NEXT: fcvtzs v2.2d, v2.2d2724; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d2725; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d2726; CHECK-NOFP16-SD-NEXT: fcvtzs v21.2d, v21.2d2727; CHECK-NOFP16-SD-NEXT: fcvtzs v20.2d, v20.2d2728; CHECK-NOFP16-SD-NEXT: fcvtzs v23.2d, v23.2d2729; CHECK-NOFP16-SD-NEXT: fcvtzs v22.2d, v22.2d2730; CHECK-NOFP16-SD-NEXT: fcvtzs v19.2d, v19.2d2731; CHECK-NOFP16-SD-NEXT: fcvtzs v18.2d, v18.2d2732; CHECK-NOFP16-SD-NEXT: fcvtzs v17.2d, v17.2d2733; CHECK-NOFP16-SD-NEXT: fcvtzs v16.2d, v16.2d2734; CHECK-NOFP16-SD-NEXT: uzp1 v6.4s, v6.4s, v7.4s2735; CHECK-NOFP16-SD-NEXT: uzp1 v4.4s, v4.4s, v5.4s2736; CHECK-NOFP16-SD-NEXT: uzp1 v2.4s, v2.4s, v3.4s2737; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2738; CHECK-NOFP16-SD-NEXT: uzp1 v3.4s, v20.4s, v21.4s2739; CHECK-NOFP16-SD-NEXT: uzp1 v1.4s, v22.4s, v23.4s2740; CHECK-NOFP16-SD-NEXT: uzp1 v5.4s, v18.4s, v19.4s2741; CHECK-NOFP16-SD-NEXT: uzp1 v7.4s, v16.4s, v17.4s2742; CHECK-NOFP16-SD-NEXT: uzp1 v4.8h, v4.8h, v6.8h2743; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v2.8h2744; CHECK-NOFP16-SD-NEXT: uzp1 v1.8h, v3.8h, v1.8h2745; CHECK-NOFP16-SD-NEXT: uzp1 v2.8h, v7.8h, v5.8h2746; CHECK-NOFP16-SD-NEXT: uzp1 v0.16b, v0.16b, v4.16b2747; CHECK-NOFP16-SD-NEXT: uzp1 v1.16b, v2.16b, v1.16b2748; CHECK-NOFP16-SD-NEXT: ret2749;2750; CHECK-FP16-SD-LABEL: fptos_v32f64_v32i8:2751; CHECK-FP16-SD: // %bb.0: // %entry2752; CHECK-FP16-SD-NEXT: ldp q16, q17, [sp]2753; CHECK-FP16-SD-NEXT: fcvtzs v7.2d, v7.2d2754; CHECK-FP16-SD-NEXT: ldp q18, q19, [sp, #32]2755; CHECK-FP16-SD-NEXT: fcvtzs v6.2d, v6.2d2756; CHECK-FP16-SD-NEXT: ldp q20, q21, [sp, #64]2757; CHECK-FP16-SD-NEXT: fcvtzs v5.2d, v5.2d2758; CHECK-FP16-SD-NEXT: ldp q22, q23, [sp, #96]2759; CHECK-FP16-SD-NEXT: fcvtzs v4.2d, v4.2d2760; CHECK-FP16-SD-NEXT: fcvtzs v3.2d, v3.2d2761; CHECK-FP16-SD-NEXT: fcvtzs v2.2d, v2.2d2762; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d2763; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d2764; CHECK-FP16-SD-NEXT: fcvtzs v21.2d, v21.2d2765; CHECK-FP16-SD-NEXT: fcvtzs v20.2d, v20.2d2766; CHECK-FP16-SD-NEXT: fcvtzs v23.2d, v23.2d2767; CHECK-FP16-SD-NEXT: fcvtzs v22.2d, v22.2d2768; CHECK-FP16-SD-NEXT: fcvtzs v19.2d, v19.2d2769; CHECK-FP16-SD-NEXT: fcvtzs v18.2d, v18.2d2770; CHECK-FP16-SD-NEXT: fcvtzs v17.2d, v17.2d2771; CHECK-FP16-SD-NEXT: fcvtzs v16.2d, v16.2d2772; CHECK-FP16-SD-NEXT: uzp1 v6.4s, v6.4s, v7.4s2773; CHECK-FP16-SD-NEXT: uzp1 v4.4s, v4.4s, v5.4s2774; CHECK-FP16-SD-NEXT: uzp1 v2.4s, v2.4s, v3.4s2775; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2776; CHECK-FP16-SD-NEXT: uzp1 v3.4s, v20.4s, v21.4s2777; CHECK-FP16-SD-NEXT: uzp1 v1.4s, v22.4s, v23.4s2778; CHECK-FP16-SD-NEXT: uzp1 v5.4s, v18.4s, v19.4s2779; CHECK-FP16-SD-NEXT: uzp1 v7.4s, v16.4s, v17.4s2780; CHECK-FP16-SD-NEXT: uzp1 v4.8h, v4.8h, v6.8h2781; CHECK-FP16-SD-NEXT: uzp1 v0.8h, v0.8h, v2.8h2782; CHECK-FP16-SD-NEXT: uzp1 v1.8h, v3.8h, v1.8h2783; CHECK-FP16-SD-NEXT: uzp1 v2.8h, v7.8h, v5.8h2784; CHECK-FP16-SD-NEXT: uzp1 v0.16b, v0.16b, v4.16b2785; CHECK-FP16-SD-NEXT: uzp1 v1.16b, v2.16b, v1.16b2786; CHECK-FP16-SD-NEXT: ret2787;2788; CHECK-NOFP16-GI-LABEL: fptos_v32f64_v32i8:2789; CHECK-NOFP16-GI: // %bb.0: // %entry2790; CHECK-NOFP16-GI-NEXT: ldp q16, q17, [sp]2791; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v0.2d2792; CHECK-NOFP16-GI-NEXT: ldp q18, q19, [sp, #32]2793; CHECK-NOFP16-GI-NEXT: fcvtzs v1.2d, v1.2d2794; CHECK-NOFP16-GI-NEXT: ldp q20, q21, [sp, #64]2795; CHECK-NOFP16-GI-NEXT: fcvtzs v2.2d, v2.2d2796; CHECK-NOFP16-GI-NEXT: ldp q22, q23, [sp, #96]2797; CHECK-NOFP16-GI-NEXT: fcvtzs v3.2d, v3.2d2798; CHECK-NOFP16-GI-NEXT: fcvtzs v4.2d, v4.2d2799; CHECK-NOFP16-GI-NEXT: fcvtzs v5.2d, v5.2d2800; CHECK-NOFP16-GI-NEXT: fcvtzs v6.2d, v6.2d2801; CHECK-NOFP16-GI-NEXT: fcvtzs v7.2d, v7.2d2802; CHECK-NOFP16-GI-NEXT: fcvtzs v16.2d, v16.2d2803; CHECK-NOFP16-GI-NEXT: fcvtzs v17.2d, v17.2d2804; CHECK-NOFP16-GI-NEXT: fcvtzs v18.2d, v18.2d2805; CHECK-NOFP16-GI-NEXT: fcvtzs v19.2d, v19.2d2806; CHECK-NOFP16-GI-NEXT: fcvtzs v20.2d, v20.2d2807; CHECK-NOFP16-GI-NEXT: fcvtzs v21.2d, v21.2d2808; CHECK-NOFP16-GI-NEXT: fcvtzs v22.2d, v22.2d2809; CHECK-NOFP16-GI-NEXT: fcvtzs v23.2d, v23.2d2810; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2811; CHECK-NOFP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s2812; CHECK-NOFP16-GI-NEXT: uzp1 v2.4s, v4.4s, v5.4s2813; CHECK-NOFP16-GI-NEXT: uzp1 v3.4s, v6.4s, v7.4s2814; CHECK-NOFP16-GI-NEXT: uzp1 v4.4s, v16.4s, v17.4s2815; CHECK-NOFP16-GI-NEXT: uzp1 v5.4s, v18.4s, v19.4s2816; CHECK-NOFP16-GI-NEXT: uzp1 v6.4s, v20.4s, v21.4s2817; CHECK-NOFP16-GI-NEXT: uzp1 v7.4s, v22.4s, v23.4s2818; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h2819; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h2820; CHECK-NOFP16-GI-NEXT: uzp1 v2.8h, v4.8h, v5.8h2821; CHECK-NOFP16-GI-NEXT: uzp1 v3.8h, v6.8h, v7.8h2822; CHECK-NOFP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b2823; CHECK-NOFP16-GI-NEXT: uzp1 v1.16b, v2.16b, v3.16b2824; CHECK-NOFP16-GI-NEXT: ret2825;2826; CHECK-FP16-GI-LABEL: fptos_v32f64_v32i8:2827; CHECK-FP16-GI: // %bb.0: // %entry2828; CHECK-FP16-GI-NEXT: ldp q16, q17, [sp]2829; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v0.2d2830; CHECK-FP16-GI-NEXT: ldp q18, q19, [sp, #32]2831; CHECK-FP16-GI-NEXT: fcvtzs v1.2d, v1.2d2832; CHECK-FP16-GI-NEXT: ldp q20, q21, [sp, #64]2833; CHECK-FP16-GI-NEXT: fcvtzs v2.2d, v2.2d2834; CHECK-FP16-GI-NEXT: ldp q22, q23, [sp, #96]2835; CHECK-FP16-GI-NEXT: fcvtzs v3.2d, v3.2d2836; CHECK-FP16-GI-NEXT: fcvtzs v4.2d, v4.2d2837; CHECK-FP16-GI-NEXT: fcvtzs v5.2d, v5.2d2838; CHECK-FP16-GI-NEXT: fcvtzs v6.2d, v6.2d2839; CHECK-FP16-GI-NEXT: fcvtzs v7.2d, v7.2d2840; CHECK-FP16-GI-NEXT: fcvtzs v16.2d, v16.2d2841; CHECK-FP16-GI-NEXT: fcvtzs v17.2d, v17.2d2842; CHECK-FP16-GI-NEXT: fcvtzs v18.2d, v18.2d2843; CHECK-FP16-GI-NEXT: fcvtzs v19.2d, v19.2d2844; CHECK-FP16-GI-NEXT: fcvtzs v20.2d, v20.2d2845; CHECK-FP16-GI-NEXT: fcvtzs v21.2d, v21.2d2846; CHECK-FP16-GI-NEXT: fcvtzs v22.2d, v22.2d2847; CHECK-FP16-GI-NEXT: fcvtzs v23.2d, v23.2d2848; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2849; CHECK-FP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s2850; CHECK-FP16-GI-NEXT: uzp1 v2.4s, v4.4s, v5.4s2851; CHECK-FP16-GI-NEXT: uzp1 v3.4s, v6.4s, v7.4s2852; CHECK-FP16-GI-NEXT: uzp1 v4.4s, v16.4s, v17.4s2853; CHECK-FP16-GI-NEXT: uzp1 v5.4s, v18.4s, v19.4s2854; CHECK-FP16-GI-NEXT: uzp1 v6.4s, v20.4s, v21.4s2855; CHECK-FP16-GI-NEXT: uzp1 v7.4s, v22.4s, v23.4s2856; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h2857; CHECK-FP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h2858; CHECK-FP16-GI-NEXT: uzp1 v2.8h, v4.8h, v5.8h2859; CHECK-FP16-GI-NEXT: uzp1 v3.8h, v6.8h, v7.8h2860; CHECK-FP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b2861; CHECK-FP16-GI-NEXT: uzp1 v1.16b, v2.16b, v3.16b2862; CHECK-FP16-GI-NEXT: ret2863entry:2864 %c = fptosi <32 x double> %a to <32 x i8>2865 ret <32 x i8> %c2866}2867 2868define <32 x i8> @fptou_v32f64_v32i8(<32 x double> %a) {2869; CHECK-NOFP16-SD-LABEL: fptou_v32f64_v32i8:2870; CHECK-NOFP16-SD: // %bb.0: // %entry2871; CHECK-NOFP16-SD-NEXT: ldp q16, q17, [sp]2872; CHECK-NOFP16-SD-NEXT: fcvtzs v7.2d, v7.2d2873; CHECK-NOFP16-SD-NEXT: ldp q18, q19, [sp, #32]2874; CHECK-NOFP16-SD-NEXT: fcvtzs v6.2d, v6.2d2875; CHECK-NOFP16-SD-NEXT: ldp q20, q21, [sp, #64]2876; CHECK-NOFP16-SD-NEXT: fcvtzs v5.2d, v5.2d2877; CHECK-NOFP16-SD-NEXT: ldp q22, q23, [sp, #96]2878; CHECK-NOFP16-SD-NEXT: fcvtzs v4.2d, v4.2d2879; CHECK-NOFP16-SD-NEXT: fcvtzs v3.2d, v3.2d2880; CHECK-NOFP16-SD-NEXT: fcvtzs v2.2d, v2.2d2881; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d2882; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d2883; CHECK-NOFP16-SD-NEXT: fcvtzs v21.2d, v21.2d2884; CHECK-NOFP16-SD-NEXT: fcvtzs v20.2d, v20.2d2885; CHECK-NOFP16-SD-NEXT: fcvtzs v23.2d, v23.2d2886; CHECK-NOFP16-SD-NEXT: fcvtzs v22.2d, v22.2d2887; CHECK-NOFP16-SD-NEXT: fcvtzs v19.2d, v19.2d2888; CHECK-NOFP16-SD-NEXT: fcvtzs v18.2d, v18.2d2889; CHECK-NOFP16-SD-NEXT: fcvtzs v17.2d, v17.2d2890; CHECK-NOFP16-SD-NEXT: fcvtzs v16.2d, v16.2d2891; CHECK-NOFP16-SD-NEXT: uzp1 v6.4s, v6.4s, v7.4s2892; CHECK-NOFP16-SD-NEXT: uzp1 v4.4s, v4.4s, v5.4s2893; CHECK-NOFP16-SD-NEXT: uzp1 v2.4s, v2.4s, v3.4s2894; CHECK-NOFP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2895; CHECK-NOFP16-SD-NEXT: uzp1 v3.4s, v20.4s, v21.4s2896; CHECK-NOFP16-SD-NEXT: uzp1 v1.4s, v22.4s, v23.4s2897; CHECK-NOFP16-SD-NEXT: uzp1 v5.4s, v18.4s, v19.4s2898; CHECK-NOFP16-SD-NEXT: uzp1 v7.4s, v16.4s, v17.4s2899; CHECK-NOFP16-SD-NEXT: uzp1 v4.8h, v4.8h, v6.8h2900; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v2.8h2901; CHECK-NOFP16-SD-NEXT: uzp1 v1.8h, v3.8h, v1.8h2902; CHECK-NOFP16-SD-NEXT: uzp1 v2.8h, v7.8h, v5.8h2903; CHECK-NOFP16-SD-NEXT: uzp1 v0.16b, v0.16b, v4.16b2904; CHECK-NOFP16-SD-NEXT: uzp1 v1.16b, v2.16b, v1.16b2905; CHECK-NOFP16-SD-NEXT: ret2906;2907; CHECK-FP16-SD-LABEL: fptou_v32f64_v32i8:2908; CHECK-FP16-SD: // %bb.0: // %entry2909; CHECK-FP16-SD-NEXT: ldp q16, q17, [sp]2910; CHECK-FP16-SD-NEXT: fcvtzs v7.2d, v7.2d2911; CHECK-FP16-SD-NEXT: ldp q18, q19, [sp, #32]2912; CHECK-FP16-SD-NEXT: fcvtzs v6.2d, v6.2d2913; CHECK-FP16-SD-NEXT: ldp q20, q21, [sp, #64]2914; CHECK-FP16-SD-NEXT: fcvtzs v5.2d, v5.2d2915; CHECK-FP16-SD-NEXT: ldp q22, q23, [sp, #96]2916; CHECK-FP16-SD-NEXT: fcvtzs v4.2d, v4.2d2917; CHECK-FP16-SD-NEXT: fcvtzs v3.2d, v3.2d2918; CHECK-FP16-SD-NEXT: fcvtzs v2.2d, v2.2d2919; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d2920; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d2921; CHECK-FP16-SD-NEXT: fcvtzs v21.2d, v21.2d2922; CHECK-FP16-SD-NEXT: fcvtzs v20.2d, v20.2d2923; CHECK-FP16-SD-NEXT: fcvtzs v23.2d, v23.2d2924; CHECK-FP16-SD-NEXT: fcvtzs v22.2d, v22.2d2925; CHECK-FP16-SD-NEXT: fcvtzs v19.2d, v19.2d2926; CHECK-FP16-SD-NEXT: fcvtzs v18.2d, v18.2d2927; CHECK-FP16-SD-NEXT: fcvtzs v17.2d, v17.2d2928; CHECK-FP16-SD-NEXT: fcvtzs v16.2d, v16.2d2929; CHECK-FP16-SD-NEXT: uzp1 v6.4s, v6.4s, v7.4s2930; CHECK-FP16-SD-NEXT: uzp1 v4.4s, v4.4s, v5.4s2931; CHECK-FP16-SD-NEXT: uzp1 v2.4s, v2.4s, v3.4s2932; CHECK-FP16-SD-NEXT: uzp1 v0.4s, v0.4s, v1.4s2933; CHECK-FP16-SD-NEXT: uzp1 v3.4s, v20.4s, v21.4s2934; CHECK-FP16-SD-NEXT: uzp1 v1.4s, v22.4s, v23.4s2935; CHECK-FP16-SD-NEXT: uzp1 v5.4s, v18.4s, v19.4s2936; CHECK-FP16-SD-NEXT: uzp1 v7.4s, v16.4s, v17.4s2937; CHECK-FP16-SD-NEXT: uzp1 v4.8h, v4.8h, v6.8h2938; CHECK-FP16-SD-NEXT: uzp1 v0.8h, v0.8h, v2.8h2939; CHECK-FP16-SD-NEXT: uzp1 v1.8h, v3.8h, v1.8h2940; CHECK-FP16-SD-NEXT: uzp1 v2.8h, v7.8h, v5.8h2941; CHECK-FP16-SD-NEXT: uzp1 v0.16b, v0.16b, v4.16b2942; CHECK-FP16-SD-NEXT: uzp1 v1.16b, v2.16b, v1.16b2943; CHECK-FP16-SD-NEXT: ret2944;2945; CHECK-NOFP16-GI-LABEL: fptou_v32f64_v32i8:2946; CHECK-NOFP16-GI: // %bb.0: // %entry2947; CHECK-NOFP16-GI-NEXT: ldp q16, q17, [sp]2948; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v0.2d2949; CHECK-NOFP16-GI-NEXT: ldp q18, q19, [sp, #32]2950; CHECK-NOFP16-GI-NEXT: fcvtzu v1.2d, v1.2d2951; CHECK-NOFP16-GI-NEXT: ldp q20, q21, [sp, #64]2952; CHECK-NOFP16-GI-NEXT: fcvtzu v2.2d, v2.2d2953; CHECK-NOFP16-GI-NEXT: ldp q22, q23, [sp, #96]2954; CHECK-NOFP16-GI-NEXT: fcvtzu v3.2d, v3.2d2955; CHECK-NOFP16-GI-NEXT: fcvtzu v4.2d, v4.2d2956; CHECK-NOFP16-GI-NEXT: fcvtzu v5.2d, v5.2d2957; CHECK-NOFP16-GI-NEXT: fcvtzu v6.2d, v6.2d2958; CHECK-NOFP16-GI-NEXT: fcvtzu v7.2d, v7.2d2959; CHECK-NOFP16-GI-NEXT: fcvtzu v16.2d, v16.2d2960; CHECK-NOFP16-GI-NEXT: fcvtzu v17.2d, v17.2d2961; CHECK-NOFP16-GI-NEXT: fcvtzu v18.2d, v18.2d2962; CHECK-NOFP16-GI-NEXT: fcvtzu v19.2d, v19.2d2963; CHECK-NOFP16-GI-NEXT: fcvtzu v20.2d, v20.2d2964; CHECK-NOFP16-GI-NEXT: fcvtzu v21.2d, v21.2d2965; CHECK-NOFP16-GI-NEXT: fcvtzu v22.2d, v22.2d2966; CHECK-NOFP16-GI-NEXT: fcvtzu v23.2d, v23.2d2967; CHECK-NOFP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s2968; CHECK-NOFP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s2969; CHECK-NOFP16-GI-NEXT: uzp1 v2.4s, v4.4s, v5.4s2970; CHECK-NOFP16-GI-NEXT: uzp1 v3.4s, v6.4s, v7.4s2971; CHECK-NOFP16-GI-NEXT: uzp1 v4.4s, v16.4s, v17.4s2972; CHECK-NOFP16-GI-NEXT: uzp1 v5.4s, v18.4s, v19.4s2973; CHECK-NOFP16-GI-NEXT: uzp1 v6.4s, v20.4s, v21.4s2974; CHECK-NOFP16-GI-NEXT: uzp1 v7.4s, v22.4s, v23.4s2975; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h2976; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h2977; CHECK-NOFP16-GI-NEXT: uzp1 v2.8h, v4.8h, v5.8h2978; CHECK-NOFP16-GI-NEXT: uzp1 v3.8h, v6.8h, v7.8h2979; CHECK-NOFP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b2980; CHECK-NOFP16-GI-NEXT: uzp1 v1.16b, v2.16b, v3.16b2981; CHECK-NOFP16-GI-NEXT: ret2982;2983; CHECK-FP16-GI-LABEL: fptou_v32f64_v32i8:2984; CHECK-FP16-GI: // %bb.0: // %entry2985; CHECK-FP16-GI-NEXT: ldp q16, q17, [sp]2986; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v0.2d2987; CHECK-FP16-GI-NEXT: ldp q18, q19, [sp, #32]2988; CHECK-FP16-GI-NEXT: fcvtzu v1.2d, v1.2d2989; CHECK-FP16-GI-NEXT: ldp q20, q21, [sp, #64]2990; CHECK-FP16-GI-NEXT: fcvtzu v2.2d, v2.2d2991; CHECK-FP16-GI-NEXT: ldp q22, q23, [sp, #96]2992; CHECK-FP16-GI-NEXT: fcvtzu v3.2d, v3.2d2993; CHECK-FP16-GI-NEXT: fcvtzu v4.2d, v4.2d2994; CHECK-FP16-GI-NEXT: fcvtzu v5.2d, v5.2d2995; CHECK-FP16-GI-NEXT: fcvtzu v6.2d, v6.2d2996; CHECK-FP16-GI-NEXT: fcvtzu v7.2d, v7.2d2997; CHECK-FP16-GI-NEXT: fcvtzu v16.2d, v16.2d2998; CHECK-FP16-GI-NEXT: fcvtzu v17.2d, v17.2d2999; CHECK-FP16-GI-NEXT: fcvtzu v18.2d, v18.2d3000; CHECK-FP16-GI-NEXT: fcvtzu v19.2d, v19.2d3001; CHECK-FP16-GI-NEXT: fcvtzu v20.2d, v20.2d3002; CHECK-FP16-GI-NEXT: fcvtzu v21.2d, v21.2d3003; CHECK-FP16-GI-NEXT: fcvtzu v22.2d, v22.2d3004; CHECK-FP16-GI-NEXT: fcvtzu v23.2d, v23.2d3005; CHECK-FP16-GI-NEXT: uzp1 v0.4s, v0.4s, v1.4s3006; CHECK-FP16-GI-NEXT: uzp1 v1.4s, v2.4s, v3.4s3007; CHECK-FP16-GI-NEXT: uzp1 v2.4s, v4.4s, v5.4s3008; CHECK-FP16-GI-NEXT: uzp1 v3.4s, v6.4s, v7.4s3009; CHECK-FP16-GI-NEXT: uzp1 v4.4s, v16.4s, v17.4s3010; CHECK-FP16-GI-NEXT: uzp1 v5.4s, v18.4s, v19.4s3011; CHECK-FP16-GI-NEXT: uzp1 v6.4s, v20.4s, v21.4s3012; CHECK-FP16-GI-NEXT: uzp1 v7.4s, v22.4s, v23.4s3013; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h3014; CHECK-FP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h3015; CHECK-FP16-GI-NEXT: uzp1 v2.8h, v4.8h, v5.8h3016; CHECK-FP16-GI-NEXT: uzp1 v3.8h, v6.8h, v7.8h3017; CHECK-FP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b3018; CHECK-FP16-GI-NEXT: uzp1 v1.16b, v2.16b, v3.16b3019; CHECK-FP16-GI-NEXT: ret3020entry:3021 %c = fptoui <32 x double> %a to <32 x i8>3022 ret <32 x i8> %c3023}3024 3025define <2 x i128> @fptos_v2f64_v2i128(<2 x double> %a) {3026; CHECK-NOFP16-SD-LABEL: fptos_v2f64_v2i128:3027; CHECK-NOFP16-SD: // %bb.0: // %entry3028; CHECK-NOFP16-SD-NEXT: sub sp, sp, #483029; CHECK-NOFP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill3030; CHECK-NOFP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill3031; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 483032; CHECK-NOFP16-SD-NEXT: .cfi_offset w19, -83033; CHECK-NOFP16-SD-NEXT: .cfi_offset w20, -163034; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -323035; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill3036; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q03037; CHECK-NOFP16-SD-NEXT: bl __fixdfti3038; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload3039; CHECK-NOFP16-SD-NEXT: mov x19, x03040; CHECK-NOFP16-SD-NEXT: mov x20, x13041; CHECK-NOFP16-SD-NEXT: mov d0, v0.d[1]3042; CHECK-NOFP16-SD-NEXT: bl __fixdfti3043; CHECK-NOFP16-SD-NEXT: mov x2, x03044; CHECK-NOFP16-SD-NEXT: mov x3, x13045; CHECK-NOFP16-SD-NEXT: mov x0, x193046; CHECK-NOFP16-SD-NEXT: mov x1, x203047; CHECK-NOFP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload3048; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload3049; CHECK-NOFP16-SD-NEXT: add sp, sp, #483050; CHECK-NOFP16-SD-NEXT: ret3051;3052; CHECK-FP16-SD-LABEL: fptos_v2f64_v2i128:3053; CHECK-FP16-SD: // %bb.0: // %entry3054; CHECK-FP16-SD-NEXT: sub sp, sp, #483055; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill3056; CHECK-FP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill3057; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 483058; CHECK-FP16-SD-NEXT: .cfi_offset w19, -83059; CHECK-FP16-SD-NEXT: .cfi_offset w20, -163060; CHECK-FP16-SD-NEXT: .cfi_offset w30, -323061; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill3062; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q03063; CHECK-FP16-SD-NEXT: bl __fixdfti3064; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload3065; CHECK-FP16-SD-NEXT: mov x19, x03066; CHECK-FP16-SD-NEXT: mov x20, x13067; CHECK-FP16-SD-NEXT: mov d0, v0.d[1]3068; CHECK-FP16-SD-NEXT: bl __fixdfti3069; CHECK-FP16-SD-NEXT: mov x2, x03070; CHECK-FP16-SD-NEXT: mov x3, x13071; CHECK-FP16-SD-NEXT: mov x0, x193072; CHECK-FP16-SD-NEXT: mov x1, x203073; CHECK-FP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload3074; CHECK-FP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload3075; CHECK-FP16-SD-NEXT: add sp, sp, #483076; CHECK-FP16-SD-NEXT: ret3077;3078; CHECK-NOFP16-GI-LABEL: fptos_v2f64_v2i128:3079; CHECK-NOFP16-GI: // %bb.0: // %entry3080; CHECK-NOFP16-GI-NEXT: str d8, [sp, #-32]! // 8-byte Folded Spill3081; CHECK-NOFP16-GI-NEXT: str x30, [sp, #8] // 8-byte Spill3082; CHECK-NOFP16-GI-NEXT: stp x20, x19, [sp, #16] // 16-byte Folded Spill3083; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 323084; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -83085; CHECK-NOFP16-GI-NEXT: .cfi_offset w20, -163086; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -243087; CHECK-NOFP16-GI-NEXT: .cfi_offset b8, -323088; CHECK-NOFP16-GI-NEXT: mov d8, v0.d[1]3089; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q03090; CHECK-NOFP16-GI-NEXT: bl __fixdfti3091; CHECK-NOFP16-GI-NEXT: fmov d0, d83092; CHECK-NOFP16-GI-NEXT: mov x19, x03093; CHECK-NOFP16-GI-NEXT: mov x20, x13094; CHECK-NOFP16-GI-NEXT: bl __fixdfti3095; CHECK-NOFP16-GI-NEXT: mov x2, x03096; CHECK-NOFP16-GI-NEXT: mov x3, x13097; CHECK-NOFP16-GI-NEXT: mov x0, x193098; CHECK-NOFP16-GI-NEXT: mov x1, x203099; CHECK-NOFP16-GI-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload3100; CHECK-NOFP16-GI-NEXT: ldr x30, [sp, #8] // 8-byte Reload3101; CHECK-NOFP16-GI-NEXT: ldr d8, [sp], #32 // 8-byte Folded Reload3102; CHECK-NOFP16-GI-NEXT: ret3103;3104; CHECK-FP16-GI-LABEL: fptos_v2f64_v2i128:3105; CHECK-FP16-GI: // %bb.0: // %entry3106; CHECK-FP16-GI-NEXT: str d8, [sp, #-32]! // 8-byte Folded Spill3107; CHECK-FP16-GI-NEXT: str x30, [sp, #8] // 8-byte Spill3108; CHECK-FP16-GI-NEXT: stp x20, x19, [sp, #16] // 16-byte Folded Spill3109; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 323110; CHECK-FP16-GI-NEXT: .cfi_offset w19, -83111; CHECK-FP16-GI-NEXT: .cfi_offset w20, -163112; CHECK-FP16-GI-NEXT: .cfi_offset w30, -243113; CHECK-FP16-GI-NEXT: .cfi_offset b8, -323114; CHECK-FP16-GI-NEXT: mov d8, v0.d[1]3115; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q03116; CHECK-FP16-GI-NEXT: bl __fixdfti3117; CHECK-FP16-GI-NEXT: fmov d0, d83118; CHECK-FP16-GI-NEXT: mov x19, x03119; CHECK-FP16-GI-NEXT: mov x20, x13120; CHECK-FP16-GI-NEXT: bl __fixdfti3121; CHECK-FP16-GI-NEXT: mov x2, x03122; CHECK-FP16-GI-NEXT: mov x3, x13123; CHECK-FP16-GI-NEXT: mov x0, x193124; CHECK-FP16-GI-NEXT: mov x1, x203125; CHECK-FP16-GI-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload3126; CHECK-FP16-GI-NEXT: ldr x30, [sp, #8] // 8-byte Reload3127; CHECK-FP16-GI-NEXT: ldr d8, [sp], #32 // 8-byte Folded Reload3128; CHECK-FP16-GI-NEXT: ret3129entry:3130 %c = fptosi <2 x double> %a to <2 x i128>3131 ret <2 x i128> %c3132}3133 3134define <2 x i128> @fptou_v2f64_v2i128(<2 x double> %a) {3135; CHECK-NOFP16-SD-LABEL: fptou_v2f64_v2i128:3136; CHECK-NOFP16-SD: // %bb.0: // %entry3137; CHECK-NOFP16-SD-NEXT: sub sp, sp, #483138; CHECK-NOFP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill3139; CHECK-NOFP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill3140; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 483141; CHECK-NOFP16-SD-NEXT: .cfi_offset w19, -83142; CHECK-NOFP16-SD-NEXT: .cfi_offset w20, -163143; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -323144; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill3145; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q03146; CHECK-NOFP16-SD-NEXT: bl __fixunsdfti3147; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload3148; CHECK-NOFP16-SD-NEXT: mov x19, x03149; CHECK-NOFP16-SD-NEXT: mov x20, x13150; CHECK-NOFP16-SD-NEXT: mov d0, v0.d[1]3151; CHECK-NOFP16-SD-NEXT: bl __fixunsdfti3152; CHECK-NOFP16-SD-NEXT: mov x2, x03153; CHECK-NOFP16-SD-NEXT: mov x3, x13154; CHECK-NOFP16-SD-NEXT: mov x0, x193155; CHECK-NOFP16-SD-NEXT: mov x1, x203156; CHECK-NOFP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload3157; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload3158; CHECK-NOFP16-SD-NEXT: add sp, sp, #483159; CHECK-NOFP16-SD-NEXT: ret3160;3161; CHECK-FP16-SD-LABEL: fptou_v2f64_v2i128:3162; CHECK-FP16-SD: // %bb.0: // %entry3163; CHECK-FP16-SD-NEXT: sub sp, sp, #483164; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill3165; CHECK-FP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill3166; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 483167; CHECK-FP16-SD-NEXT: .cfi_offset w19, -83168; CHECK-FP16-SD-NEXT: .cfi_offset w20, -163169; CHECK-FP16-SD-NEXT: .cfi_offset w30, -323170; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill3171; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q03172; CHECK-FP16-SD-NEXT: bl __fixunsdfti3173; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload3174; CHECK-FP16-SD-NEXT: mov x19, x03175; CHECK-FP16-SD-NEXT: mov x20, x13176; CHECK-FP16-SD-NEXT: mov d0, v0.d[1]3177; CHECK-FP16-SD-NEXT: bl __fixunsdfti3178; CHECK-FP16-SD-NEXT: mov x2, x03179; CHECK-FP16-SD-NEXT: mov x3, x13180; CHECK-FP16-SD-NEXT: mov x0, x193181; CHECK-FP16-SD-NEXT: mov x1, x203182; CHECK-FP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload3183; CHECK-FP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload3184; CHECK-FP16-SD-NEXT: add sp, sp, #483185; CHECK-FP16-SD-NEXT: ret3186;3187; CHECK-NOFP16-GI-LABEL: fptou_v2f64_v2i128:3188; CHECK-NOFP16-GI: // %bb.0: // %entry3189; CHECK-NOFP16-GI-NEXT: str d8, [sp, #-32]! // 8-byte Folded Spill3190; CHECK-NOFP16-GI-NEXT: str x30, [sp, #8] // 8-byte Spill3191; CHECK-NOFP16-GI-NEXT: stp x20, x19, [sp, #16] // 16-byte Folded Spill3192; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 323193; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -83194; CHECK-NOFP16-GI-NEXT: .cfi_offset w20, -163195; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -243196; CHECK-NOFP16-GI-NEXT: .cfi_offset b8, -323197; CHECK-NOFP16-GI-NEXT: mov d8, v0.d[1]3198; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q03199; CHECK-NOFP16-GI-NEXT: bl __fixunsdfti3200; CHECK-NOFP16-GI-NEXT: fmov d0, d83201; CHECK-NOFP16-GI-NEXT: mov x19, x03202; CHECK-NOFP16-GI-NEXT: mov x20, x13203; CHECK-NOFP16-GI-NEXT: bl __fixunsdfti3204; CHECK-NOFP16-GI-NEXT: mov x2, x03205; CHECK-NOFP16-GI-NEXT: mov x3, x13206; CHECK-NOFP16-GI-NEXT: mov x0, x193207; CHECK-NOFP16-GI-NEXT: mov x1, x203208; CHECK-NOFP16-GI-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload3209; CHECK-NOFP16-GI-NEXT: ldr x30, [sp, #8] // 8-byte Reload3210; CHECK-NOFP16-GI-NEXT: ldr d8, [sp], #32 // 8-byte Folded Reload3211; CHECK-NOFP16-GI-NEXT: ret3212;3213; CHECK-FP16-GI-LABEL: fptou_v2f64_v2i128:3214; CHECK-FP16-GI: // %bb.0: // %entry3215; CHECK-FP16-GI-NEXT: str d8, [sp, #-32]! // 8-byte Folded Spill3216; CHECK-FP16-GI-NEXT: str x30, [sp, #8] // 8-byte Spill3217; CHECK-FP16-GI-NEXT: stp x20, x19, [sp, #16] // 16-byte Folded Spill3218; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 323219; CHECK-FP16-GI-NEXT: .cfi_offset w19, -83220; CHECK-FP16-GI-NEXT: .cfi_offset w20, -163221; CHECK-FP16-GI-NEXT: .cfi_offset w30, -243222; CHECK-FP16-GI-NEXT: .cfi_offset b8, -323223; CHECK-FP16-GI-NEXT: mov d8, v0.d[1]3224; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q03225; CHECK-FP16-GI-NEXT: bl __fixunsdfti3226; CHECK-FP16-GI-NEXT: fmov d0, d83227; CHECK-FP16-GI-NEXT: mov x19, x03228; CHECK-FP16-GI-NEXT: mov x20, x13229; CHECK-FP16-GI-NEXT: bl __fixunsdfti3230; CHECK-FP16-GI-NEXT: mov x2, x03231; CHECK-FP16-GI-NEXT: mov x3, x13232; CHECK-FP16-GI-NEXT: mov x0, x193233; CHECK-FP16-GI-NEXT: mov x1, x203234; CHECK-FP16-GI-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload3235; CHECK-FP16-GI-NEXT: ldr x30, [sp, #8] // 8-byte Reload3236; CHECK-FP16-GI-NEXT: ldr d8, [sp], #32 // 8-byte Folded Reload3237; CHECK-FP16-GI-NEXT: ret3238entry:3239 %c = fptoui <2 x double> %a to <2 x i128>3240 ret <2 x i128> %c3241}3242 3243define <2 x i64> @fptos_v2f32_v2i64(<2 x float> %a) {3244; CHECK-LABEL: fptos_v2f32_v2i64:3245; CHECK: // %bb.0: // %entry3246; CHECK-NEXT: fcvtl v0.2d, v0.2s3247; CHECK-NEXT: fcvtzs v0.2d, v0.2d3248; CHECK-NEXT: ret3249entry:3250 %c = fptosi <2 x float> %a to <2 x i64>3251 ret <2 x i64> %c3252}3253 3254define <2 x i64> @fptou_v2f32_v2i64(<2 x float> %a) {3255; CHECK-LABEL: fptou_v2f32_v2i64:3256; CHECK: // %bb.0: // %entry3257; CHECK-NEXT: fcvtl v0.2d, v0.2s3258; CHECK-NEXT: fcvtzu v0.2d, v0.2d3259; CHECK-NEXT: ret3260entry:3261 %c = fptoui <2 x float> %a to <2 x i64>3262 ret <2 x i64> %c3263}3264 3265define <3 x i64> @fptos_v3f32_v3i64(<3 x float> %a) {3266; CHECK-NOFP16-SD-LABEL: fptos_v3f32_v3i64:3267; CHECK-NOFP16-SD: // %bb.0: // %entry3268; CHECK-NOFP16-SD-NEXT: fcvtl v1.2d, v0.2s3269; CHECK-NOFP16-SD-NEXT: fcvtl2 v0.2d, v0.4s3270; CHECK-NOFP16-SD-NEXT: fcvtzs v3.2d, v1.2d3271; CHECK-NOFP16-SD-NEXT: fcvtzs v2.2d, v0.2d3272; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q23273; CHECK-NOFP16-SD-NEXT: fmov d0, d33274; CHECK-NOFP16-SD-NEXT: ext v1.16b, v3.16b, v3.16b, #83275; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q13276; CHECK-NOFP16-SD-NEXT: ret3277;3278; CHECK-FP16-SD-LABEL: fptos_v3f32_v3i64:3279; CHECK-FP16-SD: // %bb.0: // %entry3280; CHECK-FP16-SD-NEXT: fcvtl v1.2d, v0.2s3281; CHECK-FP16-SD-NEXT: fcvtl2 v0.2d, v0.4s3282; CHECK-FP16-SD-NEXT: fcvtzs v3.2d, v1.2d3283; CHECK-FP16-SD-NEXT: fcvtzs v2.2d, v0.2d3284; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q23285; CHECK-FP16-SD-NEXT: fmov d0, d33286; CHECK-FP16-SD-NEXT: ext v1.16b, v3.16b, v3.16b, #83287; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q13288; CHECK-FP16-SD-NEXT: ret3289;3290; CHECK-NOFP16-GI-LABEL: fptos_v3f32_v3i64:3291; CHECK-NOFP16-GI: // %bb.0: // %entry3292; CHECK-NOFP16-GI-NEXT: mov v1.s[0], v0.s[2]3293; CHECK-NOFP16-GI-NEXT: fcvtl v0.2d, v0.2s3294; CHECK-NOFP16-GI-NEXT: fcvtl v1.2d, v1.2s3295; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v0.2d3296; CHECK-NOFP16-GI-NEXT: fcvtzs v2.2d, v1.2d3297; CHECK-NOFP16-GI-NEXT: mov d1, v0.d[1]3298; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q03299; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q23300; CHECK-NOFP16-GI-NEXT: ret3301;3302; CHECK-FP16-GI-LABEL: fptos_v3f32_v3i64:3303; CHECK-FP16-GI: // %bb.0: // %entry3304; CHECK-FP16-GI-NEXT: mov v1.s[0], v0.s[2]3305; CHECK-FP16-GI-NEXT: fcvtl v0.2d, v0.2s3306; CHECK-FP16-GI-NEXT: fcvtl v1.2d, v1.2s3307; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v0.2d3308; CHECK-FP16-GI-NEXT: fcvtzs v2.2d, v1.2d3309; CHECK-FP16-GI-NEXT: mov d1, v0.d[1]3310; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q03311; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q23312; CHECK-FP16-GI-NEXT: ret3313entry:3314 %c = fptosi <3 x float> %a to <3 x i64>3315 ret <3 x i64> %c3316}3317 3318define <3 x i64> @fptou_v3f32_v3i64(<3 x float> %a) {3319; CHECK-NOFP16-SD-LABEL: fptou_v3f32_v3i64:3320; CHECK-NOFP16-SD: // %bb.0: // %entry3321; CHECK-NOFP16-SD-NEXT: fcvtl v1.2d, v0.2s3322; CHECK-NOFP16-SD-NEXT: fcvtl2 v0.2d, v0.4s3323; CHECK-NOFP16-SD-NEXT: fcvtzu v3.2d, v1.2d3324; CHECK-NOFP16-SD-NEXT: fcvtzu v2.2d, v0.2d3325; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q23326; CHECK-NOFP16-SD-NEXT: fmov d0, d33327; CHECK-NOFP16-SD-NEXT: ext v1.16b, v3.16b, v3.16b, #83328; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q13329; CHECK-NOFP16-SD-NEXT: ret3330;3331; CHECK-FP16-SD-LABEL: fptou_v3f32_v3i64:3332; CHECK-FP16-SD: // %bb.0: // %entry3333; CHECK-FP16-SD-NEXT: fcvtl v1.2d, v0.2s3334; CHECK-FP16-SD-NEXT: fcvtl2 v0.2d, v0.4s3335; CHECK-FP16-SD-NEXT: fcvtzu v3.2d, v1.2d3336; CHECK-FP16-SD-NEXT: fcvtzu v2.2d, v0.2d3337; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q23338; CHECK-FP16-SD-NEXT: fmov d0, d33339; CHECK-FP16-SD-NEXT: ext v1.16b, v3.16b, v3.16b, #83340; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q13341; CHECK-FP16-SD-NEXT: ret3342;3343; CHECK-NOFP16-GI-LABEL: fptou_v3f32_v3i64:3344; CHECK-NOFP16-GI: // %bb.0: // %entry3345; CHECK-NOFP16-GI-NEXT: mov v1.s[0], v0.s[2]3346; CHECK-NOFP16-GI-NEXT: fcvtl v0.2d, v0.2s3347; CHECK-NOFP16-GI-NEXT: fcvtl v1.2d, v1.2s3348; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v0.2d3349; CHECK-NOFP16-GI-NEXT: fcvtzu v2.2d, v1.2d3350; CHECK-NOFP16-GI-NEXT: mov d1, v0.d[1]3351; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q03352; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q23353; CHECK-NOFP16-GI-NEXT: ret3354;3355; CHECK-FP16-GI-LABEL: fptou_v3f32_v3i64:3356; CHECK-FP16-GI: // %bb.0: // %entry3357; CHECK-FP16-GI-NEXT: mov v1.s[0], v0.s[2]3358; CHECK-FP16-GI-NEXT: fcvtl v0.2d, v0.2s3359; CHECK-FP16-GI-NEXT: fcvtl v1.2d, v1.2s3360; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v0.2d3361; CHECK-FP16-GI-NEXT: fcvtzu v2.2d, v1.2d3362; CHECK-FP16-GI-NEXT: mov d1, v0.d[1]3363; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q03364; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q23365; CHECK-FP16-GI-NEXT: ret3366entry:3367 %c = fptoui <3 x float> %a to <3 x i64>3368 ret <3 x i64> %c3369}3370 3371define <4 x i64> @fptos_v4f32_v4i64(<4 x float> %a) {3372; CHECK-NOFP16-SD-LABEL: fptos_v4f32_v4i64:3373; CHECK-NOFP16-SD: // %bb.0: // %entry3374; CHECK-NOFP16-SD-NEXT: fcvtl2 v1.2d, v0.4s3375; CHECK-NOFP16-SD-NEXT: fcvtl v0.2d, v0.2s3376; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v1.2d3377; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v0.2d3378; CHECK-NOFP16-SD-NEXT: ret3379;3380; CHECK-FP16-SD-LABEL: fptos_v4f32_v4i64:3381; CHECK-FP16-SD: // %bb.0: // %entry3382; CHECK-FP16-SD-NEXT: fcvtl2 v1.2d, v0.4s3383; CHECK-FP16-SD-NEXT: fcvtl v0.2d, v0.2s3384; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v1.2d3385; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v0.2d3386; CHECK-FP16-SD-NEXT: ret3387;3388; CHECK-NOFP16-GI-LABEL: fptos_v4f32_v4i64:3389; CHECK-NOFP16-GI: // %bb.0: // %entry3390; CHECK-NOFP16-GI-NEXT: fcvtl v1.2d, v0.2s3391; CHECK-NOFP16-GI-NEXT: fcvtl2 v2.2d, v0.4s3392; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v1.2d3393; CHECK-NOFP16-GI-NEXT: fcvtzs v1.2d, v2.2d3394; CHECK-NOFP16-GI-NEXT: ret3395;3396; CHECK-FP16-GI-LABEL: fptos_v4f32_v4i64:3397; CHECK-FP16-GI: // %bb.0: // %entry3398; CHECK-FP16-GI-NEXT: fcvtl v1.2d, v0.2s3399; CHECK-FP16-GI-NEXT: fcvtl2 v2.2d, v0.4s3400; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v1.2d3401; CHECK-FP16-GI-NEXT: fcvtzs v1.2d, v2.2d3402; CHECK-FP16-GI-NEXT: ret3403entry:3404 %c = fptosi <4 x float> %a to <4 x i64>3405 ret <4 x i64> %c3406}3407 3408define <4 x i64> @fptou_v4f32_v4i64(<4 x float> %a) {3409; CHECK-NOFP16-SD-LABEL: fptou_v4f32_v4i64:3410; CHECK-NOFP16-SD: // %bb.0: // %entry3411; CHECK-NOFP16-SD-NEXT: fcvtl2 v1.2d, v0.4s3412; CHECK-NOFP16-SD-NEXT: fcvtl v0.2d, v0.2s3413; CHECK-NOFP16-SD-NEXT: fcvtzu v1.2d, v1.2d3414; CHECK-NOFP16-SD-NEXT: fcvtzu v0.2d, v0.2d3415; CHECK-NOFP16-SD-NEXT: ret3416;3417; CHECK-FP16-SD-LABEL: fptou_v4f32_v4i64:3418; CHECK-FP16-SD: // %bb.0: // %entry3419; CHECK-FP16-SD-NEXT: fcvtl2 v1.2d, v0.4s3420; CHECK-FP16-SD-NEXT: fcvtl v0.2d, v0.2s3421; CHECK-FP16-SD-NEXT: fcvtzu v1.2d, v1.2d3422; CHECK-FP16-SD-NEXT: fcvtzu v0.2d, v0.2d3423; CHECK-FP16-SD-NEXT: ret3424;3425; CHECK-NOFP16-GI-LABEL: fptou_v4f32_v4i64:3426; CHECK-NOFP16-GI: // %bb.0: // %entry3427; CHECK-NOFP16-GI-NEXT: fcvtl v1.2d, v0.2s3428; CHECK-NOFP16-GI-NEXT: fcvtl2 v2.2d, v0.4s3429; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v1.2d3430; CHECK-NOFP16-GI-NEXT: fcvtzu v1.2d, v2.2d3431; CHECK-NOFP16-GI-NEXT: ret3432;3433; CHECK-FP16-GI-LABEL: fptou_v4f32_v4i64:3434; CHECK-FP16-GI: // %bb.0: // %entry3435; CHECK-FP16-GI-NEXT: fcvtl v1.2d, v0.2s3436; CHECK-FP16-GI-NEXT: fcvtl2 v2.2d, v0.4s3437; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v1.2d3438; CHECK-FP16-GI-NEXT: fcvtzu v1.2d, v2.2d3439; CHECK-FP16-GI-NEXT: ret3440entry:3441 %c = fptoui <4 x float> %a to <4 x i64>3442 ret <4 x i64> %c3443}3444 3445define <8 x i64> @fptos_v8f32_v8i64(<8 x float> %a) {3446; CHECK-NOFP16-SD-LABEL: fptos_v8f32_v8i64:3447; CHECK-NOFP16-SD: // %bb.0: // %entry3448; CHECK-NOFP16-SD-NEXT: fcvtl v2.2d, v0.2s3449; CHECK-NOFP16-SD-NEXT: fcvtl2 v3.2d, v0.4s3450; CHECK-NOFP16-SD-NEXT: fcvtl2 v4.2d, v1.4s3451; CHECK-NOFP16-SD-NEXT: fcvtl v5.2d, v1.2s3452; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2d, v2.2d3453; CHECK-NOFP16-SD-NEXT: fcvtzs v1.2d, v3.2d3454; CHECK-NOFP16-SD-NEXT: fcvtzs v3.2d, v4.2d3455; CHECK-NOFP16-SD-NEXT: fcvtzs v2.2d, v5.2d3456; CHECK-NOFP16-SD-NEXT: ret3457;3458; CHECK-FP16-SD-LABEL: fptos_v8f32_v8i64:3459; CHECK-FP16-SD: // %bb.0: // %entry3460; CHECK-FP16-SD-NEXT: fcvtl v2.2d, v0.2s3461; CHECK-FP16-SD-NEXT: fcvtl2 v3.2d, v0.4s3462; CHECK-FP16-SD-NEXT: fcvtl2 v4.2d, v1.4s3463; CHECK-FP16-SD-NEXT: fcvtl v5.2d, v1.2s3464; CHECK-FP16-SD-NEXT: fcvtzs v0.2d, v2.2d3465; CHECK-FP16-SD-NEXT: fcvtzs v1.2d, v3.2d3466; CHECK-FP16-SD-NEXT: fcvtzs v3.2d, v4.2d3467; CHECK-FP16-SD-NEXT: fcvtzs v2.2d, v5.2d3468; CHECK-FP16-SD-NEXT: ret3469;3470; CHECK-NOFP16-GI-LABEL: fptos_v8f32_v8i64:3471; CHECK-NOFP16-GI: // %bb.0: // %entry3472; CHECK-NOFP16-GI-NEXT: fcvtl v2.2d, v0.2s3473; CHECK-NOFP16-GI-NEXT: fcvtl2 v3.2d, v0.4s3474; CHECK-NOFP16-GI-NEXT: fcvtl v4.2d, v1.2s3475; CHECK-NOFP16-GI-NEXT: fcvtl2 v5.2d, v1.4s3476; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v2.2d3477; CHECK-NOFP16-GI-NEXT: fcvtzs v1.2d, v3.2d3478; CHECK-NOFP16-GI-NEXT: fcvtzs v2.2d, v4.2d3479; CHECK-NOFP16-GI-NEXT: fcvtzs v3.2d, v5.2d3480; CHECK-NOFP16-GI-NEXT: ret3481;3482; CHECK-FP16-GI-LABEL: fptos_v8f32_v8i64:3483; CHECK-FP16-GI: // %bb.0: // %entry3484; CHECK-FP16-GI-NEXT: fcvtl v2.2d, v0.2s3485; CHECK-FP16-GI-NEXT: fcvtl2 v3.2d, v0.4s3486; CHECK-FP16-GI-NEXT: fcvtl v4.2d, v1.2s3487; CHECK-FP16-GI-NEXT: fcvtl2 v5.2d, v1.4s3488; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v2.2d3489; CHECK-FP16-GI-NEXT: fcvtzs v1.2d, v3.2d3490; CHECK-FP16-GI-NEXT: fcvtzs v2.2d, v4.2d3491; CHECK-FP16-GI-NEXT: fcvtzs v3.2d, v5.2d3492; CHECK-FP16-GI-NEXT: ret3493entry:3494 %c = fptosi <8 x float> %a to <8 x i64>3495 ret <8 x i64> %c3496}3497 3498define <8 x i64> @fptou_v8f32_v8i64(<8 x float> %a) {3499; CHECK-NOFP16-SD-LABEL: fptou_v8f32_v8i64:3500; CHECK-NOFP16-SD: // %bb.0: // %entry3501; CHECK-NOFP16-SD-NEXT: fcvtl v2.2d, v0.2s3502; CHECK-NOFP16-SD-NEXT: fcvtl2 v3.2d, v0.4s3503; CHECK-NOFP16-SD-NEXT: fcvtl2 v4.2d, v1.4s3504; CHECK-NOFP16-SD-NEXT: fcvtl v5.2d, v1.2s3505; CHECK-NOFP16-SD-NEXT: fcvtzu v0.2d, v2.2d3506; CHECK-NOFP16-SD-NEXT: fcvtzu v1.2d, v3.2d3507; CHECK-NOFP16-SD-NEXT: fcvtzu v3.2d, v4.2d3508; CHECK-NOFP16-SD-NEXT: fcvtzu v2.2d, v5.2d3509; CHECK-NOFP16-SD-NEXT: ret3510;3511; CHECK-FP16-SD-LABEL: fptou_v8f32_v8i64:3512; CHECK-FP16-SD: // %bb.0: // %entry3513; CHECK-FP16-SD-NEXT: fcvtl v2.2d, v0.2s3514; CHECK-FP16-SD-NEXT: fcvtl2 v3.2d, v0.4s3515; CHECK-FP16-SD-NEXT: fcvtl2 v4.2d, v1.4s3516; CHECK-FP16-SD-NEXT: fcvtl v5.2d, v1.2s3517; CHECK-FP16-SD-NEXT: fcvtzu v0.2d, v2.2d3518; CHECK-FP16-SD-NEXT: fcvtzu v1.2d, v3.2d3519; CHECK-FP16-SD-NEXT: fcvtzu v3.2d, v4.2d3520; CHECK-FP16-SD-NEXT: fcvtzu v2.2d, v5.2d3521; CHECK-FP16-SD-NEXT: ret3522;3523; CHECK-NOFP16-GI-LABEL: fptou_v8f32_v8i64:3524; CHECK-NOFP16-GI: // %bb.0: // %entry3525; CHECK-NOFP16-GI-NEXT: fcvtl v2.2d, v0.2s3526; CHECK-NOFP16-GI-NEXT: fcvtl2 v3.2d, v0.4s3527; CHECK-NOFP16-GI-NEXT: fcvtl v4.2d, v1.2s3528; CHECK-NOFP16-GI-NEXT: fcvtl2 v5.2d, v1.4s3529; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v2.2d3530; CHECK-NOFP16-GI-NEXT: fcvtzu v1.2d, v3.2d3531; CHECK-NOFP16-GI-NEXT: fcvtzu v2.2d, v4.2d3532; CHECK-NOFP16-GI-NEXT: fcvtzu v3.2d, v5.2d3533; CHECK-NOFP16-GI-NEXT: ret3534;3535; CHECK-FP16-GI-LABEL: fptou_v8f32_v8i64:3536; CHECK-FP16-GI: // %bb.0: // %entry3537; CHECK-FP16-GI-NEXT: fcvtl v2.2d, v0.2s3538; CHECK-FP16-GI-NEXT: fcvtl2 v3.2d, v0.4s3539; CHECK-FP16-GI-NEXT: fcvtl v4.2d, v1.2s3540; CHECK-FP16-GI-NEXT: fcvtl2 v5.2d, v1.4s3541; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v2.2d3542; CHECK-FP16-GI-NEXT: fcvtzu v1.2d, v3.2d3543; CHECK-FP16-GI-NEXT: fcvtzu v2.2d, v4.2d3544; CHECK-FP16-GI-NEXT: fcvtzu v3.2d, v5.2d3545; CHECK-FP16-GI-NEXT: ret3546entry:3547 %c = fptoui <8 x float> %a to <8 x i64>3548 ret <8 x i64> %c3549}3550 3551define <2 x i32> @fptos_v2f32_v2i32(<2 x float> %a) {3552; CHECK-LABEL: fptos_v2f32_v2i32:3553; CHECK: // %bb.0: // %entry3554; CHECK-NEXT: fcvtzs v0.2s, v0.2s3555; CHECK-NEXT: ret3556entry:3557 %c = fptosi <2 x float> %a to <2 x i32>3558 ret <2 x i32> %c3559}3560 3561define <2 x i32> @fptou_v2f32_v2i32(<2 x float> %a) {3562; CHECK-LABEL: fptou_v2f32_v2i32:3563; CHECK: // %bb.0: // %entry3564; CHECK-NEXT: fcvtzu v0.2s, v0.2s3565; CHECK-NEXT: ret3566entry:3567 %c = fptoui <2 x float> %a to <2 x i32>3568 ret <2 x i32> %c3569}3570 3571define <3 x i32> @fptos_v3f32_v3i32(<3 x float> %a) {3572; CHECK-LABEL: fptos_v3f32_v3i32:3573; CHECK: // %bb.0: // %entry3574; CHECK-NEXT: fcvtzs v0.4s, v0.4s3575; CHECK-NEXT: ret3576entry:3577 %c = fptosi <3 x float> %a to <3 x i32>3578 ret <3 x i32> %c3579}3580 3581define <3 x i32> @fptou_v3f32_v3i32(<3 x float> %a) {3582; CHECK-LABEL: fptou_v3f32_v3i32:3583; CHECK: // %bb.0: // %entry3584; CHECK-NEXT: fcvtzu v0.4s, v0.4s3585; CHECK-NEXT: ret3586entry:3587 %c = fptoui <3 x float> %a to <3 x i32>3588 ret <3 x i32> %c3589}3590 3591define <4 x i32> @fptos_v4f32_v4i32(<4 x float> %a) {3592; CHECK-LABEL: fptos_v4f32_v4i32:3593; CHECK: // %bb.0: // %entry3594; CHECK-NEXT: fcvtzs v0.4s, v0.4s3595; CHECK-NEXT: ret3596entry:3597 %c = fptosi <4 x float> %a to <4 x i32>3598 ret <4 x i32> %c3599}3600 3601define <4 x i32> @fptou_v4f32_v4i32(<4 x float> %a) {3602; CHECK-LABEL: fptou_v4f32_v4i32:3603; CHECK: // %bb.0: // %entry3604; CHECK-NEXT: fcvtzu v0.4s, v0.4s3605; CHECK-NEXT: ret3606entry:3607 %c = fptoui <4 x float> %a to <4 x i32>3608 ret <4 x i32> %c3609}3610 3611define <8 x i32> @fptos_v8f32_v8i32(<8 x float> %a) {3612; CHECK-LABEL: fptos_v8f32_v8i32:3613; CHECK: // %bb.0: // %entry3614; CHECK-NEXT: fcvtzs v0.4s, v0.4s3615; CHECK-NEXT: fcvtzs v1.4s, v1.4s3616; CHECK-NEXT: ret3617entry:3618 %c = fptosi <8 x float> %a to <8 x i32>3619 ret <8 x i32> %c3620}3621 3622define <8 x i32> @fptou_v8f32_v8i32(<8 x float> %a) {3623; CHECK-LABEL: fptou_v8f32_v8i32:3624; CHECK: // %bb.0: // %entry3625; CHECK-NEXT: fcvtzu v0.4s, v0.4s3626; CHECK-NEXT: fcvtzu v1.4s, v1.4s3627; CHECK-NEXT: ret3628entry:3629 %c = fptoui <8 x float> %a to <8 x i32>3630 ret <8 x i32> %c3631}3632 3633define <2 x i16> @fptos_v2f32_v2i16(<2 x float> %a) {3634; CHECK-LABEL: fptos_v2f32_v2i16:3635; CHECK: // %bb.0: // %entry3636; CHECK-NEXT: fcvtzs v0.2s, v0.2s3637; CHECK-NEXT: ret3638entry:3639 %c = fptosi <2 x float> %a to <2 x i16>3640 ret <2 x i16> %c3641}3642 3643define <2 x i16> @fptou_v2f32_v2i16(<2 x float> %a) {3644; CHECK-NOFP16-SD-LABEL: fptou_v2f32_v2i16:3645; CHECK-NOFP16-SD: // %bb.0: // %entry3646; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2s, v0.2s3647; CHECK-NOFP16-SD-NEXT: ret3648;3649; CHECK-FP16-SD-LABEL: fptou_v2f32_v2i16:3650; CHECK-FP16-SD: // %bb.0: // %entry3651; CHECK-FP16-SD-NEXT: fcvtzs v0.2s, v0.2s3652; CHECK-FP16-SD-NEXT: ret3653;3654; CHECK-NOFP16-GI-LABEL: fptou_v2f32_v2i16:3655; CHECK-NOFP16-GI: // %bb.0: // %entry3656; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2s, v0.2s3657; CHECK-NOFP16-GI-NEXT: ret3658;3659; CHECK-FP16-GI-LABEL: fptou_v2f32_v2i16:3660; CHECK-FP16-GI: // %bb.0: // %entry3661; CHECK-FP16-GI-NEXT: fcvtzu v0.2s, v0.2s3662; CHECK-FP16-GI-NEXT: ret3663entry:3664 %c = fptoui <2 x float> %a to <2 x i16>3665 ret <2 x i16> %c3666}3667 3668define <3 x i16> @fptos_v3f32_v3i16(<3 x float> %a) {3669; CHECK-LABEL: fptos_v3f32_v3i16:3670; CHECK: // %bb.0: // %entry3671; CHECK-NEXT: fcvtzs v0.4s, v0.4s3672; CHECK-NEXT: xtn v0.4h, v0.4s3673; CHECK-NEXT: ret3674entry:3675 %c = fptosi <3 x float> %a to <3 x i16>3676 ret <3 x i16> %c3677}3678 3679define <3 x i16> @fptou_v3f32_v3i16(<3 x float> %a) {3680; CHECK-LABEL: fptou_v3f32_v3i16:3681; CHECK: // %bb.0: // %entry3682; CHECK-NEXT: fcvtzu v0.4s, v0.4s3683; CHECK-NEXT: xtn v0.4h, v0.4s3684; CHECK-NEXT: ret3685entry:3686 %c = fptoui <3 x float> %a to <3 x i16>3687 ret <3 x i16> %c3688}3689 3690define <4 x i16> @fptos_v4f32_v4i16(<4 x float> %a) {3691; CHECK-LABEL: fptos_v4f32_v4i16:3692; CHECK: // %bb.0: // %entry3693; CHECK-NEXT: fcvtzs v0.4s, v0.4s3694; CHECK-NEXT: xtn v0.4h, v0.4s3695; CHECK-NEXT: ret3696entry:3697 %c = fptosi <4 x float> %a to <4 x i16>3698 ret <4 x i16> %c3699}3700 3701define <4 x i16> @fptou_v4f32_v4i16(<4 x float> %a) {3702; CHECK-LABEL: fptou_v4f32_v4i16:3703; CHECK: // %bb.0: // %entry3704; CHECK-NEXT: fcvtzu v0.4s, v0.4s3705; CHECK-NEXT: xtn v0.4h, v0.4s3706; CHECK-NEXT: ret3707entry:3708 %c = fptoui <4 x float> %a to <4 x i16>3709 ret <4 x i16> %c3710}3711 3712define <8 x i16> @fptos_v8f32_v8i16(<8 x float> %a) {3713; CHECK-NOFP16-SD-LABEL: fptos_v8f32_v8i16:3714; CHECK-NOFP16-SD: // %bb.0: // %entry3715; CHECK-NOFP16-SD-NEXT: fcvtzs v1.4s, v1.4s3716; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s3717; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h3718; CHECK-NOFP16-SD-NEXT: ret3719;3720; CHECK-FP16-SD-LABEL: fptos_v8f32_v8i16:3721; CHECK-FP16-SD: // %bb.0: // %entry3722; CHECK-FP16-SD-NEXT: fcvtzs v1.4s, v1.4s3723; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s3724; CHECK-FP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h3725; CHECK-FP16-SD-NEXT: ret3726;3727; CHECK-NOFP16-GI-LABEL: fptos_v8f32_v8i16:3728; CHECK-NOFP16-GI: // %bb.0: // %entry3729; CHECK-NOFP16-GI-NEXT: fcvtzs v0.4s, v0.4s3730; CHECK-NOFP16-GI-NEXT: fcvtzs v1.4s, v1.4s3731; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h3732; CHECK-NOFP16-GI-NEXT: ret3733;3734; CHECK-FP16-GI-LABEL: fptos_v8f32_v8i16:3735; CHECK-FP16-GI: // %bb.0: // %entry3736; CHECK-FP16-GI-NEXT: fcvtzs v0.4s, v0.4s3737; CHECK-FP16-GI-NEXT: fcvtzs v1.4s, v1.4s3738; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h3739; CHECK-FP16-GI-NEXT: ret3740entry:3741 %c = fptosi <8 x float> %a to <8 x i16>3742 ret <8 x i16> %c3743}3744 3745define <8 x i16> @fptou_v8f32_v8i16(<8 x float> %a) {3746; CHECK-NOFP16-SD-LABEL: fptou_v8f32_v8i16:3747; CHECK-NOFP16-SD: // %bb.0: // %entry3748; CHECK-NOFP16-SD-NEXT: fcvtzu v1.4s, v1.4s3749; CHECK-NOFP16-SD-NEXT: fcvtzu v0.4s, v0.4s3750; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h3751; CHECK-NOFP16-SD-NEXT: ret3752;3753; CHECK-FP16-SD-LABEL: fptou_v8f32_v8i16:3754; CHECK-FP16-SD: // %bb.0: // %entry3755; CHECK-FP16-SD-NEXT: fcvtzu v1.4s, v1.4s3756; CHECK-FP16-SD-NEXT: fcvtzu v0.4s, v0.4s3757; CHECK-FP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h3758; CHECK-FP16-SD-NEXT: ret3759;3760; CHECK-NOFP16-GI-LABEL: fptou_v8f32_v8i16:3761; CHECK-NOFP16-GI: // %bb.0: // %entry3762; CHECK-NOFP16-GI-NEXT: fcvtzu v0.4s, v0.4s3763; CHECK-NOFP16-GI-NEXT: fcvtzu v1.4s, v1.4s3764; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h3765; CHECK-NOFP16-GI-NEXT: ret3766;3767; CHECK-FP16-GI-LABEL: fptou_v8f32_v8i16:3768; CHECK-FP16-GI: // %bb.0: // %entry3769; CHECK-FP16-GI-NEXT: fcvtzu v0.4s, v0.4s3770; CHECK-FP16-GI-NEXT: fcvtzu v1.4s, v1.4s3771; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h3772; CHECK-FP16-GI-NEXT: ret3773entry:3774 %c = fptoui <8 x float> %a to <8 x i16>3775 ret <8 x i16> %c3776}3777 3778define <16 x i16> @fptos_v16f32_v16i16(<16 x float> %a) {3779; CHECK-NOFP16-SD-LABEL: fptos_v16f32_v16i16:3780; CHECK-NOFP16-SD: // %bb.0: // %entry3781; CHECK-NOFP16-SD-NEXT: fcvtzs v1.4s, v1.4s3782; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s3783; CHECK-NOFP16-SD-NEXT: fcvtzs v3.4s, v3.4s3784; CHECK-NOFP16-SD-NEXT: fcvtzs v2.4s, v2.4s3785; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h3786; CHECK-NOFP16-SD-NEXT: uzp1 v1.8h, v2.8h, v3.8h3787; CHECK-NOFP16-SD-NEXT: ret3788;3789; CHECK-FP16-SD-LABEL: fptos_v16f32_v16i16:3790; CHECK-FP16-SD: // %bb.0: // %entry3791; CHECK-FP16-SD-NEXT: fcvtzs v1.4s, v1.4s3792; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s3793; CHECK-FP16-SD-NEXT: fcvtzs v3.4s, v3.4s3794; CHECK-FP16-SD-NEXT: fcvtzs v2.4s, v2.4s3795; CHECK-FP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h3796; CHECK-FP16-SD-NEXT: uzp1 v1.8h, v2.8h, v3.8h3797; CHECK-FP16-SD-NEXT: ret3798;3799; CHECK-NOFP16-GI-LABEL: fptos_v16f32_v16i16:3800; CHECK-NOFP16-GI: // %bb.0: // %entry3801; CHECK-NOFP16-GI-NEXT: fcvtzs v0.4s, v0.4s3802; CHECK-NOFP16-GI-NEXT: fcvtzs v1.4s, v1.4s3803; CHECK-NOFP16-GI-NEXT: fcvtzs v2.4s, v2.4s3804; CHECK-NOFP16-GI-NEXT: fcvtzs v3.4s, v3.4s3805; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h3806; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h3807; CHECK-NOFP16-GI-NEXT: ret3808;3809; CHECK-FP16-GI-LABEL: fptos_v16f32_v16i16:3810; CHECK-FP16-GI: // %bb.0: // %entry3811; CHECK-FP16-GI-NEXT: fcvtzs v0.4s, v0.4s3812; CHECK-FP16-GI-NEXT: fcvtzs v1.4s, v1.4s3813; CHECK-FP16-GI-NEXT: fcvtzs v2.4s, v2.4s3814; CHECK-FP16-GI-NEXT: fcvtzs v3.4s, v3.4s3815; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h3816; CHECK-FP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h3817; CHECK-FP16-GI-NEXT: ret3818entry:3819 %c = fptosi <16 x float> %a to <16 x i16>3820 ret <16 x i16> %c3821}3822 3823define <16 x i16> @fptou_v16f32_v16i16(<16 x float> %a) {3824; CHECK-NOFP16-SD-LABEL: fptou_v16f32_v16i16:3825; CHECK-NOFP16-SD: // %bb.0: // %entry3826; CHECK-NOFP16-SD-NEXT: fcvtzu v1.4s, v1.4s3827; CHECK-NOFP16-SD-NEXT: fcvtzu v0.4s, v0.4s3828; CHECK-NOFP16-SD-NEXT: fcvtzu v3.4s, v3.4s3829; CHECK-NOFP16-SD-NEXT: fcvtzu v2.4s, v2.4s3830; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h3831; CHECK-NOFP16-SD-NEXT: uzp1 v1.8h, v2.8h, v3.8h3832; CHECK-NOFP16-SD-NEXT: ret3833;3834; CHECK-FP16-SD-LABEL: fptou_v16f32_v16i16:3835; CHECK-FP16-SD: // %bb.0: // %entry3836; CHECK-FP16-SD-NEXT: fcvtzu v1.4s, v1.4s3837; CHECK-FP16-SD-NEXT: fcvtzu v0.4s, v0.4s3838; CHECK-FP16-SD-NEXT: fcvtzu v3.4s, v3.4s3839; CHECK-FP16-SD-NEXT: fcvtzu v2.4s, v2.4s3840; CHECK-FP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h3841; CHECK-FP16-SD-NEXT: uzp1 v1.8h, v2.8h, v3.8h3842; CHECK-FP16-SD-NEXT: ret3843;3844; CHECK-NOFP16-GI-LABEL: fptou_v16f32_v16i16:3845; CHECK-NOFP16-GI: // %bb.0: // %entry3846; CHECK-NOFP16-GI-NEXT: fcvtzu v0.4s, v0.4s3847; CHECK-NOFP16-GI-NEXT: fcvtzu v1.4s, v1.4s3848; CHECK-NOFP16-GI-NEXT: fcvtzu v2.4s, v2.4s3849; CHECK-NOFP16-GI-NEXT: fcvtzu v3.4s, v3.4s3850; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h3851; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h3852; CHECK-NOFP16-GI-NEXT: ret3853;3854; CHECK-FP16-GI-LABEL: fptou_v16f32_v16i16:3855; CHECK-FP16-GI: // %bb.0: // %entry3856; CHECK-FP16-GI-NEXT: fcvtzu v0.4s, v0.4s3857; CHECK-FP16-GI-NEXT: fcvtzu v1.4s, v1.4s3858; CHECK-FP16-GI-NEXT: fcvtzu v2.4s, v2.4s3859; CHECK-FP16-GI-NEXT: fcvtzu v3.4s, v3.4s3860; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h3861; CHECK-FP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h3862; CHECK-FP16-GI-NEXT: ret3863entry:3864 %c = fptoui <16 x float> %a to <16 x i16>3865 ret <16 x i16> %c3866}3867 3868define <2 x i8> @fptos_v2f32_v2i8(<2 x float> %a) {3869; CHECK-LABEL: fptos_v2f32_v2i8:3870; CHECK: // %bb.0: // %entry3871; CHECK-NEXT: fcvtzs v0.2s, v0.2s3872; CHECK-NEXT: ret3873entry:3874 %c = fptosi <2 x float> %a to <2 x i8>3875 ret <2 x i8> %c3876}3877 3878define <2 x i8> @fptou_v2f32_v2i8(<2 x float> %a) {3879; CHECK-NOFP16-SD-LABEL: fptou_v2f32_v2i8:3880; CHECK-NOFP16-SD: // %bb.0: // %entry3881; CHECK-NOFP16-SD-NEXT: fcvtzs v0.2s, v0.2s3882; CHECK-NOFP16-SD-NEXT: ret3883;3884; CHECK-FP16-SD-LABEL: fptou_v2f32_v2i8:3885; CHECK-FP16-SD: // %bb.0: // %entry3886; CHECK-FP16-SD-NEXT: fcvtzs v0.2s, v0.2s3887; CHECK-FP16-SD-NEXT: ret3888;3889; CHECK-NOFP16-GI-LABEL: fptou_v2f32_v2i8:3890; CHECK-NOFP16-GI: // %bb.0: // %entry3891; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2s, v0.2s3892; CHECK-NOFP16-GI-NEXT: ret3893;3894; CHECK-FP16-GI-LABEL: fptou_v2f32_v2i8:3895; CHECK-FP16-GI: // %bb.0: // %entry3896; CHECK-FP16-GI-NEXT: fcvtzu v0.2s, v0.2s3897; CHECK-FP16-GI-NEXT: ret3898entry:3899 %c = fptoui <2 x float> %a to <2 x i8>3900 ret <2 x i8> %c3901}3902 3903define <3 x i8> @fptos_v3f32_v3i8(<3 x float> %a) {3904; CHECK-NOFP16-SD-LABEL: fptos_v3f32_v3i8:3905; CHECK-NOFP16-SD: // %bb.0: // %entry3906; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s3907; CHECK-NOFP16-SD-NEXT: xtn v0.4h, v0.4s3908; CHECK-NOFP16-SD-NEXT: umov w0, v0.h[0]3909; CHECK-NOFP16-SD-NEXT: umov w1, v0.h[1]3910; CHECK-NOFP16-SD-NEXT: umov w2, v0.h[2]3911; CHECK-NOFP16-SD-NEXT: ret3912;3913; CHECK-FP16-SD-LABEL: fptos_v3f32_v3i8:3914; CHECK-FP16-SD: // %bb.0: // %entry3915; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s3916; CHECK-FP16-SD-NEXT: xtn v0.4h, v0.4s3917; CHECK-FP16-SD-NEXT: umov w0, v0.h[0]3918; CHECK-FP16-SD-NEXT: umov w1, v0.h[1]3919; CHECK-FP16-SD-NEXT: umov w2, v0.h[2]3920; CHECK-FP16-SD-NEXT: ret3921;3922; CHECK-NOFP16-GI-LABEL: fptos_v3f32_v3i8:3923; CHECK-NOFP16-GI: // %bb.0: // %entry3924; CHECK-NOFP16-GI-NEXT: fcvtzs v0.4s, v0.4s3925; CHECK-NOFP16-GI-NEXT: mov s1, v0.s[1]3926; CHECK-NOFP16-GI-NEXT: mov s2, v0.s[2]3927; CHECK-NOFP16-GI-NEXT: fmov w0, s03928; CHECK-NOFP16-GI-NEXT: fmov w1, s13929; CHECK-NOFP16-GI-NEXT: fmov w2, s23930; CHECK-NOFP16-GI-NEXT: ret3931;3932; CHECK-FP16-GI-LABEL: fptos_v3f32_v3i8:3933; CHECK-FP16-GI: // %bb.0: // %entry3934; CHECK-FP16-GI-NEXT: fcvtzs v0.4s, v0.4s3935; CHECK-FP16-GI-NEXT: mov s1, v0.s[1]3936; CHECK-FP16-GI-NEXT: mov s2, v0.s[2]3937; CHECK-FP16-GI-NEXT: fmov w0, s03938; CHECK-FP16-GI-NEXT: fmov w1, s13939; CHECK-FP16-GI-NEXT: fmov w2, s23940; CHECK-FP16-GI-NEXT: ret3941entry:3942 %c = fptosi <3 x float> %a to <3 x i8>3943 ret <3 x i8> %c3944}3945 3946define <3 x i8> @fptou_v3f32_v3i8(<3 x float> %a) {3947; CHECK-NOFP16-SD-LABEL: fptou_v3f32_v3i8:3948; CHECK-NOFP16-SD: // %bb.0: // %entry3949; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s3950; CHECK-NOFP16-SD-NEXT: xtn v0.4h, v0.4s3951; CHECK-NOFP16-SD-NEXT: umov w0, v0.h[0]3952; CHECK-NOFP16-SD-NEXT: umov w1, v0.h[1]3953; CHECK-NOFP16-SD-NEXT: umov w2, v0.h[2]3954; CHECK-NOFP16-SD-NEXT: ret3955;3956; CHECK-FP16-SD-LABEL: fptou_v3f32_v3i8:3957; CHECK-FP16-SD: // %bb.0: // %entry3958; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s3959; CHECK-FP16-SD-NEXT: xtn v0.4h, v0.4s3960; CHECK-FP16-SD-NEXT: umov w0, v0.h[0]3961; CHECK-FP16-SD-NEXT: umov w1, v0.h[1]3962; CHECK-FP16-SD-NEXT: umov w2, v0.h[2]3963; CHECK-FP16-SD-NEXT: ret3964;3965; CHECK-NOFP16-GI-LABEL: fptou_v3f32_v3i8:3966; CHECK-NOFP16-GI: // %bb.0: // %entry3967; CHECK-NOFP16-GI-NEXT: fcvtzu v0.4s, v0.4s3968; CHECK-NOFP16-GI-NEXT: mov s1, v0.s[1]3969; CHECK-NOFP16-GI-NEXT: mov s2, v0.s[2]3970; CHECK-NOFP16-GI-NEXT: fmov w0, s03971; CHECK-NOFP16-GI-NEXT: fmov w1, s13972; CHECK-NOFP16-GI-NEXT: fmov w2, s23973; CHECK-NOFP16-GI-NEXT: ret3974;3975; CHECK-FP16-GI-LABEL: fptou_v3f32_v3i8:3976; CHECK-FP16-GI: // %bb.0: // %entry3977; CHECK-FP16-GI-NEXT: fcvtzu v0.4s, v0.4s3978; CHECK-FP16-GI-NEXT: mov s1, v0.s[1]3979; CHECK-FP16-GI-NEXT: mov s2, v0.s[2]3980; CHECK-FP16-GI-NEXT: fmov w0, s03981; CHECK-FP16-GI-NEXT: fmov w1, s13982; CHECK-FP16-GI-NEXT: fmov w2, s23983; CHECK-FP16-GI-NEXT: ret3984entry:3985 %c = fptoui <3 x float> %a to <3 x i8>3986 ret <3 x i8> %c3987}3988 3989define <4 x i8> @fptos_v4f32_v4i8(<4 x float> %a) {3990; CHECK-LABEL: fptos_v4f32_v4i8:3991; CHECK: // %bb.0: // %entry3992; CHECK-NEXT: fcvtzs v0.4s, v0.4s3993; CHECK-NEXT: xtn v0.4h, v0.4s3994; CHECK-NEXT: ret3995entry:3996 %c = fptosi <4 x float> %a to <4 x i8>3997 ret <4 x i8> %c3998}3999 4000define <4 x i8> @fptou_v4f32_v4i8(<4 x float> %a) {4001; CHECK-NOFP16-SD-LABEL: fptou_v4f32_v4i8:4002; CHECK-NOFP16-SD: // %bb.0: // %entry4003; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s4004; CHECK-NOFP16-SD-NEXT: xtn v0.4h, v0.4s4005; CHECK-NOFP16-SD-NEXT: ret4006;4007; CHECK-FP16-SD-LABEL: fptou_v4f32_v4i8:4008; CHECK-FP16-SD: // %bb.0: // %entry4009; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s4010; CHECK-FP16-SD-NEXT: xtn v0.4h, v0.4s4011; CHECK-FP16-SD-NEXT: ret4012;4013; CHECK-NOFP16-GI-LABEL: fptou_v4f32_v4i8:4014; CHECK-NOFP16-GI: // %bb.0: // %entry4015; CHECK-NOFP16-GI-NEXT: fcvtzu v0.4s, v0.4s4016; CHECK-NOFP16-GI-NEXT: xtn v0.4h, v0.4s4017; CHECK-NOFP16-GI-NEXT: ret4018;4019; CHECK-FP16-GI-LABEL: fptou_v4f32_v4i8:4020; CHECK-FP16-GI: // %bb.0: // %entry4021; CHECK-FP16-GI-NEXT: fcvtzu v0.4s, v0.4s4022; CHECK-FP16-GI-NEXT: xtn v0.4h, v0.4s4023; CHECK-FP16-GI-NEXT: ret4024entry:4025 %c = fptoui <4 x float> %a to <4 x i8>4026 ret <4 x i8> %c4027}4028 4029define <8 x i8> @fptos_v8f32_v8i8(<8 x float> %a) {4030; CHECK-NOFP16-SD-LABEL: fptos_v8f32_v8i8:4031; CHECK-NOFP16-SD: // %bb.0: // %entry4032; CHECK-NOFP16-SD-NEXT: fcvtzs v1.4s, v1.4s4033; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s4034; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h4035; CHECK-NOFP16-SD-NEXT: xtn v0.8b, v0.8h4036; CHECK-NOFP16-SD-NEXT: ret4037;4038; CHECK-FP16-SD-LABEL: fptos_v8f32_v8i8:4039; CHECK-FP16-SD: // %bb.0: // %entry4040; CHECK-FP16-SD-NEXT: fcvtzs v1.4s, v1.4s4041; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s4042; CHECK-FP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h4043; CHECK-FP16-SD-NEXT: xtn v0.8b, v0.8h4044; CHECK-FP16-SD-NEXT: ret4045;4046; CHECK-NOFP16-GI-LABEL: fptos_v8f32_v8i8:4047; CHECK-NOFP16-GI: // %bb.0: // %entry4048; CHECK-NOFP16-GI-NEXT: fcvtzs v0.4s, v0.4s4049; CHECK-NOFP16-GI-NEXT: fcvtzs v1.4s, v1.4s4050; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h4051; CHECK-NOFP16-GI-NEXT: xtn v0.8b, v0.8h4052; CHECK-NOFP16-GI-NEXT: ret4053;4054; CHECK-FP16-GI-LABEL: fptos_v8f32_v8i8:4055; CHECK-FP16-GI: // %bb.0: // %entry4056; CHECK-FP16-GI-NEXT: fcvtzs v0.4s, v0.4s4057; CHECK-FP16-GI-NEXT: fcvtzs v1.4s, v1.4s4058; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h4059; CHECK-FP16-GI-NEXT: xtn v0.8b, v0.8h4060; CHECK-FP16-GI-NEXT: ret4061entry:4062 %c = fptosi <8 x float> %a to <8 x i8>4063 ret <8 x i8> %c4064}4065 4066define <8 x i8> @fptou_v8f32_v8i8(<8 x float> %a) {4067; CHECK-NOFP16-SD-LABEL: fptou_v8f32_v8i8:4068; CHECK-NOFP16-SD: // %bb.0: // %entry4069; CHECK-NOFP16-SD-NEXT: fcvtzs v1.4s, v1.4s4070; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s4071; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h4072; CHECK-NOFP16-SD-NEXT: xtn v0.8b, v0.8h4073; CHECK-NOFP16-SD-NEXT: ret4074;4075; CHECK-FP16-SD-LABEL: fptou_v8f32_v8i8:4076; CHECK-FP16-SD: // %bb.0: // %entry4077; CHECK-FP16-SD-NEXT: fcvtzs v1.4s, v1.4s4078; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s4079; CHECK-FP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h4080; CHECK-FP16-SD-NEXT: xtn v0.8b, v0.8h4081; CHECK-FP16-SD-NEXT: ret4082;4083; CHECK-NOFP16-GI-LABEL: fptou_v8f32_v8i8:4084; CHECK-NOFP16-GI: // %bb.0: // %entry4085; CHECK-NOFP16-GI-NEXT: fcvtzu v0.4s, v0.4s4086; CHECK-NOFP16-GI-NEXT: fcvtzu v1.4s, v1.4s4087; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h4088; CHECK-NOFP16-GI-NEXT: xtn v0.8b, v0.8h4089; CHECK-NOFP16-GI-NEXT: ret4090;4091; CHECK-FP16-GI-LABEL: fptou_v8f32_v8i8:4092; CHECK-FP16-GI: // %bb.0: // %entry4093; CHECK-FP16-GI-NEXT: fcvtzu v0.4s, v0.4s4094; CHECK-FP16-GI-NEXT: fcvtzu v1.4s, v1.4s4095; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h4096; CHECK-FP16-GI-NEXT: xtn v0.8b, v0.8h4097; CHECK-FP16-GI-NEXT: ret4098entry:4099 %c = fptoui <8 x float> %a to <8 x i8>4100 ret <8 x i8> %c4101}4102 4103define <16 x i8> @fptos_v16f32_v16i8(<16 x float> %a) {4104; CHECK-NOFP16-SD-LABEL: fptos_v16f32_v16i8:4105; CHECK-NOFP16-SD: // %bb.0: // %entry4106; CHECK-NOFP16-SD-NEXT: fcvtzs v3.4s, v3.4s4107; CHECK-NOFP16-SD-NEXT: fcvtzs v2.4s, v2.4s4108; CHECK-NOFP16-SD-NEXT: fcvtzs v1.4s, v1.4s4109; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s4110; CHECK-NOFP16-SD-NEXT: uzp1 v2.8h, v2.8h, v3.8h4111; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h4112; CHECK-NOFP16-SD-NEXT: uzp1 v0.16b, v0.16b, v2.16b4113; CHECK-NOFP16-SD-NEXT: ret4114;4115; CHECK-FP16-SD-LABEL: fptos_v16f32_v16i8:4116; CHECK-FP16-SD: // %bb.0: // %entry4117; CHECK-FP16-SD-NEXT: fcvtzs v3.4s, v3.4s4118; CHECK-FP16-SD-NEXT: fcvtzs v2.4s, v2.4s4119; CHECK-FP16-SD-NEXT: fcvtzs v1.4s, v1.4s4120; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s4121; CHECK-FP16-SD-NEXT: uzp1 v2.8h, v2.8h, v3.8h4122; CHECK-FP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h4123; CHECK-FP16-SD-NEXT: uzp1 v0.16b, v0.16b, v2.16b4124; CHECK-FP16-SD-NEXT: ret4125;4126; CHECK-NOFP16-GI-LABEL: fptos_v16f32_v16i8:4127; CHECK-NOFP16-GI: // %bb.0: // %entry4128; CHECK-NOFP16-GI-NEXT: fcvtzs v0.4s, v0.4s4129; CHECK-NOFP16-GI-NEXT: fcvtzs v1.4s, v1.4s4130; CHECK-NOFP16-GI-NEXT: fcvtzs v2.4s, v2.4s4131; CHECK-NOFP16-GI-NEXT: fcvtzs v3.4s, v3.4s4132; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h4133; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h4134; CHECK-NOFP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b4135; CHECK-NOFP16-GI-NEXT: ret4136;4137; CHECK-FP16-GI-LABEL: fptos_v16f32_v16i8:4138; CHECK-FP16-GI: // %bb.0: // %entry4139; CHECK-FP16-GI-NEXT: fcvtzs v0.4s, v0.4s4140; CHECK-FP16-GI-NEXT: fcvtzs v1.4s, v1.4s4141; CHECK-FP16-GI-NEXT: fcvtzs v2.4s, v2.4s4142; CHECK-FP16-GI-NEXT: fcvtzs v3.4s, v3.4s4143; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h4144; CHECK-FP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h4145; CHECK-FP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b4146; CHECK-FP16-GI-NEXT: ret4147entry:4148 %c = fptosi <16 x float> %a to <16 x i8>4149 ret <16 x i8> %c4150}4151 4152define <16 x i8> @fptou_v16f32_v16i8(<16 x float> %a) {4153; CHECK-NOFP16-SD-LABEL: fptou_v16f32_v16i8:4154; CHECK-NOFP16-SD: // %bb.0: // %entry4155; CHECK-NOFP16-SD-NEXT: fcvtzs v3.4s, v3.4s4156; CHECK-NOFP16-SD-NEXT: fcvtzs v2.4s, v2.4s4157; CHECK-NOFP16-SD-NEXT: fcvtzs v1.4s, v1.4s4158; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s4159; CHECK-NOFP16-SD-NEXT: uzp1 v2.8h, v2.8h, v3.8h4160; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h4161; CHECK-NOFP16-SD-NEXT: uzp1 v0.16b, v0.16b, v2.16b4162; CHECK-NOFP16-SD-NEXT: ret4163;4164; CHECK-FP16-SD-LABEL: fptou_v16f32_v16i8:4165; CHECK-FP16-SD: // %bb.0: // %entry4166; CHECK-FP16-SD-NEXT: fcvtzs v3.4s, v3.4s4167; CHECK-FP16-SD-NEXT: fcvtzs v2.4s, v2.4s4168; CHECK-FP16-SD-NEXT: fcvtzs v1.4s, v1.4s4169; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s4170; CHECK-FP16-SD-NEXT: uzp1 v2.8h, v2.8h, v3.8h4171; CHECK-FP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h4172; CHECK-FP16-SD-NEXT: uzp1 v0.16b, v0.16b, v2.16b4173; CHECK-FP16-SD-NEXT: ret4174;4175; CHECK-NOFP16-GI-LABEL: fptou_v16f32_v16i8:4176; CHECK-NOFP16-GI: // %bb.0: // %entry4177; CHECK-NOFP16-GI-NEXT: fcvtzu v0.4s, v0.4s4178; CHECK-NOFP16-GI-NEXT: fcvtzu v1.4s, v1.4s4179; CHECK-NOFP16-GI-NEXT: fcvtzu v2.4s, v2.4s4180; CHECK-NOFP16-GI-NEXT: fcvtzu v3.4s, v3.4s4181; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h4182; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h4183; CHECK-NOFP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b4184; CHECK-NOFP16-GI-NEXT: ret4185;4186; CHECK-FP16-GI-LABEL: fptou_v16f32_v16i8:4187; CHECK-FP16-GI: // %bb.0: // %entry4188; CHECK-FP16-GI-NEXT: fcvtzu v0.4s, v0.4s4189; CHECK-FP16-GI-NEXT: fcvtzu v1.4s, v1.4s4190; CHECK-FP16-GI-NEXT: fcvtzu v2.4s, v2.4s4191; CHECK-FP16-GI-NEXT: fcvtzu v3.4s, v3.4s4192; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h4193; CHECK-FP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h4194; CHECK-FP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b4195; CHECK-FP16-GI-NEXT: ret4196entry:4197 %c = fptoui <16 x float> %a to <16 x i8>4198 ret <16 x i8> %c4199}4200 4201define <32 x i8> @fptos_v32f32_v32i8(<32 x float> %a) {4202; CHECK-NOFP16-SD-LABEL: fptos_v32f32_v32i8:4203; CHECK-NOFP16-SD: // %bb.0: // %entry4204; CHECK-NOFP16-SD-NEXT: fcvtzs v3.4s, v3.4s4205; CHECK-NOFP16-SD-NEXT: fcvtzs v2.4s, v2.4s4206; CHECK-NOFP16-SD-NEXT: fcvtzs v1.4s, v1.4s4207; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s4208; CHECK-NOFP16-SD-NEXT: fcvtzs v7.4s, v7.4s4209; CHECK-NOFP16-SD-NEXT: fcvtzs v6.4s, v6.4s4210; CHECK-NOFP16-SD-NEXT: fcvtzs v5.4s, v5.4s4211; CHECK-NOFP16-SD-NEXT: fcvtzs v4.4s, v4.4s4212; CHECK-NOFP16-SD-NEXT: uzp1 v2.8h, v2.8h, v3.8h4213; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h4214; CHECK-NOFP16-SD-NEXT: uzp1 v1.8h, v6.8h, v7.8h4215; CHECK-NOFP16-SD-NEXT: uzp1 v3.8h, v4.8h, v5.8h4216; CHECK-NOFP16-SD-NEXT: uzp1 v0.16b, v0.16b, v2.16b4217; CHECK-NOFP16-SD-NEXT: uzp1 v1.16b, v3.16b, v1.16b4218; CHECK-NOFP16-SD-NEXT: ret4219;4220; CHECK-FP16-SD-LABEL: fptos_v32f32_v32i8:4221; CHECK-FP16-SD: // %bb.0: // %entry4222; CHECK-FP16-SD-NEXT: fcvtzs v3.4s, v3.4s4223; CHECK-FP16-SD-NEXT: fcvtzs v2.4s, v2.4s4224; CHECK-FP16-SD-NEXT: fcvtzs v1.4s, v1.4s4225; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s4226; CHECK-FP16-SD-NEXT: fcvtzs v7.4s, v7.4s4227; CHECK-FP16-SD-NEXT: fcvtzs v6.4s, v6.4s4228; CHECK-FP16-SD-NEXT: fcvtzs v5.4s, v5.4s4229; CHECK-FP16-SD-NEXT: fcvtzs v4.4s, v4.4s4230; CHECK-FP16-SD-NEXT: uzp1 v2.8h, v2.8h, v3.8h4231; CHECK-FP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h4232; CHECK-FP16-SD-NEXT: uzp1 v1.8h, v6.8h, v7.8h4233; CHECK-FP16-SD-NEXT: uzp1 v3.8h, v4.8h, v5.8h4234; CHECK-FP16-SD-NEXT: uzp1 v0.16b, v0.16b, v2.16b4235; CHECK-FP16-SD-NEXT: uzp1 v1.16b, v3.16b, v1.16b4236; CHECK-FP16-SD-NEXT: ret4237;4238; CHECK-NOFP16-GI-LABEL: fptos_v32f32_v32i8:4239; CHECK-NOFP16-GI: // %bb.0: // %entry4240; CHECK-NOFP16-GI-NEXT: fcvtzs v0.4s, v0.4s4241; CHECK-NOFP16-GI-NEXT: fcvtzs v1.4s, v1.4s4242; CHECK-NOFP16-GI-NEXT: fcvtzs v2.4s, v2.4s4243; CHECK-NOFP16-GI-NEXT: fcvtzs v3.4s, v3.4s4244; CHECK-NOFP16-GI-NEXT: fcvtzs v4.4s, v4.4s4245; CHECK-NOFP16-GI-NEXT: fcvtzs v5.4s, v5.4s4246; CHECK-NOFP16-GI-NEXT: fcvtzs v6.4s, v6.4s4247; CHECK-NOFP16-GI-NEXT: fcvtzs v7.4s, v7.4s4248; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h4249; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h4250; CHECK-NOFP16-GI-NEXT: uzp1 v2.8h, v4.8h, v5.8h4251; CHECK-NOFP16-GI-NEXT: uzp1 v3.8h, v6.8h, v7.8h4252; CHECK-NOFP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b4253; CHECK-NOFP16-GI-NEXT: uzp1 v1.16b, v2.16b, v3.16b4254; CHECK-NOFP16-GI-NEXT: ret4255;4256; CHECK-FP16-GI-LABEL: fptos_v32f32_v32i8:4257; CHECK-FP16-GI: // %bb.0: // %entry4258; CHECK-FP16-GI-NEXT: fcvtzs v0.4s, v0.4s4259; CHECK-FP16-GI-NEXT: fcvtzs v1.4s, v1.4s4260; CHECK-FP16-GI-NEXT: fcvtzs v2.4s, v2.4s4261; CHECK-FP16-GI-NEXT: fcvtzs v3.4s, v3.4s4262; CHECK-FP16-GI-NEXT: fcvtzs v4.4s, v4.4s4263; CHECK-FP16-GI-NEXT: fcvtzs v5.4s, v5.4s4264; CHECK-FP16-GI-NEXT: fcvtzs v6.4s, v6.4s4265; CHECK-FP16-GI-NEXT: fcvtzs v7.4s, v7.4s4266; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h4267; CHECK-FP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h4268; CHECK-FP16-GI-NEXT: uzp1 v2.8h, v4.8h, v5.8h4269; CHECK-FP16-GI-NEXT: uzp1 v3.8h, v6.8h, v7.8h4270; CHECK-FP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b4271; CHECK-FP16-GI-NEXT: uzp1 v1.16b, v2.16b, v3.16b4272; CHECK-FP16-GI-NEXT: ret4273entry:4274 %c = fptosi <32 x float> %a to <32 x i8>4275 ret <32 x i8> %c4276}4277 4278define <32 x i8> @fptou_v32f32_v32i8(<32 x float> %a) {4279; CHECK-NOFP16-SD-LABEL: fptou_v32f32_v32i8:4280; CHECK-NOFP16-SD: // %bb.0: // %entry4281; CHECK-NOFP16-SD-NEXT: fcvtzs v3.4s, v3.4s4282; CHECK-NOFP16-SD-NEXT: fcvtzs v2.4s, v2.4s4283; CHECK-NOFP16-SD-NEXT: fcvtzs v1.4s, v1.4s4284; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s4285; CHECK-NOFP16-SD-NEXT: fcvtzs v7.4s, v7.4s4286; CHECK-NOFP16-SD-NEXT: fcvtzs v6.4s, v6.4s4287; CHECK-NOFP16-SD-NEXT: fcvtzs v5.4s, v5.4s4288; CHECK-NOFP16-SD-NEXT: fcvtzs v4.4s, v4.4s4289; CHECK-NOFP16-SD-NEXT: uzp1 v2.8h, v2.8h, v3.8h4290; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h4291; CHECK-NOFP16-SD-NEXT: uzp1 v1.8h, v6.8h, v7.8h4292; CHECK-NOFP16-SD-NEXT: uzp1 v3.8h, v4.8h, v5.8h4293; CHECK-NOFP16-SD-NEXT: uzp1 v0.16b, v0.16b, v2.16b4294; CHECK-NOFP16-SD-NEXT: uzp1 v1.16b, v3.16b, v1.16b4295; CHECK-NOFP16-SD-NEXT: ret4296;4297; CHECK-FP16-SD-LABEL: fptou_v32f32_v32i8:4298; CHECK-FP16-SD: // %bb.0: // %entry4299; CHECK-FP16-SD-NEXT: fcvtzs v3.4s, v3.4s4300; CHECK-FP16-SD-NEXT: fcvtzs v2.4s, v2.4s4301; CHECK-FP16-SD-NEXT: fcvtzs v1.4s, v1.4s4302; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s4303; CHECK-FP16-SD-NEXT: fcvtzs v7.4s, v7.4s4304; CHECK-FP16-SD-NEXT: fcvtzs v6.4s, v6.4s4305; CHECK-FP16-SD-NEXT: fcvtzs v5.4s, v5.4s4306; CHECK-FP16-SD-NEXT: fcvtzs v4.4s, v4.4s4307; CHECK-FP16-SD-NEXT: uzp1 v2.8h, v2.8h, v3.8h4308; CHECK-FP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h4309; CHECK-FP16-SD-NEXT: uzp1 v1.8h, v6.8h, v7.8h4310; CHECK-FP16-SD-NEXT: uzp1 v3.8h, v4.8h, v5.8h4311; CHECK-FP16-SD-NEXT: uzp1 v0.16b, v0.16b, v2.16b4312; CHECK-FP16-SD-NEXT: uzp1 v1.16b, v3.16b, v1.16b4313; CHECK-FP16-SD-NEXT: ret4314;4315; CHECK-NOFP16-GI-LABEL: fptou_v32f32_v32i8:4316; CHECK-NOFP16-GI: // %bb.0: // %entry4317; CHECK-NOFP16-GI-NEXT: fcvtzu v0.4s, v0.4s4318; CHECK-NOFP16-GI-NEXT: fcvtzu v1.4s, v1.4s4319; CHECK-NOFP16-GI-NEXT: fcvtzu v2.4s, v2.4s4320; CHECK-NOFP16-GI-NEXT: fcvtzu v3.4s, v3.4s4321; CHECK-NOFP16-GI-NEXT: fcvtzu v4.4s, v4.4s4322; CHECK-NOFP16-GI-NEXT: fcvtzu v5.4s, v5.4s4323; CHECK-NOFP16-GI-NEXT: fcvtzu v6.4s, v6.4s4324; CHECK-NOFP16-GI-NEXT: fcvtzu v7.4s, v7.4s4325; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h4326; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h4327; CHECK-NOFP16-GI-NEXT: uzp1 v2.8h, v4.8h, v5.8h4328; CHECK-NOFP16-GI-NEXT: uzp1 v3.8h, v6.8h, v7.8h4329; CHECK-NOFP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b4330; CHECK-NOFP16-GI-NEXT: uzp1 v1.16b, v2.16b, v3.16b4331; CHECK-NOFP16-GI-NEXT: ret4332;4333; CHECK-FP16-GI-LABEL: fptou_v32f32_v32i8:4334; CHECK-FP16-GI: // %bb.0: // %entry4335; CHECK-FP16-GI-NEXT: fcvtzu v0.4s, v0.4s4336; CHECK-FP16-GI-NEXT: fcvtzu v1.4s, v1.4s4337; CHECK-FP16-GI-NEXT: fcvtzu v2.4s, v2.4s4338; CHECK-FP16-GI-NEXT: fcvtzu v3.4s, v3.4s4339; CHECK-FP16-GI-NEXT: fcvtzu v4.4s, v4.4s4340; CHECK-FP16-GI-NEXT: fcvtzu v5.4s, v5.4s4341; CHECK-FP16-GI-NEXT: fcvtzu v6.4s, v6.4s4342; CHECK-FP16-GI-NEXT: fcvtzu v7.4s, v7.4s4343; CHECK-FP16-GI-NEXT: uzp1 v0.8h, v0.8h, v1.8h4344; CHECK-FP16-GI-NEXT: uzp1 v1.8h, v2.8h, v3.8h4345; CHECK-FP16-GI-NEXT: uzp1 v2.8h, v4.8h, v5.8h4346; CHECK-FP16-GI-NEXT: uzp1 v3.8h, v6.8h, v7.8h4347; CHECK-FP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b4348; CHECK-FP16-GI-NEXT: uzp1 v1.16b, v2.16b, v3.16b4349; CHECK-FP16-GI-NEXT: ret4350entry:4351 %c = fptoui <32 x float> %a to <32 x i8>4352 ret <32 x i8> %c4353}4354 4355define <2 x i128> @fptos_v2f32_v2i128(<2 x float> %a) {4356; CHECK-NOFP16-SD-LABEL: fptos_v2f32_v2i128:4357; CHECK-NOFP16-SD: // %bb.0: // %entry4358; CHECK-NOFP16-SD-NEXT: sub sp, sp, #484359; CHECK-NOFP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill4360; CHECK-NOFP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill4361; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 484362; CHECK-NOFP16-SD-NEXT: .cfi_offset w19, -84363; CHECK-NOFP16-SD-NEXT: .cfi_offset w20, -164364; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -324365; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04366; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill4367; CHECK-NOFP16-SD-NEXT: // kill: def $s0 killed $s0 killed $q04368; CHECK-NOFP16-SD-NEXT: bl __fixsfti4369; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload4370; CHECK-NOFP16-SD-NEXT: mov x19, x04371; CHECK-NOFP16-SD-NEXT: mov x20, x14372; CHECK-NOFP16-SD-NEXT: mov s0, v0.s[1]4373; CHECK-NOFP16-SD-NEXT: bl __fixsfti4374; CHECK-NOFP16-SD-NEXT: mov x2, x04375; CHECK-NOFP16-SD-NEXT: mov x3, x14376; CHECK-NOFP16-SD-NEXT: mov x0, x194377; CHECK-NOFP16-SD-NEXT: mov x1, x204378; CHECK-NOFP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload4379; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload4380; CHECK-NOFP16-SD-NEXT: add sp, sp, #484381; CHECK-NOFP16-SD-NEXT: ret4382;4383; CHECK-FP16-SD-LABEL: fptos_v2f32_v2i128:4384; CHECK-FP16-SD: // %bb.0: // %entry4385; CHECK-FP16-SD-NEXT: sub sp, sp, #484386; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill4387; CHECK-FP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill4388; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 484389; CHECK-FP16-SD-NEXT: .cfi_offset w19, -84390; CHECK-FP16-SD-NEXT: .cfi_offset w20, -164391; CHECK-FP16-SD-NEXT: .cfi_offset w30, -324392; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04393; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill4394; CHECK-FP16-SD-NEXT: // kill: def $s0 killed $s0 killed $q04395; CHECK-FP16-SD-NEXT: bl __fixsfti4396; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload4397; CHECK-FP16-SD-NEXT: mov x19, x04398; CHECK-FP16-SD-NEXT: mov x20, x14399; CHECK-FP16-SD-NEXT: mov s0, v0.s[1]4400; CHECK-FP16-SD-NEXT: bl __fixsfti4401; CHECK-FP16-SD-NEXT: mov x2, x04402; CHECK-FP16-SD-NEXT: mov x3, x14403; CHECK-FP16-SD-NEXT: mov x0, x194404; CHECK-FP16-SD-NEXT: mov x1, x204405; CHECK-FP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload4406; CHECK-FP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload4407; CHECK-FP16-SD-NEXT: add sp, sp, #484408; CHECK-FP16-SD-NEXT: ret4409;4410; CHECK-NOFP16-GI-LABEL: fptos_v2f32_v2i128:4411; CHECK-NOFP16-GI: // %bb.0: // %entry4412; CHECK-NOFP16-GI-NEXT: str d8, [sp, #-32]! // 8-byte Folded Spill4413; CHECK-NOFP16-GI-NEXT: str x30, [sp, #8] // 8-byte Spill4414; CHECK-NOFP16-GI-NEXT: stp x20, x19, [sp, #16] // 16-byte Folded Spill4415; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 324416; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -84417; CHECK-NOFP16-GI-NEXT: .cfi_offset w20, -164418; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -244419; CHECK-NOFP16-GI-NEXT: .cfi_offset b8, -324420; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q04421; CHECK-NOFP16-GI-NEXT: mov s8, v0.s[1]4422; CHECK-NOFP16-GI-NEXT: // kill: def $s0 killed $s0 killed $q04423; CHECK-NOFP16-GI-NEXT: bl __fixsfti4424; CHECK-NOFP16-GI-NEXT: fmov s0, s84425; CHECK-NOFP16-GI-NEXT: mov x19, x04426; CHECK-NOFP16-GI-NEXT: mov x20, x14427; CHECK-NOFP16-GI-NEXT: bl __fixsfti4428; CHECK-NOFP16-GI-NEXT: mov x2, x04429; CHECK-NOFP16-GI-NEXT: mov x3, x14430; CHECK-NOFP16-GI-NEXT: mov x0, x194431; CHECK-NOFP16-GI-NEXT: mov x1, x204432; CHECK-NOFP16-GI-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload4433; CHECK-NOFP16-GI-NEXT: ldr x30, [sp, #8] // 8-byte Reload4434; CHECK-NOFP16-GI-NEXT: ldr d8, [sp], #32 // 8-byte Folded Reload4435; CHECK-NOFP16-GI-NEXT: ret4436;4437; CHECK-FP16-GI-LABEL: fptos_v2f32_v2i128:4438; CHECK-FP16-GI: // %bb.0: // %entry4439; CHECK-FP16-GI-NEXT: str d8, [sp, #-32]! // 8-byte Folded Spill4440; CHECK-FP16-GI-NEXT: str x30, [sp, #8] // 8-byte Spill4441; CHECK-FP16-GI-NEXT: stp x20, x19, [sp, #16] // 16-byte Folded Spill4442; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 324443; CHECK-FP16-GI-NEXT: .cfi_offset w19, -84444; CHECK-FP16-GI-NEXT: .cfi_offset w20, -164445; CHECK-FP16-GI-NEXT: .cfi_offset w30, -244446; CHECK-FP16-GI-NEXT: .cfi_offset b8, -324447; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q04448; CHECK-FP16-GI-NEXT: mov s8, v0.s[1]4449; CHECK-FP16-GI-NEXT: // kill: def $s0 killed $s0 killed $q04450; CHECK-FP16-GI-NEXT: bl __fixsfti4451; CHECK-FP16-GI-NEXT: fmov s0, s84452; CHECK-FP16-GI-NEXT: mov x19, x04453; CHECK-FP16-GI-NEXT: mov x20, x14454; CHECK-FP16-GI-NEXT: bl __fixsfti4455; CHECK-FP16-GI-NEXT: mov x2, x04456; CHECK-FP16-GI-NEXT: mov x3, x14457; CHECK-FP16-GI-NEXT: mov x0, x194458; CHECK-FP16-GI-NEXT: mov x1, x204459; CHECK-FP16-GI-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload4460; CHECK-FP16-GI-NEXT: ldr x30, [sp, #8] // 8-byte Reload4461; CHECK-FP16-GI-NEXT: ldr d8, [sp], #32 // 8-byte Folded Reload4462; CHECK-FP16-GI-NEXT: ret4463entry:4464 %c = fptosi <2 x float> %a to <2 x i128>4465 ret <2 x i128> %c4466}4467 4468define <2 x i128> @fptou_v2f32_v2i128(<2 x float> %a) {4469; CHECK-NOFP16-SD-LABEL: fptou_v2f32_v2i128:4470; CHECK-NOFP16-SD: // %bb.0: // %entry4471; CHECK-NOFP16-SD-NEXT: sub sp, sp, #484472; CHECK-NOFP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill4473; CHECK-NOFP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill4474; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 484475; CHECK-NOFP16-SD-NEXT: .cfi_offset w19, -84476; CHECK-NOFP16-SD-NEXT: .cfi_offset w20, -164477; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -324478; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04479; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill4480; CHECK-NOFP16-SD-NEXT: // kill: def $s0 killed $s0 killed $q04481; CHECK-NOFP16-SD-NEXT: bl __fixunssfti4482; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload4483; CHECK-NOFP16-SD-NEXT: mov x19, x04484; CHECK-NOFP16-SD-NEXT: mov x20, x14485; CHECK-NOFP16-SD-NEXT: mov s0, v0.s[1]4486; CHECK-NOFP16-SD-NEXT: bl __fixunssfti4487; CHECK-NOFP16-SD-NEXT: mov x2, x04488; CHECK-NOFP16-SD-NEXT: mov x3, x14489; CHECK-NOFP16-SD-NEXT: mov x0, x194490; CHECK-NOFP16-SD-NEXT: mov x1, x204491; CHECK-NOFP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload4492; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload4493; CHECK-NOFP16-SD-NEXT: add sp, sp, #484494; CHECK-NOFP16-SD-NEXT: ret4495;4496; CHECK-FP16-SD-LABEL: fptou_v2f32_v2i128:4497; CHECK-FP16-SD: // %bb.0: // %entry4498; CHECK-FP16-SD-NEXT: sub sp, sp, #484499; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill4500; CHECK-FP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill4501; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 484502; CHECK-FP16-SD-NEXT: .cfi_offset w19, -84503; CHECK-FP16-SD-NEXT: .cfi_offset w20, -164504; CHECK-FP16-SD-NEXT: .cfi_offset w30, -324505; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04506; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill4507; CHECK-FP16-SD-NEXT: // kill: def $s0 killed $s0 killed $q04508; CHECK-FP16-SD-NEXT: bl __fixunssfti4509; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload4510; CHECK-FP16-SD-NEXT: mov x19, x04511; CHECK-FP16-SD-NEXT: mov x20, x14512; CHECK-FP16-SD-NEXT: mov s0, v0.s[1]4513; CHECK-FP16-SD-NEXT: bl __fixunssfti4514; CHECK-FP16-SD-NEXT: mov x2, x04515; CHECK-FP16-SD-NEXT: mov x3, x14516; CHECK-FP16-SD-NEXT: mov x0, x194517; CHECK-FP16-SD-NEXT: mov x1, x204518; CHECK-FP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload4519; CHECK-FP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload4520; CHECK-FP16-SD-NEXT: add sp, sp, #484521; CHECK-FP16-SD-NEXT: ret4522;4523; CHECK-NOFP16-GI-LABEL: fptou_v2f32_v2i128:4524; CHECK-NOFP16-GI: // %bb.0: // %entry4525; CHECK-NOFP16-GI-NEXT: str d8, [sp, #-32]! // 8-byte Folded Spill4526; CHECK-NOFP16-GI-NEXT: str x30, [sp, #8] // 8-byte Spill4527; CHECK-NOFP16-GI-NEXT: stp x20, x19, [sp, #16] // 16-byte Folded Spill4528; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 324529; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -84530; CHECK-NOFP16-GI-NEXT: .cfi_offset w20, -164531; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -244532; CHECK-NOFP16-GI-NEXT: .cfi_offset b8, -324533; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q04534; CHECK-NOFP16-GI-NEXT: mov s8, v0.s[1]4535; CHECK-NOFP16-GI-NEXT: // kill: def $s0 killed $s0 killed $q04536; CHECK-NOFP16-GI-NEXT: bl __fixunssfti4537; CHECK-NOFP16-GI-NEXT: fmov s0, s84538; CHECK-NOFP16-GI-NEXT: mov x19, x04539; CHECK-NOFP16-GI-NEXT: mov x20, x14540; CHECK-NOFP16-GI-NEXT: bl __fixunssfti4541; CHECK-NOFP16-GI-NEXT: mov x2, x04542; CHECK-NOFP16-GI-NEXT: mov x3, x14543; CHECK-NOFP16-GI-NEXT: mov x0, x194544; CHECK-NOFP16-GI-NEXT: mov x1, x204545; CHECK-NOFP16-GI-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload4546; CHECK-NOFP16-GI-NEXT: ldr x30, [sp, #8] // 8-byte Reload4547; CHECK-NOFP16-GI-NEXT: ldr d8, [sp], #32 // 8-byte Folded Reload4548; CHECK-NOFP16-GI-NEXT: ret4549;4550; CHECK-FP16-GI-LABEL: fptou_v2f32_v2i128:4551; CHECK-FP16-GI: // %bb.0: // %entry4552; CHECK-FP16-GI-NEXT: str d8, [sp, #-32]! // 8-byte Folded Spill4553; CHECK-FP16-GI-NEXT: str x30, [sp, #8] // 8-byte Spill4554; CHECK-FP16-GI-NEXT: stp x20, x19, [sp, #16] // 16-byte Folded Spill4555; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 324556; CHECK-FP16-GI-NEXT: .cfi_offset w19, -84557; CHECK-FP16-GI-NEXT: .cfi_offset w20, -164558; CHECK-FP16-GI-NEXT: .cfi_offset w30, -244559; CHECK-FP16-GI-NEXT: .cfi_offset b8, -324560; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q04561; CHECK-FP16-GI-NEXT: mov s8, v0.s[1]4562; CHECK-FP16-GI-NEXT: // kill: def $s0 killed $s0 killed $q04563; CHECK-FP16-GI-NEXT: bl __fixunssfti4564; CHECK-FP16-GI-NEXT: fmov s0, s84565; CHECK-FP16-GI-NEXT: mov x19, x04566; CHECK-FP16-GI-NEXT: mov x20, x14567; CHECK-FP16-GI-NEXT: bl __fixunssfti4568; CHECK-FP16-GI-NEXT: mov x2, x04569; CHECK-FP16-GI-NEXT: mov x3, x14570; CHECK-FP16-GI-NEXT: mov x0, x194571; CHECK-FP16-GI-NEXT: mov x1, x204572; CHECK-FP16-GI-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload4573; CHECK-FP16-GI-NEXT: ldr x30, [sp, #8] // 8-byte Reload4574; CHECK-FP16-GI-NEXT: ldr d8, [sp], #32 // 8-byte Folded Reload4575; CHECK-FP16-GI-NEXT: ret4576entry:4577 %c = fptoui <2 x float> %a to <2 x i128>4578 ret <2 x i128> %c4579}4580 4581define <2 x i64> @fptos_v2f16_v2i64(<2 x half> %a) {4582; CHECK-NOFP16-SD-LABEL: fptos_v2f16_v2i64:4583; CHECK-NOFP16-SD: // %bb.0: // %entry4584; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04585; CHECK-NOFP16-SD-NEXT: mov h1, v0.h[1]4586; CHECK-NOFP16-SD-NEXT: fcvt s0, h04587; CHECK-NOFP16-SD-NEXT: fcvt s1, h14588; CHECK-NOFP16-SD-NEXT: fcvtzs x8, s04589; CHECK-NOFP16-SD-NEXT: fcvtzs x9, s14590; CHECK-NOFP16-SD-NEXT: fmov d0, x84591; CHECK-NOFP16-SD-NEXT: mov v0.d[1], x94592; CHECK-NOFP16-SD-NEXT: ret4593;4594; CHECK-FP16-SD-LABEL: fptos_v2f16_v2i64:4595; CHECK-FP16-SD: // %bb.0: // %entry4596; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04597; CHECK-FP16-SD-NEXT: mov h1, v0.h[1]4598; CHECK-FP16-SD-NEXT: fcvtzs x8, h04599; CHECK-FP16-SD-NEXT: fcvtzs x9, h14600; CHECK-FP16-SD-NEXT: fmov d0, x84601; CHECK-FP16-SD-NEXT: mov v0.d[1], x94602; CHECK-FP16-SD-NEXT: ret4603;4604; CHECK-NOFP16-GI-LABEL: fptos_v2f16_v2i64:4605; CHECK-NOFP16-GI: // %bb.0: // %entry4606; CHECK-NOFP16-GI-NEXT: fcvtl v0.4s, v0.4h4607; CHECK-NOFP16-GI-NEXT: fcvtl v0.2d, v0.2s4608; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v0.2d4609; CHECK-NOFP16-GI-NEXT: ret4610;4611; CHECK-FP16-GI-LABEL: fptos_v2f16_v2i64:4612; CHECK-FP16-GI: // %bb.0: // %entry4613; CHECK-FP16-GI-NEXT: fcvtl v0.4s, v0.4h4614; CHECK-FP16-GI-NEXT: fcvtl v0.2d, v0.2s4615; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v0.2d4616; CHECK-FP16-GI-NEXT: ret4617entry:4618 %c = fptosi <2 x half> %a to <2 x i64>4619 ret <2 x i64> %c4620}4621 4622define <2 x i64> @fptou_v2f16_v2i64(<2 x half> %a) {4623; CHECK-NOFP16-SD-LABEL: fptou_v2f16_v2i64:4624; CHECK-NOFP16-SD: // %bb.0: // %entry4625; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04626; CHECK-NOFP16-SD-NEXT: mov h1, v0.h[1]4627; CHECK-NOFP16-SD-NEXT: fcvt s0, h04628; CHECK-NOFP16-SD-NEXT: fcvt s1, h14629; CHECK-NOFP16-SD-NEXT: fcvtzu x8, s04630; CHECK-NOFP16-SD-NEXT: fcvtzu x9, s14631; CHECK-NOFP16-SD-NEXT: fmov d0, x84632; CHECK-NOFP16-SD-NEXT: mov v0.d[1], x94633; CHECK-NOFP16-SD-NEXT: ret4634;4635; CHECK-FP16-SD-LABEL: fptou_v2f16_v2i64:4636; CHECK-FP16-SD: // %bb.0: // %entry4637; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04638; CHECK-FP16-SD-NEXT: mov h1, v0.h[1]4639; CHECK-FP16-SD-NEXT: fcvtzu x8, h04640; CHECK-FP16-SD-NEXT: fcvtzu x9, h14641; CHECK-FP16-SD-NEXT: fmov d0, x84642; CHECK-FP16-SD-NEXT: mov v0.d[1], x94643; CHECK-FP16-SD-NEXT: ret4644;4645; CHECK-NOFP16-GI-LABEL: fptou_v2f16_v2i64:4646; CHECK-NOFP16-GI: // %bb.0: // %entry4647; CHECK-NOFP16-GI-NEXT: fcvtl v0.4s, v0.4h4648; CHECK-NOFP16-GI-NEXT: fcvtl v0.2d, v0.2s4649; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v0.2d4650; CHECK-NOFP16-GI-NEXT: ret4651;4652; CHECK-FP16-GI-LABEL: fptou_v2f16_v2i64:4653; CHECK-FP16-GI: // %bb.0: // %entry4654; CHECK-FP16-GI-NEXT: fcvtl v0.4s, v0.4h4655; CHECK-FP16-GI-NEXT: fcvtl v0.2d, v0.2s4656; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v0.2d4657; CHECK-FP16-GI-NEXT: ret4658entry:4659 %c = fptoui <2 x half> %a to <2 x i64>4660 ret <2 x i64> %c4661}4662 4663define <3 x i64> @fptos_v3f16_v3i64(<3 x half> %a) {4664; CHECK-NOFP16-SD-LABEL: fptos_v3f16_v3i64:4665; CHECK-NOFP16-SD: // %bb.0: // %entry4666; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04667; CHECK-NOFP16-SD-NEXT: mov h1, v0.h[1]4668; CHECK-NOFP16-SD-NEXT: mov h2, v0.h[2]4669; CHECK-NOFP16-SD-NEXT: fcvt s0, h04670; CHECK-NOFP16-SD-NEXT: fcvt s1, h14671; CHECK-NOFP16-SD-NEXT: fcvt s2, h24672; CHECK-NOFP16-SD-NEXT: fcvtzs x8, s04673; CHECK-NOFP16-SD-NEXT: fcvtzs x9, s14674; CHECK-NOFP16-SD-NEXT: fcvtzs x10, s24675; CHECK-NOFP16-SD-NEXT: fmov d0, x84676; CHECK-NOFP16-SD-NEXT: fmov d1, x94677; CHECK-NOFP16-SD-NEXT: fmov d2, x104678; CHECK-NOFP16-SD-NEXT: ret4679;4680; CHECK-FP16-SD-LABEL: fptos_v3f16_v3i64:4681; CHECK-FP16-SD: // %bb.0: // %entry4682; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04683; CHECK-FP16-SD-NEXT: mov h1, v0.h[1]4684; CHECK-FP16-SD-NEXT: mov h2, v0.h[2]4685; CHECK-FP16-SD-NEXT: fcvtzs x8, h04686; CHECK-FP16-SD-NEXT: fcvtzs x9, h14687; CHECK-FP16-SD-NEXT: fcvtzs x10, h24688; CHECK-FP16-SD-NEXT: fmov d0, x84689; CHECK-FP16-SD-NEXT: fmov d1, x94690; CHECK-FP16-SD-NEXT: fmov d2, x104691; CHECK-FP16-SD-NEXT: ret4692;4693; CHECK-NOFP16-GI-LABEL: fptos_v3f16_v3i64:4694; CHECK-NOFP16-GI: // %bb.0: // %entry4695; CHECK-NOFP16-GI-NEXT: fcvtl v0.4s, v0.4h4696; CHECK-NOFP16-GI-NEXT: fcvtl v1.2d, v0.2s4697; CHECK-NOFP16-GI-NEXT: fcvtl2 v2.2d, v0.4s4698; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v1.2d4699; CHECK-NOFP16-GI-NEXT: fcvtzs v2.2d, v2.2d4700; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q24701; CHECK-NOFP16-GI-NEXT: mov d1, v0.d[1]4702; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q04703; CHECK-NOFP16-GI-NEXT: ret4704;4705; CHECK-FP16-GI-LABEL: fptos_v3f16_v3i64:4706; CHECK-FP16-GI: // %bb.0: // %entry4707; CHECK-FP16-GI-NEXT: fcvtl v0.4s, v0.4h4708; CHECK-FP16-GI-NEXT: fcvtl v1.2d, v0.2s4709; CHECK-FP16-GI-NEXT: fcvtl2 v2.2d, v0.4s4710; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v1.2d4711; CHECK-FP16-GI-NEXT: fcvtzs v2.2d, v2.2d4712; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q24713; CHECK-FP16-GI-NEXT: mov d1, v0.d[1]4714; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q04715; CHECK-FP16-GI-NEXT: ret4716entry:4717 %c = fptosi <3 x half> %a to <3 x i64>4718 ret <3 x i64> %c4719}4720 4721define <3 x i64> @fptou_v3f16_v3i64(<3 x half> %a) {4722; CHECK-NOFP16-SD-LABEL: fptou_v3f16_v3i64:4723; CHECK-NOFP16-SD: // %bb.0: // %entry4724; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04725; CHECK-NOFP16-SD-NEXT: mov h1, v0.h[1]4726; CHECK-NOFP16-SD-NEXT: mov h2, v0.h[2]4727; CHECK-NOFP16-SD-NEXT: fcvt s0, h04728; CHECK-NOFP16-SD-NEXT: fcvt s1, h14729; CHECK-NOFP16-SD-NEXT: fcvt s2, h24730; CHECK-NOFP16-SD-NEXT: fcvtzu x8, s04731; CHECK-NOFP16-SD-NEXT: fcvtzu x9, s14732; CHECK-NOFP16-SD-NEXT: fcvtzu x10, s24733; CHECK-NOFP16-SD-NEXT: fmov d0, x84734; CHECK-NOFP16-SD-NEXT: fmov d1, x94735; CHECK-NOFP16-SD-NEXT: fmov d2, x104736; CHECK-NOFP16-SD-NEXT: ret4737;4738; CHECK-FP16-SD-LABEL: fptou_v3f16_v3i64:4739; CHECK-FP16-SD: // %bb.0: // %entry4740; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04741; CHECK-FP16-SD-NEXT: mov h1, v0.h[1]4742; CHECK-FP16-SD-NEXT: mov h2, v0.h[2]4743; CHECK-FP16-SD-NEXT: fcvtzu x8, h04744; CHECK-FP16-SD-NEXT: fcvtzu x9, h14745; CHECK-FP16-SD-NEXT: fcvtzu x10, h24746; CHECK-FP16-SD-NEXT: fmov d0, x84747; CHECK-FP16-SD-NEXT: fmov d1, x94748; CHECK-FP16-SD-NEXT: fmov d2, x104749; CHECK-FP16-SD-NEXT: ret4750;4751; CHECK-NOFP16-GI-LABEL: fptou_v3f16_v3i64:4752; CHECK-NOFP16-GI: // %bb.0: // %entry4753; CHECK-NOFP16-GI-NEXT: fcvtl v0.4s, v0.4h4754; CHECK-NOFP16-GI-NEXT: fcvtl v1.2d, v0.2s4755; CHECK-NOFP16-GI-NEXT: fcvtl2 v2.2d, v0.4s4756; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v1.2d4757; CHECK-NOFP16-GI-NEXT: fcvtzu v2.2d, v2.2d4758; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q24759; CHECK-NOFP16-GI-NEXT: mov d1, v0.d[1]4760; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q04761; CHECK-NOFP16-GI-NEXT: ret4762;4763; CHECK-FP16-GI-LABEL: fptou_v3f16_v3i64:4764; CHECK-FP16-GI: // %bb.0: // %entry4765; CHECK-FP16-GI-NEXT: fcvtl v0.4s, v0.4h4766; CHECK-FP16-GI-NEXT: fcvtl v1.2d, v0.2s4767; CHECK-FP16-GI-NEXT: fcvtl2 v2.2d, v0.4s4768; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v1.2d4769; CHECK-FP16-GI-NEXT: fcvtzu v2.2d, v2.2d4770; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q24771; CHECK-FP16-GI-NEXT: mov d1, v0.d[1]4772; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q04773; CHECK-FP16-GI-NEXT: ret4774entry:4775 %c = fptoui <3 x half> %a to <3 x i64>4776 ret <3 x i64> %c4777}4778 4779define <4 x i64> @fptos_v4f16_v4i64(<4 x half> %a) {4780; CHECK-NOFP16-SD-LABEL: fptos_v4f16_v4i64:4781; CHECK-NOFP16-SD: // %bb.0: // %entry4782; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04783; CHECK-NOFP16-SD-NEXT: mov h1, v0.h[2]4784; CHECK-NOFP16-SD-NEXT: mov h2, v0.h[1]4785; CHECK-NOFP16-SD-NEXT: mov h3, v0.h[3]4786; CHECK-NOFP16-SD-NEXT: fcvt s0, h04787; CHECK-NOFP16-SD-NEXT: fcvt s1, h14788; CHECK-NOFP16-SD-NEXT: fcvt s2, h24789; CHECK-NOFP16-SD-NEXT: fcvt s3, h34790; CHECK-NOFP16-SD-NEXT: fcvtzs x8, s04791; CHECK-NOFP16-SD-NEXT: fcvtzs x9, s14792; CHECK-NOFP16-SD-NEXT: fcvtzs x10, s24793; CHECK-NOFP16-SD-NEXT: fcvtzs x11, s34794; CHECK-NOFP16-SD-NEXT: fmov d0, x84795; CHECK-NOFP16-SD-NEXT: fmov d1, x94796; CHECK-NOFP16-SD-NEXT: mov v0.d[1], x104797; CHECK-NOFP16-SD-NEXT: mov v1.d[1], x114798; CHECK-NOFP16-SD-NEXT: ret4799;4800; CHECK-FP16-SD-LABEL: fptos_v4f16_v4i64:4801; CHECK-FP16-SD: // %bb.0: // %entry4802; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04803; CHECK-FP16-SD-NEXT: mov h1, v0.h[2]4804; CHECK-FP16-SD-NEXT: mov h2, v0.h[1]4805; CHECK-FP16-SD-NEXT: mov h3, v0.h[3]4806; CHECK-FP16-SD-NEXT: fcvtzs x8, h04807; CHECK-FP16-SD-NEXT: fcvtzs x9, h14808; CHECK-FP16-SD-NEXT: fcvtzs x10, h24809; CHECK-FP16-SD-NEXT: fcvtzs x11, h34810; CHECK-FP16-SD-NEXT: fmov d0, x84811; CHECK-FP16-SD-NEXT: fmov d1, x94812; CHECK-FP16-SD-NEXT: mov v0.d[1], x104813; CHECK-FP16-SD-NEXT: mov v1.d[1], x114814; CHECK-FP16-SD-NEXT: ret4815;4816; CHECK-NOFP16-GI-LABEL: fptos_v4f16_v4i64:4817; CHECK-NOFP16-GI: // %bb.0: // %entry4818; CHECK-NOFP16-GI-NEXT: fcvtl v0.4s, v0.4h4819; CHECK-NOFP16-GI-NEXT: fcvtl v1.2d, v0.2s4820; CHECK-NOFP16-GI-NEXT: fcvtl2 v2.2d, v0.4s4821; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v1.2d4822; CHECK-NOFP16-GI-NEXT: fcvtzs v1.2d, v2.2d4823; CHECK-NOFP16-GI-NEXT: ret4824;4825; CHECK-FP16-GI-LABEL: fptos_v4f16_v4i64:4826; CHECK-FP16-GI: // %bb.0: // %entry4827; CHECK-FP16-GI-NEXT: fcvtl v0.4s, v0.4h4828; CHECK-FP16-GI-NEXT: fcvtl v1.2d, v0.2s4829; CHECK-FP16-GI-NEXT: fcvtl2 v2.2d, v0.4s4830; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v1.2d4831; CHECK-FP16-GI-NEXT: fcvtzs v1.2d, v2.2d4832; CHECK-FP16-GI-NEXT: ret4833entry:4834 %c = fptosi <4 x half> %a to <4 x i64>4835 ret <4 x i64> %c4836}4837 4838define <4 x i64> @fptou_v4f16_v4i64(<4 x half> %a) {4839; CHECK-NOFP16-SD-LABEL: fptou_v4f16_v4i64:4840; CHECK-NOFP16-SD: // %bb.0: // %entry4841; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04842; CHECK-NOFP16-SD-NEXT: mov h1, v0.h[2]4843; CHECK-NOFP16-SD-NEXT: mov h2, v0.h[1]4844; CHECK-NOFP16-SD-NEXT: mov h3, v0.h[3]4845; CHECK-NOFP16-SD-NEXT: fcvt s0, h04846; CHECK-NOFP16-SD-NEXT: fcvt s1, h14847; CHECK-NOFP16-SD-NEXT: fcvt s2, h24848; CHECK-NOFP16-SD-NEXT: fcvt s3, h34849; CHECK-NOFP16-SD-NEXT: fcvtzu x8, s04850; CHECK-NOFP16-SD-NEXT: fcvtzu x9, s14851; CHECK-NOFP16-SD-NEXT: fcvtzu x10, s24852; CHECK-NOFP16-SD-NEXT: fcvtzu x11, s34853; CHECK-NOFP16-SD-NEXT: fmov d0, x84854; CHECK-NOFP16-SD-NEXT: fmov d1, x94855; CHECK-NOFP16-SD-NEXT: mov v0.d[1], x104856; CHECK-NOFP16-SD-NEXT: mov v1.d[1], x114857; CHECK-NOFP16-SD-NEXT: ret4858;4859; CHECK-FP16-SD-LABEL: fptou_v4f16_v4i64:4860; CHECK-FP16-SD: // %bb.0: // %entry4861; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04862; CHECK-FP16-SD-NEXT: mov h1, v0.h[2]4863; CHECK-FP16-SD-NEXT: mov h2, v0.h[1]4864; CHECK-FP16-SD-NEXT: mov h3, v0.h[3]4865; CHECK-FP16-SD-NEXT: fcvtzu x8, h04866; CHECK-FP16-SD-NEXT: fcvtzu x9, h14867; CHECK-FP16-SD-NEXT: fcvtzu x10, h24868; CHECK-FP16-SD-NEXT: fcvtzu x11, h34869; CHECK-FP16-SD-NEXT: fmov d0, x84870; CHECK-FP16-SD-NEXT: fmov d1, x94871; CHECK-FP16-SD-NEXT: mov v0.d[1], x104872; CHECK-FP16-SD-NEXT: mov v1.d[1], x114873; CHECK-FP16-SD-NEXT: ret4874;4875; CHECK-NOFP16-GI-LABEL: fptou_v4f16_v4i64:4876; CHECK-NOFP16-GI: // %bb.0: // %entry4877; CHECK-NOFP16-GI-NEXT: fcvtl v0.4s, v0.4h4878; CHECK-NOFP16-GI-NEXT: fcvtl v1.2d, v0.2s4879; CHECK-NOFP16-GI-NEXT: fcvtl2 v2.2d, v0.4s4880; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v1.2d4881; CHECK-NOFP16-GI-NEXT: fcvtzu v1.2d, v2.2d4882; CHECK-NOFP16-GI-NEXT: ret4883;4884; CHECK-FP16-GI-LABEL: fptou_v4f16_v4i64:4885; CHECK-FP16-GI: // %bb.0: // %entry4886; CHECK-FP16-GI-NEXT: fcvtl v0.4s, v0.4h4887; CHECK-FP16-GI-NEXT: fcvtl v1.2d, v0.2s4888; CHECK-FP16-GI-NEXT: fcvtl2 v2.2d, v0.4s4889; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v1.2d4890; CHECK-FP16-GI-NEXT: fcvtzu v1.2d, v2.2d4891; CHECK-FP16-GI-NEXT: ret4892entry:4893 %c = fptoui <4 x half> %a to <4 x i64>4894 ret <4 x i64> %c4895}4896 4897define <8 x i64> @fptos_v8f16_v8i64(<8 x half> %a) {4898; CHECK-NOFP16-SD-LABEL: fptos_v8f16_v8i64:4899; CHECK-NOFP16-SD: // %bb.0: // %entry4900; CHECK-NOFP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #84901; CHECK-NOFP16-SD-NEXT: mov h4, v0.h[2]4902; CHECK-NOFP16-SD-NEXT: mov h3, v0.h[1]4903; CHECK-NOFP16-SD-NEXT: mov h7, v0.h[3]4904; CHECK-NOFP16-SD-NEXT: fcvt s0, h04905; CHECK-NOFP16-SD-NEXT: mov h2, v1.h[2]4906; CHECK-NOFP16-SD-NEXT: mov h5, v1.h[1]4907; CHECK-NOFP16-SD-NEXT: mov h6, v1.h[3]4908; CHECK-NOFP16-SD-NEXT: fcvt s1, h14909; CHECK-NOFP16-SD-NEXT: fcvt s4, h44910; CHECK-NOFP16-SD-NEXT: fcvt s3, h34911; CHECK-NOFP16-SD-NEXT: fcvt s7, h74912; CHECK-NOFP16-SD-NEXT: fcvtzs x9, s04913; CHECK-NOFP16-SD-NEXT: fcvt s2, h24914; CHECK-NOFP16-SD-NEXT: fcvt s5, h54915; CHECK-NOFP16-SD-NEXT: fcvt s6, h64916; CHECK-NOFP16-SD-NEXT: fcvtzs x8, s14917; CHECK-NOFP16-SD-NEXT: fcvtzs x12, s44918; CHECK-NOFP16-SD-NEXT: fcvtzs x11, s34919; CHECK-NOFP16-SD-NEXT: fcvtzs x15, s74920; CHECK-NOFP16-SD-NEXT: fmov d0, x94921; CHECK-NOFP16-SD-NEXT: fcvtzs x10, s24922; CHECK-NOFP16-SD-NEXT: fcvtzs x13, s54923; CHECK-NOFP16-SD-NEXT: fcvtzs x14, s64924; CHECK-NOFP16-SD-NEXT: fmov d2, x84925; CHECK-NOFP16-SD-NEXT: fmov d1, x124926; CHECK-NOFP16-SD-NEXT: mov v0.d[1], x114927; CHECK-NOFP16-SD-NEXT: fmov d3, x104928; CHECK-NOFP16-SD-NEXT: mov v2.d[1], x134929; CHECK-NOFP16-SD-NEXT: mov v1.d[1], x154930; CHECK-NOFP16-SD-NEXT: mov v3.d[1], x144931; CHECK-NOFP16-SD-NEXT: ret4932;4933; CHECK-FP16-SD-LABEL: fptos_v8f16_v8i64:4934; CHECK-FP16-SD: // %bb.0: // %entry4935; CHECK-FP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #84936; CHECK-FP16-SD-NEXT: mov h4, v0.h[2]4937; CHECK-FP16-SD-NEXT: mov h3, v0.h[1]4938; CHECK-FP16-SD-NEXT: mov h7, v0.h[3]4939; CHECK-FP16-SD-NEXT: fcvtzs x9, h04940; CHECK-FP16-SD-NEXT: mov h2, v1.h[2]4941; CHECK-FP16-SD-NEXT: mov h5, v1.h[1]4942; CHECK-FP16-SD-NEXT: mov h6, v1.h[3]4943; CHECK-FP16-SD-NEXT: fcvtzs x8, h14944; CHECK-FP16-SD-NEXT: fcvtzs x12, h44945; CHECK-FP16-SD-NEXT: fcvtzs x11, h34946; CHECK-FP16-SD-NEXT: fcvtzs x15, h74947; CHECK-FP16-SD-NEXT: fmov d0, x94948; CHECK-FP16-SD-NEXT: fcvtzs x10, h24949; CHECK-FP16-SD-NEXT: fcvtzs x13, h54950; CHECK-FP16-SD-NEXT: fcvtzs x14, h64951; CHECK-FP16-SD-NEXT: fmov d2, x84952; CHECK-FP16-SD-NEXT: fmov d1, x124953; CHECK-FP16-SD-NEXT: mov v0.d[1], x114954; CHECK-FP16-SD-NEXT: fmov d3, x104955; CHECK-FP16-SD-NEXT: mov v2.d[1], x134956; CHECK-FP16-SD-NEXT: mov v1.d[1], x154957; CHECK-FP16-SD-NEXT: mov v3.d[1], x144958; CHECK-FP16-SD-NEXT: ret4959;4960; CHECK-NOFP16-GI-LABEL: fptos_v8f16_v8i64:4961; CHECK-NOFP16-GI: // %bb.0: // %entry4962; CHECK-NOFP16-GI-NEXT: fcvtl v1.4s, v0.4h4963; CHECK-NOFP16-GI-NEXT: fcvtl2 v0.4s, v0.8h4964; CHECK-NOFP16-GI-NEXT: fcvtl v2.2d, v1.2s4965; CHECK-NOFP16-GI-NEXT: fcvtl2 v1.2d, v1.4s4966; CHECK-NOFP16-GI-NEXT: fcvtl v3.2d, v0.2s4967; CHECK-NOFP16-GI-NEXT: fcvtl2 v4.2d, v0.4s4968; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v2.2d4969; CHECK-NOFP16-GI-NEXT: fcvtzs v1.2d, v1.2d4970; CHECK-NOFP16-GI-NEXT: fcvtzs v2.2d, v3.2d4971; CHECK-NOFP16-GI-NEXT: fcvtzs v3.2d, v4.2d4972; CHECK-NOFP16-GI-NEXT: ret4973;4974; CHECK-FP16-GI-LABEL: fptos_v8f16_v8i64:4975; CHECK-FP16-GI: // %bb.0: // %entry4976; CHECK-FP16-GI-NEXT: fcvtl v1.4s, v0.4h4977; CHECK-FP16-GI-NEXT: fcvtl2 v0.4s, v0.8h4978; CHECK-FP16-GI-NEXT: fcvtl v2.2d, v1.2s4979; CHECK-FP16-GI-NEXT: fcvtl2 v1.2d, v1.4s4980; CHECK-FP16-GI-NEXT: fcvtl v3.2d, v0.2s4981; CHECK-FP16-GI-NEXT: fcvtl2 v4.2d, v0.4s4982; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v2.2d4983; CHECK-FP16-GI-NEXT: fcvtzs v1.2d, v1.2d4984; CHECK-FP16-GI-NEXT: fcvtzs v2.2d, v3.2d4985; CHECK-FP16-GI-NEXT: fcvtzs v3.2d, v4.2d4986; CHECK-FP16-GI-NEXT: ret4987entry:4988 %c = fptosi <8 x half> %a to <8 x i64>4989 ret <8 x i64> %c4990}4991 4992define <8 x i64> @fptou_v8f16_v8i64(<8 x half> %a) {4993; CHECK-NOFP16-SD-LABEL: fptou_v8f16_v8i64:4994; CHECK-NOFP16-SD: // %bb.0: // %entry4995; CHECK-NOFP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #84996; CHECK-NOFP16-SD-NEXT: mov h4, v0.h[2]4997; CHECK-NOFP16-SD-NEXT: mov h3, v0.h[1]4998; CHECK-NOFP16-SD-NEXT: mov h7, v0.h[3]4999; CHECK-NOFP16-SD-NEXT: fcvt s0, h05000; CHECK-NOFP16-SD-NEXT: mov h2, v1.h[2]5001; CHECK-NOFP16-SD-NEXT: mov h5, v1.h[1]5002; CHECK-NOFP16-SD-NEXT: mov h6, v1.h[3]5003; CHECK-NOFP16-SD-NEXT: fcvt s1, h15004; CHECK-NOFP16-SD-NEXT: fcvt s4, h45005; CHECK-NOFP16-SD-NEXT: fcvt s3, h35006; CHECK-NOFP16-SD-NEXT: fcvt s7, h75007; CHECK-NOFP16-SD-NEXT: fcvtzu x9, s05008; CHECK-NOFP16-SD-NEXT: fcvt s2, h25009; CHECK-NOFP16-SD-NEXT: fcvt s5, h55010; CHECK-NOFP16-SD-NEXT: fcvt s6, h65011; CHECK-NOFP16-SD-NEXT: fcvtzu x8, s15012; CHECK-NOFP16-SD-NEXT: fcvtzu x12, s45013; CHECK-NOFP16-SD-NEXT: fcvtzu x11, s35014; CHECK-NOFP16-SD-NEXT: fcvtzu x15, s75015; CHECK-NOFP16-SD-NEXT: fmov d0, x95016; CHECK-NOFP16-SD-NEXT: fcvtzu x10, s25017; CHECK-NOFP16-SD-NEXT: fcvtzu x13, s55018; CHECK-NOFP16-SD-NEXT: fcvtzu x14, s65019; CHECK-NOFP16-SD-NEXT: fmov d2, x85020; CHECK-NOFP16-SD-NEXT: fmov d1, x125021; CHECK-NOFP16-SD-NEXT: mov v0.d[1], x115022; CHECK-NOFP16-SD-NEXT: fmov d3, x105023; CHECK-NOFP16-SD-NEXT: mov v2.d[1], x135024; CHECK-NOFP16-SD-NEXT: mov v1.d[1], x155025; CHECK-NOFP16-SD-NEXT: mov v3.d[1], x145026; CHECK-NOFP16-SD-NEXT: ret5027;5028; CHECK-FP16-SD-LABEL: fptou_v8f16_v8i64:5029; CHECK-FP16-SD: // %bb.0: // %entry5030; CHECK-FP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #85031; CHECK-FP16-SD-NEXT: mov h4, v0.h[2]5032; CHECK-FP16-SD-NEXT: mov h3, v0.h[1]5033; CHECK-FP16-SD-NEXT: mov h7, v0.h[3]5034; CHECK-FP16-SD-NEXT: fcvtzu x9, h05035; CHECK-FP16-SD-NEXT: mov h2, v1.h[2]5036; CHECK-FP16-SD-NEXT: mov h5, v1.h[1]5037; CHECK-FP16-SD-NEXT: mov h6, v1.h[3]5038; CHECK-FP16-SD-NEXT: fcvtzu x8, h15039; CHECK-FP16-SD-NEXT: fcvtzu x12, h45040; CHECK-FP16-SD-NEXT: fcvtzu x11, h35041; CHECK-FP16-SD-NEXT: fcvtzu x15, h75042; CHECK-FP16-SD-NEXT: fmov d0, x95043; CHECK-FP16-SD-NEXT: fcvtzu x10, h25044; CHECK-FP16-SD-NEXT: fcvtzu x13, h55045; CHECK-FP16-SD-NEXT: fcvtzu x14, h65046; CHECK-FP16-SD-NEXT: fmov d2, x85047; CHECK-FP16-SD-NEXT: fmov d1, x125048; CHECK-FP16-SD-NEXT: mov v0.d[1], x115049; CHECK-FP16-SD-NEXT: fmov d3, x105050; CHECK-FP16-SD-NEXT: mov v2.d[1], x135051; CHECK-FP16-SD-NEXT: mov v1.d[1], x155052; CHECK-FP16-SD-NEXT: mov v3.d[1], x145053; CHECK-FP16-SD-NEXT: ret5054;5055; CHECK-NOFP16-GI-LABEL: fptou_v8f16_v8i64:5056; CHECK-NOFP16-GI: // %bb.0: // %entry5057; CHECK-NOFP16-GI-NEXT: fcvtl v1.4s, v0.4h5058; CHECK-NOFP16-GI-NEXT: fcvtl2 v0.4s, v0.8h5059; CHECK-NOFP16-GI-NEXT: fcvtl v2.2d, v1.2s5060; CHECK-NOFP16-GI-NEXT: fcvtl2 v1.2d, v1.4s5061; CHECK-NOFP16-GI-NEXT: fcvtl v3.2d, v0.2s5062; CHECK-NOFP16-GI-NEXT: fcvtl2 v4.2d, v0.4s5063; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v2.2d5064; CHECK-NOFP16-GI-NEXT: fcvtzu v1.2d, v1.2d5065; CHECK-NOFP16-GI-NEXT: fcvtzu v2.2d, v3.2d5066; CHECK-NOFP16-GI-NEXT: fcvtzu v3.2d, v4.2d5067; CHECK-NOFP16-GI-NEXT: ret5068;5069; CHECK-FP16-GI-LABEL: fptou_v8f16_v8i64:5070; CHECK-FP16-GI: // %bb.0: // %entry5071; CHECK-FP16-GI-NEXT: fcvtl v1.4s, v0.4h5072; CHECK-FP16-GI-NEXT: fcvtl2 v0.4s, v0.8h5073; CHECK-FP16-GI-NEXT: fcvtl v2.2d, v1.2s5074; CHECK-FP16-GI-NEXT: fcvtl2 v1.2d, v1.4s5075; CHECK-FP16-GI-NEXT: fcvtl v3.2d, v0.2s5076; CHECK-FP16-GI-NEXT: fcvtl2 v4.2d, v0.4s5077; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v2.2d5078; CHECK-FP16-GI-NEXT: fcvtzu v1.2d, v1.2d5079; CHECK-FP16-GI-NEXT: fcvtzu v2.2d, v3.2d5080; CHECK-FP16-GI-NEXT: fcvtzu v3.2d, v4.2d5081; CHECK-FP16-GI-NEXT: ret5082entry:5083 %c = fptoui <8 x half> %a to <8 x i64>5084 ret <8 x i64> %c5085}5086 5087define <16 x i64> @fptos_v16f16_v16i64(<16 x half> %a) {5088; CHECK-NOFP16-SD-LABEL: fptos_v16f16_v16i64:5089; CHECK-NOFP16-SD: // %bb.0: // %entry5090; CHECK-NOFP16-SD-NEXT: ext v2.16b, v0.16b, v0.16b, #85091; CHECK-NOFP16-SD-NEXT: ext v3.16b, v1.16b, v1.16b, #85092; CHECK-NOFP16-SD-NEXT: mov h4, v0.h[1]5093; CHECK-NOFP16-SD-NEXT: fcvt s5, h05094; CHECK-NOFP16-SD-NEXT: mov h18, v0.h[2]5095; CHECK-NOFP16-SD-NEXT: mov h0, v0.h[3]5096; CHECK-NOFP16-SD-NEXT: fcvt s6, h25097; CHECK-NOFP16-SD-NEXT: mov h7, v2.h[1]5098; CHECK-NOFP16-SD-NEXT: mov h16, v2.h[2]5099; CHECK-NOFP16-SD-NEXT: mov h17, v3.h[2]5100; CHECK-NOFP16-SD-NEXT: fcvt s19, h35101; CHECK-NOFP16-SD-NEXT: fcvt s4, h45102; CHECK-NOFP16-SD-NEXT: fcvtzs x8, s55103; CHECK-NOFP16-SD-NEXT: mov h5, v1.h[1]5104; CHECK-NOFP16-SD-NEXT: mov h2, v2.h[3]5105; CHECK-NOFP16-SD-NEXT: fcvt s18, h185106; CHECK-NOFP16-SD-NEXT: fcvt s0, h05107; CHECK-NOFP16-SD-NEXT: fcvtzs x9, s65108; CHECK-NOFP16-SD-NEXT: fcvt s6, h75109; CHECK-NOFP16-SD-NEXT: fcvt s7, h165110; CHECK-NOFP16-SD-NEXT: mov h16, v1.h[2]5111; CHECK-NOFP16-SD-NEXT: fcvt s17, h175112; CHECK-NOFP16-SD-NEXT: fcvtzs x10, s195113; CHECK-NOFP16-SD-NEXT: mov h19, v3.h[1]5114; CHECK-NOFP16-SD-NEXT: fcvtzs x11, s45115; CHECK-NOFP16-SD-NEXT: mov h4, v1.h[3]5116; CHECK-NOFP16-SD-NEXT: mov h3, v3.h[3]5117; CHECK-NOFP16-SD-NEXT: fcvt s1, h15118; CHECK-NOFP16-SD-NEXT: fcvt s5, h55119; CHECK-NOFP16-SD-NEXT: fcvtzs x13, s75120; CHECK-NOFP16-SD-NEXT: fcvtzs x12, s65121; CHECK-NOFP16-SD-NEXT: fcvtzs x15, s185122; CHECK-NOFP16-SD-NEXT: fcvt s7, h165123; CHECK-NOFP16-SD-NEXT: fcvtzs x14, s175124; CHECK-NOFP16-SD-NEXT: fcvt s16, h25125; CHECK-NOFP16-SD-NEXT: fcvt s17, h195126; CHECK-NOFP16-SD-NEXT: fcvt s4, h45127; CHECK-NOFP16-SD-NEXT: fmov d2, x95128; CHECK-NOFP16-SD-NEXT: fcvt s19, h35129; CHECK-NOFP16-SD-NEXT: fcvtzs x9, s15130; CHECK-NOFP16-SD-NEXT: fmov d6, x105131; CHECK-NOFP16-SD-NEXT: fmov d3, x135132; CHECK-NOFP16-SD-NEXT: fcvtzs x13, s05133; CHECK-NOFP16-SD-NEXT: fcvtzs x16, s55134; CHECK-NOFP16-SD-NEXT: fcvtzs x10, s75135; CHECK-NOFP16-SD-NEXT: fmov d7, x145136; CHECK-NOFP16-SD-NEXT: fcvtzs x14, s165137; CHECK-NOFP16-SD-NEXT: fcvtzs x17, s175138; CHECK-NOFP16-SD-NEXT: fcvtzs x0, s45139; CHECK-NOFP16-SD-NEXT: fmov d0, x85140; CHECK-NOFP16-SD-NEXT: fcvtzs x18, s195141; CHECK-NOFP16-SD-NEXT: fmov d1, x155142; CHECK-NOFP16-SD-NEXT: fmov d4, x95143; CHECK-NOFP16-SD-NEXT: mov v2.d[1], x125144; CHECK-NOFP16-SD-NEXT: fmov d5, x105145; CHECK-NOFP16-SD-NEXT: mov v0.d[1], x115146; CHECK-NOFP16-SD-NEXT: mov v3.d[1], x145147; CHECK-NOFP16-SD-NEXT: mov v1.d[1], x135148; CHECK-NOFP16-SD-NEXT: mov v4.d[1], x165149; CHECK-NOFP16-SD-NEXT: mov v6.d[1], x175150; CHECK-NOFP16-SD-NEXT: mov v7.d[1], x185151; CHECK-NOFP16-SD-NEXT: mov v5.d[1], x05152; CHECK-NOFP16-SD-NEXT: ret5153;5154; CHECK-FP16-SD-LABEL: fptos_v16f16_v16i64:5155; CHECK-FP16-SD: // %bb.0: // %entry5156; CHECK-FP16-SD-NEXT: ext v2.16b, v0.16b, v0.16b, #85157; CHECK-FP16-SD-NEXT: ext v3.16b, v1.16b, v1.16b, #85158; CHECK-FP16-SD-NEXT: mov h4, v0.h[1]5159; CHECK-FP16-SD-NEXT: mov h5, v0.h[2]5160; CHECK-FP16-SD-NEXT: fcvtzs x8, h05161; CHECK-FP16-SD-NEXT: mov h0, v0.h[3]5162; CHECK-FP16-SD-NEXT: fcvtzs x9, h15163; CHECK-FP16-SD-NEXT: mov h7, v1.h[1]5164; CHECK-FP16-SD-NEXT: mov h6, v2.h[2]5165; CHECK-FP16-SD-NEXT: mov h16, v3.h[2]5166; CHECK-FP16-SD-NEXT: fcvtzs x10, h45167; CHECK-FP16-SD-NEXT: mov h4, v1.h[2]5168; CHECK-FP16-SD-NEXT: fcvtzs x11, h25169; CHECK-FP16-SD-NEXT: fcvtzs x12, h55170; CHECK-FP16-SD-NEXT: mov h5, v2.h[1]5171; CHECK-FP16-SD-NEXT: mov h17, v2.h[3]5172; CHECK-FP16-SD-NEXT: fcvtzs x13, h35173; CHECK-FP16-SD-NEXT: mov h18, v3.h[1]5174; CHECK-FP16-SD-NEXT: mov h1, v1.h[3]5175; CHECK-FP16-SD-NEXT: mov h19, v3.h[3]5176; CHECK-FP16-SD-NEXT: fcvtzs x14, h65177; CHECK-FP16-SD-NEXT: fcvtzs x15, h165178; CHECK-FP16-SD-NEXT: fcvtzs x16, h05179; CHECK-FP16-SD-NEXT: fcvtzs x0, h45180; CHECK-FP16-SD-NEXT: fcvtzs x17, h75181; CHECK-FP16-SD-NEXT: fmov d2, x115182; CHECK-FP16-SD-NEXT: fcvtzs x11, h55183; CHECK-FP16-SD-NEXT: fcvtzs x18, h175184; CHECK-FP16-SD-NEXT: fmov d6, x135185; CHECK-FP16-SD-NEXT: fcvtzs x13, h185186; CHECK-FP16-SD-NEXT: fmov d0, x85187; CHECK-FP16-SD-NEXT: fmov d4, x95188; CHECK-FP16-SD-NEXT: fmov d3, x145189; CHECK-FP16-SD-NEXT: fmov d7, x155190; CHECK-FP16-SD-NEXT: fcvtzs x14, h195191; CHECK-FP16-SD-NEXT: fcvtzs x15, h15192; CHECK-FP16-SD-NEXT: fmov d1, x125193; CHECK-FP16-SD-NEXT: fmov d5, x05194; CHECK-FP16-SD-NEXT: mov v0.d[1], x105195; CHECK-FP16-SD-NEXT: mov v4.d[1], x175196; CHECK-FP16-SD-NEXT: mov v2.d[1], x115197; CHECK-FP16-SD-NEXT: mov v3.d[1], x185198; CHECK-FP16-SD-NEXT: mov v6.d[1], x135199; CHECK-FP16-SD-NEXT: mov v1.d[1], x165200; CHECK-FP16-SD-NEXT: mov v7.d[1], x145201; CHECK-FP16-SD-NEXT: mov v5.d[1], x155202; CHECK-FP16-SD-NEXT: ret5203;5204; CHECK-NOFP16-GI-LABEL: fptos_v16f16_v16i64:5205; CHECK-NOFP16-GI: // %bb.0: // %entry5206; CHECK-NOFP16-GI-NEXT: fcvtl v2.4s, v0.4h5207; CHECK-NOFP16-GI-NEXT: fcvtl2 v0.4s, v0.8h5208; CHECK-NOFP16-GI-NEXT: fcvtl v3.4s, v1.4h5209; CHECK-NOFP16-GI-NEXT: fcvtl2 v1.4s, v1.8h5210; CHECK-NOFP16-GI-NEXT: fcvtl v4.2d, v2.2s5211; CHECK-NOFP16-GI-NEXT: fcvtl2 v2.2d, v2.4s5212; CHECK-NOFP16-GI-NEXT: fcvtl v5.2d, v0.2s5213; CHECK-NOFP16-GI-NEXT: fcvtl2 v6.2d, v0.4s5214; CHECK-NOFP16-GI-NEXT: fcvtl v7.2d, v3.2s5215; CHECK-NOFP16-GI-NEXT: fcvtl2 v16.2d, v3.4s5216; CHECK-NOFP16-GI-NEXT: fcvtl v17.2d, v1.2s5217; CHECK-NOFP16-GI-NEXT: fcvtl2 v18.2d, v1.4s5218; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2d, v4.2d5219; CHECK-NOFP16-GI-NEXT: fcvtzs v1.2d, v2.2d5220; CHECK-NOFP16-GI-NEXT: fcvtzs v2.2d, v5.2d5221; CHECK-NOFP16-GI-NEXT: fcvtzs v3.2d, v6.2d5222; CHECK-NOFP16-GI-NEXT: fcvtzs v4.2d, v7.2d5223; CHECK-NOFP16-GI-NEXT: fcvtzs v5.2d, v16.2d5224; CHECK-NOFP16-GI-NEXT: fcvtzs v6.2d, v17.2d5225; CHECK-NOFP16-GI-NEXT: fcvtzs v7.2d, v18.2d5226; CHECK-NOFP16-GI-NEXT: ret5227;5228; CHECK-FP16-GI-LABEL: fptos_v16f16_v16i64:5229; CHECK-FP16-GI: // %bb.0: // %entry5230; CHECK-FP16-GI-NEXT: fcvtl v2.4s, v0.4h5231; CHECK-FP16-GI-NEXT: fcvtl2 v0.4s, v0.8h5232; CHECK-FP16-GI-NEXT: fcvtl v3.4s, v1.4h5233; CHECK-FP16-GI-NEXT: fcvtl2 v1.4s, v1.8h5234; CHECK-FP16-GI-NEXT: fcvtl v4.2d, v2.2s5235; CHECK-FP16-GI-NEXT: fcvtl2 v2.2d, v2.4s5236; CHECK-FP16-GI-NEXT: fcvtl v5.2d, v0.2s5237; CHECK-FP16-GI-NEXT: fcvtl2 v6.2d, v0.4s5238; CHECK-FP16-GI-NEXT: fcvtl v7.2d, v3.2s5239; CHECK-FP16-GI-NEXT: fcvtl2 v16.2d, v3.4s5240; CHECK-FP16-GI-NEXT: fcvtl v17.2d, v1.2s5241; CHECK-FP16-GI-NEXT: fcvtl2 v18.2d, v1.4s5242; CHECK-FP16-GI-NEXT: fcvtzs v0.2d, v4.2d5243; CHECK-FP16-GI-NEXT: fcvtzs v1.2d, v2.2d5244; CHECK-FP16-GI-NEXT: fcvtzs v2.2d, v5.2d5245; CHECK-FP16-GI-NEXT: fcvtzs v3.2d, v6.2d5246; CHECK-FP16-GI-NEXT: fcvtzs v4.2d, v7.2d5247; CHECK-FP16-GI-NEXT: fcvtzs v5.2d, v16.2d5248; CHECK-FP16-GI-NEXT: fcvtzs v6.2d, v17.2d5249; CHECK-FP16-GI-NEXT: fcvtzs v7.2d, v18.2d5250; CHECK-FP16-GI-NEXT: ret5251entry:5252 %c = fptosi <16 x half> %a to <16 x i64>5253 ret <16 x i64> %c5254}5255 5256define <16 x i64> @fptou_v16f16_v16i64(<16 x half> %a) {5257; CHECK-NOFP16-SD-LABEL: fptou_v16f16_v16i64:5258; CHECK-NOFP16-SD: // %bb.0: // %entry5259; CHECK-NOFP16-SD-NEXT: ext v2.16b, v0.16b, v0.16b, #85260; CHECK-NOFP16-SD-NEXT: ext v3.16b, v1.16b, v1.16b, #85261; CHECK-NOFP16-SD-NEXT: mov h4, v0.h[1]5262; CHECK-NOFP16-SD-NEXT: fcvt s5, h05263; CHECK-NOFP16-SD-NEXT: mov h18, v0.h[2]5264; CHECK-NOFP16-SD-NEXT: mov h0, v0.h[3]5265; CHECK-NOFP16-SD-NEXT: fcvt s6, h25266; CHECK-NOFP16-SD-NEXT: mov h7, v2.h[1]5267; CHECK-NOFP16-SD-NEXT: mov h16, v2.h[2]5268; CHECK-NOFP16-SD-NEXT: mov h17, v3.h[2]5269; CHECK-NOFP16-SD-NEXT: fcvt s19, h35270; CHECK-NOFP16-SD-NEXT: fcvt s4, h45271; CHECK-NOFP16-SD-NEXT: fcvtzu x8, s55272; CHECK-NOFP16-SD-NEXT: mov h5, v1.h[1]5273; CHECK-NOFP16-SD-NEXT: mov h2, v2.h[3]5274; CHECK-NOFP16-SD-NEXT: fcvt s18, h185275; CHECK-NOFP16-SD-NEXT: fcvt s0, h05276; CHECK-NOFP16-SD-NEXT: fcvtzu x9, s65277; CHECK-NOFP16-SD-NEXT: fcvt s6, h75278; CHECK-NOFP16-SD-NEXT: fcvt s7, h165279; CHECK-NOFP16-SD-NEXT: mov h16, v1.h[2]5280; CHECK-NOFP16-SD-NEXT: fcvt s17, h175281; CHECK-NOFP16-SD-NEXT: fcvtzu x10, s195282; CHECK-NOFP16-SD-NEXT: mov h19, v3.h[1]5283; CHECK-NOFP16-SD-NEXT: fcvtzu x11, s45284; CHECK-NOFP16-SD-NEXT: mov h4, v1.h[3]5285; CHECK-NOFP16-SD-NEXT: mov h3, v3.h[3]5286; CHECK-NOFP16-SD-NEXT: fcvt s1, h15287; CHECK-NOFP16-SD-NEXT: fcvt s5, h55288; CHECK-NOFP16-SD-NEXT: fcvtzu x13, s75289; CHECK-NOFP16-SD-NEXT: fcvtzu x12, s65290; CHECK-NOFP16-SD-NEXT: fcvtzu x15, s185291; CHECK-NOFP16-SD-NEXT: fcvt s7, h165292; CHECK-NOFP16-SD-NEXT: fcvtzu x14, s175293; CHECK-NOFP16-SD-NEXT: fcvt s16, h25294; CHECK-NOFP16-SD-NEXT: fcvt s17, h195295; CHECK-NOFP16-SD-NEXT: fcvt s4, h45296; CHECK-NOFP16-SD-NEXT: fmov d2, x95297; CHECK-NOFP16-SD-NEXT: fcvt s19, h35298; CHECK-NOFP16-SD-NEXT: fcvtzu x9, s15299; CHECK-NOFP16-SD-NEXT: fmov d6, x105300; CHECK-NOFP16-SD-NEXT: fmov d3, x135301; CHECK-NOFP16-SD-NEXT: fcvtzu x13, s05302; CHECK-NOFP16-SD-NEXT: fcvtzu x16, s55303; CHECK-NOFP16-SD-NEXT: fcvtzu x10, s75304; CHECK-NOFP16-SD-NEXT: fmov d7, x145305; CHECK-NOFP16-SD-NEXT: fcvtzu x14, s165306; CHECK-NOFP16-SD-NEXT: fcvtzu x17, s175307; CHECK-NOFP16-SD-NEXT: fcvtzu x0, s45308; CHECK-NOFP16-SD-NEXT: fmov d0, x85309; CHECK-NOFP16-SD-NEXT: fcvtzu x18, s195310; CHECK-NOFP16-SD-NEXT: fmov d1, x155311; CHECK-NOFP16-SD-NEXT: fmov d4, x95312; CHECK-NOFP16-SD-NEXT: mov v2.d[1], x125313; CHECK-NOFP16-SD-NEXT: fmov d5, x105314; CHECK-NOFP16-SD-NEXT: mov v0.d[1], x115315; CHECK-NOFP16-SD-NEXT: mov v3.d[1], x145316; CHECK-NOFP16-SD-NEXT: mov v1.d[1], x135317; CHECK-NOFP16-SD-NEXT: mov v4.d[1], x165318; CHECK-NOFP16-SD-NEXT: mov v6.d[1], x175319; CHECK-NOFP16-SD-NEXT: mov v7.d[1], x185320; CHECK-NOFP16-SD-NEXT: mov v5.d[1], x05321; CHECK-NOFP16-SD-NEXT: ret5322;5323; CHECK-FP16-SD-LABEL: fptou_v16f16_v16i64:5324; CHECK-FP16-SD: // %bb.0: // %entry5325; CHECK-FP16-SD-NEXT: ext v2.16b, v0.16b, v0.16b, #85326; CHECK-FP16-SD-NEXT: ext v3.16b, v1.16b, v1.16b, #85327; CHECK-FP16-SD-NEXT: mov h4, v0.h[1]5328; CHECK-FP16-SD-NEXT: mov h5, v0.h[2]5329; CHECK-FP16-SD-NEXT: fcvtzu x8, h05330; CHECK-FP16-SD-NEXT: mov h0, v0.h[3]5331; CHECK-FP16-SD-NEXT: fcvtzu x9, h15332; CHECK-FP16-SD-NEXT: mov h7, v1.h[1]5333; CHECK-FP16-SD-NEXT: mov h6, v2.h[2]5334; CHECK-FP16-SD-NEXT: mov h16, v3.h[2]5335; CHECK-FP16-SD-NEXT: fcvtzu x10, h45336; CHECK-FP16-SD-NEXT: mov h4, v1.h[2]5337; CHECK-FP16-SD-NEXT: fcvtzu x11, h25338; CHECK-FP16-SD-NEXT: fcvtzu x12, h55339; CHECK-FP16-SD-NEXT: mov h5, v2.h[1]5340; CHECK-FP16-SD-NEXT: mov h17, v2.h[3]5341; CHECK-FP16-SD-NEXT: fcvtzu x13, h35342; CHECK-FP16-SD-NEXT: mov h18, v3.h[1]5343; CHECK-FP16-SD-NEXT: mov h1, v1.h[3]5344; CHECK-FP16-SD-NEXT: mov h19, v3.h[3]5345; CHECK-FP16-SD-NEXT: fcvtzu x14, h65346; CHECK-FP16-SD-NEXT: fcvtzu x15, h165347; CHECK-FP16-SD-NEXT: fcvtzu x16, h05348; CHECK-FP16-SD-NEXT: fcvtzu x0, h45349; CHECK-FP16-SD-NEXT: fcvtzu x17, h75350; CHECK-FP16-SD-NEXT: fmov d2, x115351; CHECK-FP16-SD-NEXT: fcvtzu x11, h55352; CHECK-FP16-SD-NEXT: fcvtzu x18, h175353; CHECK-FP16-SD-NEXT: fmov d6, x135354; CHECK-FP16-SD-NEXT: fcvtzu x13, h185355; CHECK-FP16-SD-NEXT: fmov d0, x85356; CHECK-FP16-SD-NEXT: fmov d4, x95357; CHECK-FP16-SD-NEXT: fmov d3, x145358; CHECK-FP16-SD-NEXT: fmov d7, x155359; CHECK-FP16-SD-NEXT: fcvtzu x14, h195360; CHECK-FP16-SD-NEXT: fcvtzu x15, h15361; CHECK-FP16-SD-NEXT: fmov d1, x125362; CHECK-FP16-SD-NEXT: fmov d5, x05363; CHECK-FP16-SD-NEXT: mov v0.d[1], x105364; CHECK-FP16-SD-NEXT: mov v4.d[1], x175365; CHECK-FP16-SD-NEXT: mov v2.d[1], x115366; CHECK-FP16-SD-NEXT: mov v3.d[1], x185367; CHECK-FP16-SD-NEXT: mov v6.d[1], x135368; CHECK-FP16-SD-NEXT: mov v1.d[1], x165369; CHECK-FP16-SD-NEXT: mov v7.d[1], x145370; CHECK-FP16-SD-NEXT: mov v5.d[1], x155371; CHECK-FP16-SD-NEXT: ret5372;5373; CHECK-NOFP16-GI-LABEL: fptou_v16f16_v16i64:5374; CHECK-NOFP16-GI: // %bb.0: // %entry5375; CHECK-NOFP16-GI-NEXT: fcvtl v2.4s, v0.4h5376; CHECK-NOFP16-GI-NEXT: fcvtl2 v0.4s, v0.8h5377; CHECK-NOFP16-GI-NEXT: fcvtl v3.4s, v1.4h5378; CHECK-NOFP16-GI-NEXT: fcvtl2 v1.4s, v1.8h5379; CHECK-NOFP16-GI-NEXT: fcvtl v4.2d, v2.2s5380; CHECK-NOFP16-GI-NEXT: fcvtl2 v2.2d, v2.4s5381; CHECK-NOFP16-GI-NEXT: fcvtl v5.2d, v0.2s5382; CHECK-NOFP16-GI-NEXT: fcvtl2 v6.2d, v0.4s5383; CHECK-NOFP16-GI-NEXT: fcvtl v7.2d, v3.2s5384; CHECK-NOFP16-GI-NEXT: fcvtl2 v16.2d, v3.4s5385; CHECK-NOFP16-GI-NEXT: fcvtl v17.2d, v1.2s5386; CHECK-NOFP16-GI-NEXT: fcvtl2 v18.2d, v1.4s5387; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2d, v4.2d5388; CHECK-NOFP16-GI-NEXT: fcvtzu v1.2d, v2.2d5389; CHECK-NOFP16-GI-NEXT: fcvtzu v2.2d, v5.2d5390; CHECK-NOFP16-GI-NEXT: fcvtzu v3.2d, v6.2d5391; CHECK-NOFP16-GI-NEXT: fcvtzu v4.2d, v7.2d5392; CHECK-NOFP16-GI-NEXT: fcvtzu v5.2d, v16.2d5393; CHECK-NOFP16-GI-NEXT: fcvtzu v6.2d, v17.2d5394; CHECK-NOFP16-GI-NEXT: fcvtzu v7.2d, v18.2d5395; CHECK-NOFP16-GI-NEXT: ret5396;5397; CHECK-FP16-GI-LABEL: fptou_v16f16_v16i64:5398; CHECK-FP16-GI: // %bb.0: // %entry5399; CHECK-FP16-GI-NEXT: fcvtl v2.4s, v0.4h5400; CHECK-FP16-GI-NEXT: fcvtl2 v0.4s, v0.8h5401; CHECK-FP16-GI-NEXT: fcvtl v3.4s, v1.4h5402; CHECK-FP16-GI-NEXT: fcvtl2 v1.4s, v1.8h5403; CHECK-FP16-GI-NEXT: fcvtl v4.2d, v2.2s5404; CHECK-FP16-GI-NEXT: fcvtl2 v2.2d, v2.4s5405; CHECK-FP16-GI-NEXT: fcvtl v5.2d, v0.2s5406; CHECK-FP16-GI-NEXT: fcvtl2 v6.2d, v0.4s5407; CHECK-FP16-GI-NEXT: fcvtl v7.2d, v3.2s5408; CHECK-FP16-GI-NEXT: fcvtl2 v16.2d, v3.4s5409; CHECK-FP16-GI-NEXT: fcvtl v17.2d, v1.2s5410; CHECK-FP16-GI-NEXT: fcvtl2 v18.2d, v1.4s5411; CHECK-FP16-GI-NEXT: fcvtzu v0.2d, v4.2d5412; CHECK-FP16-GI-NEXT: fcvtzu v1.2d, v2.2d5413; CHECK-FP16-GI-NEXT: fcvtzu v2.2d, v5.2d5414; CHECK-FP16-GI-NEXT: fcvtzu v3.2d, v6.2d5415; CHECK-FP16-GI-NEXT: fcvtzu v4.2d, v7.2d5416; CHECK-FP16-GI-NEXT: fcvtzu v5.2d, v16.2d5417; CHECK-FP16-GI-NEXT: fcvtzu v6.2d, v17.2d5418; CHECK-FP16-GI-NEXT: fcvtzu v7.2d, v18.2d5419; CHECK-FP16-GI-NEXT: ret5420entry:5421 %c = fptoui <16 x half> %a to <16 x i64>5422 ret <16 x i64> %c5423}5424 5425define <2 x i32> @fptos_v2f16_v2i32(<2 x half> %a) {5426; CHECK-NOFP16-SD-LABEL: fptos_v2f16_v2i32:5427; CHECK-NOFP16-SD: // %bb.0: // %entry5428; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h5429; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s5430; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05431; CHECK-NOFP16-SD-NEXT: ret5432;5433; CHECK-FP16-SD-LABEL: fptos_v2f16_v2i32:5434; CHECK-FP16-SD: // %bb.0: // %entry5435; CHECK-FP16-SD-NEXT: fcvtl v0.4s, v0.4h5436; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s5437; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05438; CHECK-FP16-SD-NEXT: ret5439;5440; CHECK-NOFP16-GI-LABEL: fptos_v2f16_v2i32:5441; CHECK-NOFP16-GI: // %bb.0: // %entry5442; CHECK-NOFP16-GI-NEXT: fcvtl v0.4s, v0.4h5443; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2s, v0.2s5444; CHECK-NOFP16-GI-NEXT: ret5445;5446; CHECK-FP16-GI-LABEL: fptos_v2f16_v2i32:5447; CHECK-FP16-GI: // %bb.0: // %entry5448; CHECK-FP16-GI-NEXT: fcvtl v0.4s, v0.4h5449; CHECK-FP16-GI-NEXT: fcvtzs v0.2s, v0.2s5450; CHECK-FP16-GI-NEXT: ret5451entry:5452 %c = fptosi <2 x half> %a to <2 x i32>5453 ret <2 x i32> %c5454}5455 5456define <2 x i32> @fptou_v2f16_v2i32(<2 x half> %a) {5457; CHECK-NOFP16-SD-LABEL: fptou_v2f16_v2i32:5458; CHECK-NOFP16-SD: // %bb.0: // %entry5459; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h5460; CHECK-NOFP16-SD-NEXT: fcvtzu v0.4s, v0.4s5461; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05462; CHECK-NOFP16-SD-NEXT: ret5463;5464; CHECK-FP16-SD-LABEL: fptou_v2f16_v2i32:5465; CHECK-FP16-SD: // %bb.0: // %entry5466; CHECK-FP16-SD-NEXT: fcvtl v0.4s, v0.4h5467; CHECK-FP16-SD-NEXT: fcvtzu v0.4s, v0.4s5468; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05469; CHECK-FP16-SD-NEXT: ret5470;5471; CHECK-NOFP16-GI-LABEL: fptou_v2f16_v2i32:5472; CHECK-NOFP16-GI: // %bb.0: // %entry5473; CHECK-NOFP16-GI-NEXT: fcvtl v0.4s, v0.4h5474; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2s, v0.2s5475; CHECK-NOFP16-GI-NEXT: ret5476;5477; CHECK-FP16-GI-LABEL: fptou_v2f16_v2i32:5478; CHECK-FP16-GI: // %bb.0: // %entry5479; CHECK-FP16-GI-NEXT: fcvtl v0.4s, v0.4h5480; CHECK-FP16-GI-NEXT: fcvtzu v0.2s, v0.2s5481; CHECK-FP16-GI-NEXT: ret5482entry:5483 %c = fptoui <2 x half> %a to <2 x i32>5484 ret <2 x i32> %c5485}5486 5487define <3 x i32> @fptos_v3f16_v3i32(<3 x half> %a) {5488; CHECK-LABEL: fptos_v3f16_v3i32:5489; CHECK: // %bb.0: // %entry5490; CHECK-NEXT: fcvtl v0.4s, v0.4h5491; CHECK-NEXT: fcvtzs v0.4s, v0.4s5492; CHECK-NEXT: ret5493entry:5494 %c = fptosi <3 x half> %a to <3 x i32>5495 ret <3 x i32> %c5496}5497 5498define <3 x i32> @fptou_v3f16_v3i32(<3 x half> %a) {5499; CHECK-LABEL: fptou_v3f16_v3i32:5500; CHECK: // %bb.0: // %entry5501; CHECK-NEXT: fcvtl v0.4s, v0.4h5502; CHECK-NEXT: fcvtzu v0.4s, v0.4s5503; CHECK-NEXT: ret5504entry:5505 %c = fptoui <3 x half> %a to <3 x i32>5506 ret <3 x i32> %c5507}5508 5509define <4 x i32> @fptos_v4f16_v4i32(<4 x half> %a) {5510; CHECK-LABEL: fptos_v4f16_v4i32:5511; CHECK: // %bb.0: // %entry5512; CHECK-NEXT: fcvtl v0.4s, v0.4h5513; CHECK-NEXT: fcvtzs v0.4s, v0.4s5514; CHECK-NEXT: ret5515entry:5516 %c = fptosi <4 x half> %a to <4 x i32>5517 ret <4 x i32> %c5518}5519 5520define <4 x i32> @fptou_v4f16_v4i32(<4 x half> %a) {5521; CHECK-LABEL: fptou_v4f16_v4i32:5522; CHECK: // %bb.0: // %entry5523; CHECK-NEXT: fcvtl v0.4s, v0.4h5524; CHECK-NEXT: fcvtzu v0.4s, v0.4s5525; CHECK-NEXT: ret5526entry:5527 %c = fptoui <4 x half> %a to <4 x i32>5528 ret <4 x i32> %c5529}5530 5531define <8 x i32> @fptos_v8f16_v8i32(<8 x half> %a) {5532; CHECK-NOFP16-SD-LABEL: fptos_v8f16_v8i32:5533; CHECK-NOFP16-SD: // %bb.0: // %entry5534; CHECK-NOFP16-SD-NEXT: fcvtl2 v1.4s, v0.8h5535; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h5536; CHECK-NOFP16-SD-NEXT: fcvtzs v1.4s, v1.4s5537; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s5538; CHECK-NOFP16-SD-NEXT: ret5539;5540; CHECK-FP16-SD-LABEL: fptos_v8f16_v8i32:5541; CHECK-FP16-SD: // %bb.0: // %entry5542; CHECK-FP16-SD-NEXT: fcvtl2 v1.4s, v0.8h5543; CHECK-FP16-SD-NEXT: fcvtl v0.4s, v0.4h5544; CHECK-FP16-SD-NEXT: fcvtzs v1.4s, v1.4s5545; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s5546; CHECK-FP16-SD-NEXT: ret5547;5548; CHECK-NOFP16-GI-LABEL: fptos_v8f16_v8i32:5549; CHECK-NOFP16-GI: // %bb.0: // %entry5550; CHECK-NOFP16-GI-NEXT: fcvtl v1.4s, v0.4h5551; CHECK-NOFP16-GI-NEXT: fcvtl2 v2.4s, v0.8h5552; CHECK-NOFP16-GI-NEXT: fcvtzs v0.4s, v1.4s5553; CHECK-NOFP16-GI-NEXT: fcvtzs v1.4s, v2.4s5554; CHECK-NOFP16-GI-NEXT: ret5555;5556; CHECK-FP16-GI-LABEL: fptos_v8f16_v8i32:5557; CHECK-FP16-GI: // %bb.0: // %entry5558; CHECK-FP16-GI-NEXT: fcvtl v1.4s, v0.4h5559; CHECK-FP16-GI-NEXT: fcvtl2 v2.4s, v0.8h5560; CHECK-FP16-GI-NEXT: fcvtzs v0.4s, v1.4s5561; CHECK-FP16-GI-NEXT: fcvtzs v1.4s, v2.4s5562; CHECK-FP16-GI-NEXT: ret5563entry:5564 %c = fptosi <8 x half> %a to <8 x i32>5565 ret <8 x i32> %c5566}5567 5568define <8 x i32> @fptou_v8f16_v8i32(<8 x half> %a) {5569; CHECK-NOFP16-SD-LABEL: fptou_v8f16_v8i32:5570; CHECK-NOFP16-SD: // %bb.0: // %entry5571; CHECK-NOFP16-SD-NEXT: fcvtl2 v1.4s, v0.8h5572; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h5573; CHECK-NOFP16-SD-NEXT: fcvtzu v1.4s, v1.4s5574; CHECK-NOFP16-SD-NEXT: fcvtzu v0.4s, v0.4s5575; CHECK-NOFP16-SD-NEXT: ret5576;5577; CHECK-FP16-SD-LABEL: fptou_v8f16_v8i32:5578; CHECK-FP16-SD: // %bb.0: // %entry5579; CHECK-FP16-SD-NEXT: fcvtl2 v1.4s, v0.8h5580; CHECK-FP16-SD-NEXT: fcvtl v0.4s, v0.4h5581; CHECK-FP16-SD-NEXT: fcvtzu v1.4s, v1.4s5582; CHECK-FP16-SD-NEXT: fcvtzu v0.4s, v0.4s5583; CHECK-FP16-SD-NEXT: ret5584;5585; CHECK-NOFP16-GI-LABEL: fptou_v8f16_v8i32:5586; CHECK-NOFP16-GI: // %bb.0: // %entry5587; CHECK-NOFP16-GI-NEXT: fcvtl v1.4s, v0.4h5588; CHECK-NOFP16-GI-NEXT: fcvtl2 v2.4s, v0.8h5589; CHECK-NOFP16-GI-NEXT: fcvtzu v0.4s, v1.4s5590; CHECK-NOFP16-GI-NEXT: fcvtzu v1.4s, v2.4s5591; CHECK-NOFP16-GI-NEXT: ret5592;5593; CHECK-FP16-GI-LABEL: fptou_v8f16_v8i32:5594; CHECK-FP16-GI: // %bb.0: // %entry5595; CHECK-FP16-GI-NEXT: fcvtl v1.4s, v0.4h5596; CHECK-FP16-GI-NEXT: fcvtl2 v2.4s, v0.8h5597; CHECK-FP16-GI-NEXT: fcvtzu v0.4s, v1.4s5598; CHECK-FP16-GI-NEXT: fcvtzu v1.4s, v2.4s5599; CHECK-FP16-GI-NEXT: ret5600entry:5601 %c = fptoui <8 x half> %a to <8 x i32>5602 ret <8 x i32> %c5603}5604 5605define <16 x i32> @fptos_v16f16_v16i32(<16 x half> %a) {5606; CHECK-NOFP16-SD-LABEL: fptos_v16f16_v16i32:5607; CHECK-NOFP16-SD: // %bb.0: // %entry5608; CHECK-NOFP16-SD-NEXT: fcvtl v2.4s, v0.4h5609; CHECK-NOFP16-SD-NEXT: fcvtl2 v3.4s, v0.8h5610; CHECK-NOFP16-SD-NEXT: fcvtl2 v4.4s, v1.8h5611; CHECK-NOFP16-SD-NEXT: fcvtl v5.4s, v1.4h5612; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v2.4s5613; CHECK-NOFP16-SD-NEXT: fcvtzs v1.4s, v3.4s5614; CHECK-NOFP16-SD-NEXT: fcvtzs v3.4s, v4.4s5615; CHECK-NOFP16-SD-NEXT: fcvtzs v2.4s, v5.4s5616; CHECK-NOFP16-SD-NEXT: ret5617;5618; CHECK-FP16-SD-LABEL: fptos_v16f16_v16i32:5619; CHECK-FP16-SD: // %bb.0: // %entry5620; CHECK-FP16-SD-NEXT: fcvtl v2.4s, v0.4h5621; CHECK-FP16-SD-NEXT: fcvtl2 v3.4s, v0.8h5622; CHECK-FP16-SD-NEXT: fcvtl2 v4.4s, v1.8h5623; CHECK-FP16-SD-NEXT: fcvtl v5.4s, v1.4h5624; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v2.4s5625; CHECK-FP16-SD-NEXT: fcvtzs v1.4s, v3.4s5626; CHECK-FP16-SD-NEXT: fcvtzs v3.4s, v4.4s5627; CHECK-FP16-SD-NEXT: fcvtzs v2.4s, v5.4s5628; CHECK-FP16-SD-NEXT: ret5629;5630; CHECK-NOFP16-GI-LABEL: fptos_v16f16_v16i32:5631; CHECK-NOFP16-GI: // %bb.0: // %entry5632; CHECK-NOFP16-GI-NEXT: fcvtl v2.4s, v0.4h5633; CHECK-NOFP16-GI-NEXT: fcvtl2 v3.4s, v0.8h5634; CHECK-NOFP16-GI-NEXT: fcvtl v4.4s, v1.4h5635; CHECK-NOFP16-GI-NEXT: fcvtl2 v5.4s, v1.8h5636; CHECK-NOFP16-GI-NEXT: fcvtzs v0.4s, v2.4s5637; CHECK-NOFP16-GI-NEXT: fcvtzs v1.4s, v3.4s5638; CHECK-NOFP16-GI-NEXT: fcvtzs v2.4s, v4.4s5639; CHECK-NOFP16-GI-NEXT: fcvtzs v3.4s, v5.4s5640; CHECK-NOFP16-GI-NEXT: ret5641;5642; CHECK-FP16-GI-LABEL: fptos_v16f16_v16i32:5643; CHECK-FP16-GI: // %bb.0: // %entry5644; CHECK-FP16-GI-NEXT: fcvtl v2.4s, v0.4h5645; CHECK-FP16-GI-NEXT: fcvtl2 v3.4s, v0.8h5646; CHECK-FP16-GI-NEXT: fcvtl v4.4s, v1.4h5647; CHECK-FP16-GI-NEXT: fcvtl2 v5.4s, v1.8h5648; CHECK-FP16-GI-NEXT: fcvtzs v0.4s, v2.4s5649; CHECK-FP16-GI-NEXT: fcvtzs v1.4s, v3.4s5650; CHECK-FP16-GI-NEXT: fcvtzs v2.4s, v4.4s5651; CHECK-FP16-GI-NEXT: fcvtzs v3.4s, v5.4s5652; CHECK-FP16-GI-NEXT: ret5653entry:5654 %c = fptosi <16 x half> %a to <16 x i32>5655 ret <16 x i32> %c5656}5657 5658define <16 x i32> @fptou_v16f16_v16i32(<16 x half> %a) {5659; CHECK-NOFP16-SD-LABEL: fptou_v16f16_v16i32:5660; CHECK-NOFP16-SD: // %bb.0: // %entry5661; CHECK-NOFP16-SD-NEXT: fcvtl v2.4s, v0.4h5662; CHECK-NOFP16-SD-NEXT: fcvtl2 v3.4s, v0.8h5663; CHECK-NOFP16-SD-NEXT: fcvtl2 v4.4s, v1.8h5664; CHECK-NOFP16-SD-NEXT: fcvtl v5.4s, v1.4h5665; CHECK-NOFP16-SD-NEXT: fcvtzu v0.4s, v2.4s5666; CHECK-NOFP16-SD-NEXT: fcvtzu v1.4s, v3.4s5667; CHECK-NOFP16-SD-NEXT: fcvtzu v3.4s, v4.4s5668; CHECK-NOFP16-SD-NEXT: fcvtzu v2.4s, v5.4s5669; CHECK-NOFP16-SD-NEXT: ret5670;5671; CHECK-FP16-SD-LABEL: fptou_v16f16_v16i32:5672; CHECK-FP16-SD: // %bb.0: // %entry5673; CHECK-FP16-SD-NEXT: fcvtl v2.4s, v0.4h5674; CHECK-FP16-SD-NEXT: fcvtl2 v3.4s, v0.8h5675; CHECK-FP16-SD-NEXT: fcvtl2 v4.4s, v1.8h5676; CHECK-FP16-SD-NEXT: fcvtl v5.4s, v1.4h5677; CHECK-FP16-SD-NEXT: fcvtzu v0.4s, v2.4s5678; CHECK-FP16-SD-NEXT: fcvtzu v1.4s, v3.4s5679; CHECK-FP16-SD-NEXT: fcvtzu v3.4s, v4.4s5680; CHECK-FP16-SD-NEXT: fcvtzu v2.4s, v5.4s5681; CHECK-FP16-SD-NEXT: ret5682;5683; CHECK-NOFP16-GI-LABEL: fptou_v16f16_v16i32:5684; CHECK-NOFP16-GI: // %bb.0: // %entry5685; CHECK-NOFP16-GI-NEXT: fcvtl v2.4s, v0.4h5686; CHECK-NOFP16-GI-NEXT: fcvtl2 v3.4s, v0.8h5687; CHECK-NOFP16-GI-NEXT: fcvtl v4.4s, v1.4h5688; CHECK-NOFP16-GI-NEXT: fcvtl2 v5.4s, v1.8h5689; CHECK-NOFP16-GI-NEXT: fcvtzu v0.4s, v2.4s5690; CHECK-NOFP16-GI-NEXT: fcvtzu v1.4s, v3.4s5691; CHECK-NOFP16-GI-NEXT: fcvtzu v2.4s, v4.4s5692; CHECK-NOFP16-GI-NEXT: fcvtzu v3.4s, v5.4s5693; CHECK-NOFP16-GI-NEXT: ret5694;5695; CHECK-FP16-GI-LABEL: fptou_v16f16_v16i32:5696; CHECK-FP16-GI: // %bb.0: // %entry5697; CHECK-FP16-GI-NEXT: fcvtl v2.4s, v0.4h5698; CHECK-FP16-GI-NEXT: fcvtl2 v3.4s, v0.8h5699; CHECK-FP16-GI-NEXT: fcvtl v4.4s, v1.4h5700; CHECK-FP16-GI-NEXT: fcvtl2 v5.4s, v1.8h5701; CHECK-FP16-GI-NEXT: fcvtzu v0.4s, v2.4s5702; CHECK-FP16-GI-NEXT: fcvtzu v1.4s, v3.4s5703; CHECK-FP16-GI-NEXT: fcvtzu v2.4s, v4.4s5704; CHECK-FP16-GI-NEXT: fcvtzu v3.4s, v5.4s5705; CHECK-FP16-GI-NEXT: ret5706entry:5707 %c = fptoui <16 x half> %a to <16 x i32>5708 ret <16 x i32> %c5709}5710 5711define <2 x i16> @fptos_v2f16_v2i16(<2 x half> %a) {5712; CHECK-NOFP16-SD-LABEL: fptos_v2f16_v2i16:5713; CHECK-NOFP16-SD: // %bb.0: // %entry5714; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h5715; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s5716; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05717; CHECK-NOFP16-SD-NEXT: ret5718;5719; CHECK-FP16-SD-LABEL: fptos_v2f16_v2i16:5720; CHECK-FP16-SD: // %bb.0: // %entry5721; CHECK-FP16-SD-NEXT: fcvtl v0.4s, v0.4h5722; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s5723; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05724; CHECK-FP16-SD-NEXT: ret5725;5726; CHECK-NOFP16-GI-LABEL: fptos_v2f16_v2i16:5727; CHECK-NOFP16-GI: // %bb.0: // %entry5728; CHECK-NOFP16-GI-NEXT: fcvtl v0.4s, v0.4h5729; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2s, v0.2s5730; CHECK-NOFP16-GI-NEXT: ret5731;5732; CHECK-FP16-GI-LABEL: fptos_v2f16_v2i16:5733; CHECK-FP16-GI: // %bb.0: // %entry5734; CHECK-FP16-GI-NEXT: fcvtzs v0.4h, v0.4h5735; CHECK-FP16-GI-NEXT: ushll v0.4s, v0.4h, #05736; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q05737; CHECK-FP16-GI-NEXT: ret5738entry:5739 %c = fptosi <2 x half> %a to <2 x i16>5740 ret <2 x i16> %c5741}5742 5743define <2 x i16> @fptou_v2f16_v2i16(<2 x half> %a) {5744; CHECK-NOFP16-SD-LABEL: fptou_v2f16_v2i16:5745; CHECK-NOFP16-SD: // %bb.0: // %entry5746; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h5747; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s5748; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05749; CHECK-NOFP16-SD-NEXT: ret5750;5751; CHECK-FP16-SD-LABEL: fptou_v2f16_v2i16:5752; CHECK-FP16-SD: // %bb.0: // %entry5753; CHECK-FP16-SD-NEXT: fcvtl v0.4s, v0.4h5754; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s5755; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05756; CHECK-FP16-SD-NEXT: ret5757;5758; CHECK-NOFP16-GI-LABEL: fptou_v2f16_v2i16:5759; CHECK-NOFP16-GI: // %bb.0: // %entry5760; CHECK-NOFP16-GI-NEXT: fcvtl v0.4s, v0.4h5761; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2s, v0.2s5762; CHECK-NOFP16-GI-NEXT: ret5763;5764; CHECK-FP16-GI-LABEL: fptou_v2f16_v2i16:5765; CHECK-FP16-GI: // %bb.0: // %entry5766; CHECK-FP16-GI-NEXT: fcvtzu v0.4h, v0.4h5767; CHECK-FP16-GI-NEXT: ushll v0.4s, v0.4h, #05768; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q05769; CHECK-FP16-GI-NEXT: ret5770entry:5771 %c = fptoui <2 x half> %a to <2 x i16>5772 ret <2 x i16> %c5773}5774 5775define <3 x i16> @fptos_v3f16_v3i16(<3 x half> %a) {5776; CHECK-NOFP16-LABEL: fptos_v3f16_v3i16:5777; CHECK-NOFP16: // %bb.0: // %entry5778; CHECK-NOFP16-NEXT: fcvtl v0.4s, v0.4h5779; CHECK-NOFP16-NEXT: fcvtzs v0.4s, v0.4s5780; CHECK-NOFP16-NEXT: xtn v0.4h, v0.4s5781; CHECK-NOFP16-NEXT: ret5782;5783; CHECK-FP16-LABEL: fptos_v3f16_v3i16:5784; CHECK-FP16: // %bb.0: // %entry5785; CHECK-FP16-NEXT: fcvtzs v0.4h, v0.4h5786; CHECK-FP16-NEXT: ret5787entry:5788 %c = fptosi <3 x half> %a to <3 x i16>5789 ret <3 x i16> %c5790}5791 5792define <3 x i16> @fptou_v3f16_v3i16(<3 x half> %a) {5793; CHECK-NOFP16-LABEL: fptou_v3f16_v3i16:5794; CHECK-NOFP16: // %bb.0: // %entry5795; CHECK-NOFP16-NEXT: fcvtl v0.4s, v0.4h5796; CHECK-NOFP16-NEXT: fcvtzu v0.4s, v0.4s5797; CHECK-NOFP16-NEXT: xtn v0.4h, v0.4s5798; CHECK-NOFP16-NEXT: ret5799;5800; CHECK-FP16-LABEL: fptou_v3f16_v3i16:5801; CHECK-FP16: // %bb.0: // %entry5802; CHECK-FP16-NEXT: fcvtzu v0.4h, v0.4h5803; CHECK-FP16-NEXT: ret5804entry:5805 %c = fptoui <3 x half> %a to <3 x i16>5806 ret <3 x i16> %c5807}5808 5809define <4 x i16> @fptos_v4f16_v4i16(<4 x half> %a) {5810; CHECK-NOFP16-LABEL: fptos_v4f16_v4i16:5811; CHECK-NOFP16: // %bb.0: // %entry5812; CHECK-NOFP16-NEXT: fcvtl v0.4s, v0.4h5813; CHECK-NOFP16-NEXT: fcvtzs v0.4s, v0.4s5814; CHECK-NOFP16-NEXT: xtn v0.4h, v0.4s5815; CHECK-NOFP16-NEXT: ret5816;5817; CHECK-FP16-LABEL: fptos_v4f16_v4i16:5818; CHECK-FP16: // %bb.0: // %entry5819; CHECK-FP16-NEXT: fcvtzs v0.4h, v0.4h5820; CHECK-FP16-NEXT: ret5821entry:5822 %c = fptosi <4 x half> %a to <4 x i16>5823 ret <4 x i16> %c5824}5825 5826define <4 x i16> @fptou_v4f16_v4i16(<4 x half> %a) {5827; CHECK-NOFP16-LABEL: fptou_v4f16_v4i16:5828; CHECK-NOFP16: // %bb.0: // %entry5829; CHECK-NOFP16-NEXT: fcvtl v0.4s, v0.4h5830; CHECK-NOFP16-NEXT: fcvtzu v0.4s, v0.4s5831; CHECK-NOFP16-NEXT: xtn v0.4h, v0.4s5832; CHECK-NOFP16-NEXT: ret5833;5834; CHECK-FP16-LABEL: fptou_v4f16_v4i16:5835; CHECK-FP16: // %bb.0: // %entry5836; CHECK-FP16-NEXT: fcvtzu v0.4h, v0.4h5837; CHECK-FP16-NEXT: ret5838entry:5839 %c = fptoui <4 x half> %a to <4 x i16>5840 ret <4 x i16> %c5841}5842 5843define <8 x i16> @fptos_v8f16_v8i16(<8 x half> %a) {5844; CHECK-NOFP16-SD-LABEL: fptos_v8f16_v8i16:5845; CHECK-NOFP16-SD: // %bb.0: // %entry5846; CHECK-NOFP16-SD-NEXT: fcvtl2 v1.4s, v0.8h5847; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h5848; CHECK-NOFP16-SD-NEXT: fcvtzs v1.4s, v1.4s5849; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s5850; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h5851; CHECK-NOFP16-SD-NEXT: ret5852;5853; CHECK-FP16-LABEL: fptos_v8f16_v8i16:5854; CHECK-FP16: // %bb.0: // %entry5855; CHECK-FP16-NEXT: fcvtzs v0.8h, v0.8h5856; CHECK-FP16-NEXT: ret5857;5858; CHECK-NOFP16-GI-LABEL: fptos_v8f16_v8i16:5859; CHECK-NOFP16-GI: // %bb.0: // %entry5860; CHECK-NOFP16-GI-NEXT: fcvtl v1.4s, v0.4h5861; CHECK-NOFP16-GI-NEXT: fcvtl2 v0.4s, v0.8h5862; CHECK-NOFP16-GI-NEXT: fcvtzs v1.4s, v1.4s5863; CHECK-NOFP16-GI-NEXT: fcvtzs v0.4s, v0.4s5864; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v1.8h, v0.8h5865; CHECK-NOFP16-GI-NEXT: ret5866entry:5867 %c = fptosi <8 x half> %a to <8 x i16>5868 ret <8 x i16> %c5869}5870 5871define <8 x i16> @fptou_v8f16_v8i16(<8 x half> %a) {5872; CHECK-NOFP16-SD-LABEL: fptou_v8f16_v8i16:5873; CHECK-NOFP16-SD: // %bb.0: // %entry5874; CHECK-NOFP16-SD-NEXT: fcvtl2 v1.4s, v0.8h5875; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h5876; CHECK-NOFP16-SD-NEXT: fcvtzu v1.4s, v1.4s5877; CHECK-NOFP16-SD-NEXT: fcvtzu v0.4s, v0.4s5878; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h5879; CHECK-NOFP16-SD-NEXT: ret5880;5881; CHECK-FP16-LABEL: fptou_v8f16_v8i16:5882; CHECK-FP16: // %bb.0: // %entry5883; CHECK-FP16-NEXT: fcvtzu v0.8h, v0.8h5884; CHECK-FP16-NEXT: ret5885;5886; CHECK-NOFP16-GI-LABEL: fptou_v8f16_v8i16:5887; CHECK-NOFP16-GI: // %bb.0: // %entry5888; CHECK-NOFP16-GI-NEXT: fcvtl v1.4s, v0.4h5889; CHECK-NOFP16-GI-NEXT: fcvtl2 v0.4s, v0.8h5890; CHECK-NOFP16-GI-NEXT: fcvtzu v1.4s, v1.4s5891; CHECK-NOFP16-GI-NEXT: fcvtzu v0.4s, v0.4s5892; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v1.8h, v0.8h5893; CHECK-NOFP16-GI-NEXT: ret5894entry:5895 %c = fptoui <8 x half> %a to <8 x i16>5896 ret <8 x i16> %c5897}5898 5899define <16 x i16> @fptos_v16f16_v16i16(<16 x half> %a) {5900; CHECK-NOFP16-SD-LABEL: fptos_v16f16_v16i16:5901; CHECK-NOFP16-SD: // %bb.0: // %entry5902; CHECK-NOFP16-SD-NEXT: fcvtl2 v2.4s, v0.8h5903; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h5904; CHECK-NOFP16-SD-NEXT: fcvtl2 v3.4s, v1.8h5905; CHECK-NOFP16-SD-NEXT: fcvtl v1.4s, v1.4h5906; CHECK-NOFP16-SD-NEXT: fcvtzs v2.4s, v2.4s5907; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s5908; CHECK-NOFP16-SD-NEXT: fcvtzs v3.4s, v3.4s5909; CHECK-NOFP16-SD-NEXT: fcvtzs v1.4s, v1.4s5910; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v2.8h5911; CHECK-NOFP16-SD-NEXT: uzp1 v1.8h, v1.8h, v3.8h5912; CHECK-NOFP16-SD-NEXT: ret5913;5914; CHECK-FP16-LABEL: fptos_v16f16_v16i16:5915; CHECK-FP16: // %bb.0: // %entry5916; CHECK-FP16-NEXT: fcvtzs v0.8h, v0.8h5917; CHECK-FP16-NEXT: fcvtzs v1.8h, v1.8h5918; CHECK-FP16-NEXT: ret5919;5920; CHECK-NOFP16-GI-LABEL: fptos_v16f16_v16i16:5921; CHECK-NOFP16-GI: // %bb.0: // %entry5922; CHECK-NOFP16-GI-NEXT: fcvtl v2.4s, v0.4h5923; CHECK-NOFP16-GI-NEXT: fcvtl2 v0.4s, v0.8h5924; CHECK-NOFP16-GI-NEXT: fcvtl v3.4s, v1.4h5925; CHECK-NOFP16-GI-NEXT: fcvtl2 v1.4s, v1.8h5926; CHECK-NOFP16-GI-NEXT: fcvtzs v2.4s, v2.4s5927; CHECK-NOFP16-GI-NEXT: fcvtzs v0.4s, v0.4s5928; CHECK-NOFP16-GI-NEXT: fcvtzs v3.4s, v3.4s5929; CHECK-NOFP16-GI-NEXT: fcvtzs v1.4s, v1.4s5930; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v2.8h, v0.8h5931; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v3.8h, v1.8h5932; CHECK-NOFP16-GI-NEXT: ret5933entry:5934 %c = fptosi <16 x half> %a to <16 x i16>5935 ret <16 x i16> %c5936}5937 5938define <16 x i16> @fptou_v16f16_v16i16(<16 x half> %a) {5939; CHECK-NOFP16-SD-LABEL: fptou_v16f16_v16i16:5940; CHECK-NOFP16-SD: // %bb.0: // %entry5941; CHECK-NOFP16-SD-NEXT: fcvtl2 v2.4s, v0.8h5942; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h5943; CHECK-NOFP16-SD-NEXT: fcvtl2 v3.4s, v1.8h5944; CHECK-NOFP16-SD-NEXT: fcvtl v1.4s, v1.4h5945; CHECK-NOFP16-SD-NEXT: fcvtzu v2.4s, v2.4s5946; CHECK-NOFP16-SD-NEXT: fcvtzu v0.4s, v0.4s5947; CHECK-NOFP16-SD-NEXT: fcvtzu v3.4s, v3.4s5948; CHECK-NOFP16-SD-NEXT: fcvtzu v1.4s, v1.4s5949; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v2.8h5950; CHECK-NOFP16-SD-NEXT: uzp1 v1.8h, v1.8h, v3.8h5951; CHECK-NOFP16-SD-NEXT: ret5952;5953; CHECK-FP16-LABEL: fptou_v16f16_v16i16:5954; CHECK-FP16: // %bb.0: // %entry5955; CHECK-FP16-NEXT: fcvtzu v0.8h, v0.8h5956; CHECK-FP16-NEXT: fcvtzu v1.8h, v1.8h5957; CHECK-FP16-NEXT: ret5958;5959; CHECK-NOFP16-GI-LABEL: fptou_v16f16_v16i16:5960; CHECK-NOFP16-GI: // %bb.0: // %entry5961; CHECK-NOFP16-GI-NEXT: fcvtl v2.4s, v0.4h5962; CHECK-NOFP16-GI-NEXT: fcvtl2 v0.4s, v0.8h5963; CHECK-NOFP16-GI-NEXT: fcvtl v3.4s, v1.4h5964; CHECK-NOFP16-GI-NEXT: fcvtl2 v1.4s, v1.8h5965; CHECK-NOFP16-GI-NEXT: fcvtzu v2.4s, v2.4s5966; CHECK-NOFP16-GI-NEXT: fcvtzu v0.4s, v0.4s5967; CHECK-NOFP16-GI-NEXT: fcvtzu v3.4s, v3.4s5968; CHECK-NOFP16-GI-NEXT: fcvtzu v1.4s, v1.4s5969; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v2.8h, v0.8h5970; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v3.8h, v1.8h5971; CHECK-NOFP16-GI-NEXT: ret5972entry:5973 %c = fptoui <16 x half> %a to <16 x i16>5974 ret <16 x i16> %c5975}5976 5977define <2 x i8> @fptos_v2f16_v2i8(<2 x half> %a) {5978; CHECK-NOFP16-SD-LABEL: fptos_v2f16_v2i8:5979; CHECK-NOFP16-SD: // %bb.0: // %entry5980; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h5981; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s5982; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05983; CHECK-NOFP16-SD-NEXT: ret5984;5985; CHECK-FP16-SD-LABEL: fptos_v2f16_v2i8:5986; CHECK-FP16-SD: // %bb.0: // %entry5987; CHECK-FP16-SD-NEXT: fcvtl v0.4s, v0.4h5988; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s5989; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05990; CHECK-FP16-SD-NEXT: ret5991;5992; CHECK-NOFP16-GI-LABEL: fptos_v2f16_v2i8:5993; CHECK-NOFP16-GI: // %bb.0: // %entry5994; CHECK-NOFP16-GI-NEXT: fcvtl v0.4s, v0.4h5995; CHECK-NOFP16-GI-NEXT: fcvtzs v0.2s, v0.2s5996; CHECK-NOFP16-GI-NEXT: ret5997;5998; CHECK-FP16-GI-LABEL: fptos_v2f16_v2i8:5999; CHECK-FP16-GI: // %bb.0: // %entry6000; CHECK-FP16-GI-NEXT: fcvtzs v0.4h, v0.4h6001; CHECK-FP16-GI-NEXT: ushll v0.4s, v0.4h, #06002; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q06003; CHECK-FP16-GI-NEXT: ret6004entry:6005 %c = fptosi <2 x half> %a to <2 x i8>6006 ret <2 x i8> %c6007}6008 6009define <2 x i8> @fptou_v2f16_v2i8(<2 x half> %a) {6010; CHECK-NOFP16-SD-LABEL: fptou_v2f16_v2i8:6011; CHECK-NOFP16-SD: // %bb.0: // %entry6012; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h6013; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s6014; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q06015; CHECK-NOFP16-SD-NEXT: ret6016;6017; CHECK-FP16-SD-LABEL: fptou_v2f16_v2i8:6018; CHECK-FP16-SD: // %bb.0: // %entry6019; CHECK-FP16-SD-NEXT: fcvtl v0.4s, v0.4h6020; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s6021; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q06022; CHECK-FP16-SD-NEXT: ret6023;6024; CHECK-NOFP16-GI-LABEL: fptou_v2f16_v2i8:6025; CHECK-NOFP16-GI: // %bb.0: // %entry6026; CHECK-NOFP16-GI-NEXT: fcvtl v0.4s, v0.4h6027; CHECK-NOFP16-GI-NEXT: fcvtzu v0.2s, v0.2s6028; CHECK-NOFP16-GI-NEXT: ret6029;6030; CHECK-FP16-GI-LABEL: fptou_v2f16_v2i8:6031; CHECK-FP16-GI: // %bb.0: // %entry6032; CHECK-FP16-GI-NEXT: fcvtzu v0.4h, v0.4h6033; CHECK-FP16-GI-NEXT: ushll v0.4s, v0.4h, #06034; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q06035; CHECK-FP16-GI-NEXT: ret6036entry:6037 %c = fptoui <2 x half> %a to <2 x i8>6038 ret <2 x i8> %c6039}6040 6041define <3 x i8> @fptos_v3f16_v3i8(<3 x half> %a) {6042; CHECK-NOFP16-SD-LABEL: fptos_v3f16_v3i8:6043; CHECK-NOFP16-SD: // %bb.0: // %entry6044; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h6045; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s6046; CHECK-NOFP16-SD-NEXT: xtn v0.4h, v0.4s6047; CHECK-NOFP16-SD-NEXT: umov w0, v0.h[0]6048; CHECK-NOFP16-SD-NEXT: umov w1, v0.h[1]6049; CHECK-NOFP16-SD-NEXT: umov w2, v0.h[2]6050; CHECK-NOFP16-SD-NEXT: ret6051;6052; CHECK-FP16-LABEL: fptos_v3f16_v3i8:6053; CHECK-FP16: // %bb.0: // %entry6054; CHECK-FP16-NEXT: fcvtzs v0.4h, v0.4h6055; CHECK-FP16-NEXT: umov w0, v0.h[0]6056; CHECK-FP16-NEXT: umov w1, v0.h[1]6057; CHECK-FP16-NEXT: umov w2, v0.h[2]6058; CHECK-FP16-NEXT: ret6059;6060; CHECK-NOFP16-GI-LABEL: fptos_v3f16_v3i8:6061; CHECK-NOFP16-GI: // %bb.0: // %entry6062; CHECK-NOFP16-GI-NEXT: fcvtl v0.4s, v0.4h6063; CHECK-NOFP16-GI-NEXT: fcvtzs v0.4s, v0.4s6064; CHECK-NOFP16-GI-NEXT: mov s1, v0.s[1]6065; CHECK-NOFP16-GI-NEXT: mov s2, v0.s[2]6066; CHECK-NOFP16-GI-NEXT: fmov w0, s06067; CHECK-NOFP16-GI-NEXT: fmov w1, s16068; CHECK-NOFP16-GI-NEXT: fmov w2, s26069; CHECK-NOFP16-GI-NEXT: ret6070entry:6071 %c = fptosi <3 x half> %a to <3 x i8>6072 ret <3 x i8> %c6073}6074 6075define <3 x i8> @fptou_v3f16_v3i8(<3 x half> %a) {6076; CHECK-NOFP16-SD-LABEL: fptou_v3f16_v3i8:6077; CHECK-NOFP16-SD: // %bb.0: // %entry6078; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h6079; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s6080; CHECK-NOFP16-SD-NEXT: xtn v0.4h, v0.4s6081; CHECK-NOFP16-SD-NEXT: umov w0, v0.h[0]6082; CHECK-NOFP16-SD-NEXT: umov w1, v0.h[1]6083; CHECK-NOFP16-SD-NEXT: umov w2, v0.h[2]6084; CHECK-NOFP16-SD-NEXT: ret6085;6086; CHECK-FP16-SD-LABEL: fptou_v3f16_v3i8:6087; CHECK-FP16-SD: // %bb.0: // %entry6088; CHECK-FP16-SD-NEXT: fcvtzs v0.4h, v0.4h6089; CHECK-FP16-SD-NEXT: umov w0, v0.h[0]6090; CHECK-FP16-SD-NEXT: umov w1, v0.h[1]6091; CHECK-FP16-SD-NEXT: umov w2, v0.h[2]6092; CHECK-FP16-SD-NEXT: ret6093;6094; CHECK-NOFP16-GI-LABEL: fptou_v3f16_v3i8:6095; CHECK-NOFP16-GI: // %bb.0: // %entry6096; CHECK-NOFP16-GI-NEXT: fcvtl v0.4s, v0.4h6097; CHECK-NOFP16-GI-NEXT: fcvtzu v0.4s, v0.4s6098; CHECK-NOFP16-GI-NEXT: mov s1, v0.s[1]6099; CHECK-NOFP16-GI-NEXT: mov s2, v0.s[2]6100; CHECK-NOFP16-GI-NEXT: fmov w0, s06101; CHECK-NOFP16-GI-NEXT: fmov w1, s16102; CHECK-NOFP16-GI-NEXT: fmov w2, s26103; CHECK-NOFP16-GI-NEXT: ret6104;6105; CHECK-FP16-GI-LABEL: fptou_v3f16_v3i8:6106; CHECK-FP16-GI: // %bb.0: // %entry6107; CHECK-FP16-GI-NEXT: fcvtzu v0.4h, v0.4h6108; CHECK-FP16-GI-NEXT: umov w0, v0.h[0]6109; CHECK-FP16-GI-NEXT: umov w1, v0.h[1]6110; CHECK-FP16-GI-NEXT: umov w2, v0.h[2]6111; CHECK-FP16-GI-NEXT: ret6112entry:6113 %c = fptoui <3 x half> %a to <3 x i8>6114 ret <3 x i8> %c6115}6116 6117define <4 x i8> @fptos_v4f16_v4i8(<4 x half> %a) {6118; CHECK-NOFP16-LABEL: fptos_v4f16_v4i8:6119; CHECK-NOFP16: // %bb.0: // %entry6120; CHECK-NOFP16-NEXT: fcvtl v0.4s, v0.4h6121; CHECK-NOFP16-NEXT: fcvtzs v0.4s, v0.4s6122; CHECK-NOFP16-NEXT: xtn v0.4h, v0.4s6123; CHECK-NOFP16-NEXT: ret6124;6125; CHECK-FP16-LABEL: fptos_v4f16_v4i8:6126; CHECK-FP16: // %bb.0: // %entry6127; CHECK-FP16-NEXT: fcvtzs v0.4h, v0.4h6128; CHECK-FP16-NEXT: ret6129entry:6130 %c = fptosi <4 x half> %a to <4 x i8>6131 ret <4 x i8> %c6132}6133 6134define <4 x i8> @fptou_v4f16_v4i8(<4 x half> %a) {6135; CHECK-NOFP16-SD-LABEL: fptou_v4f16_v4i8:6136; CHECK-NOFP16-SD: // %bb.0: // %entry6137; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h6138; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s6139; CHECK-NOFP16-SD-NEXT: xtn v0.4h, v0.4s6140; CHECK-NOFP16-SD-NEXT: ret6141;6142; CHECK-FP16-SD-LABEL: fptou_v4f16_v4i8:6143; CHECK-FP16-SD: // %bb.0: // %entry6144; CHECK-FP16-SD-NEXT: fcvtzs v0.4h, v0.4h6145; CHECK-FP16-SD-NEXT: ret6146;6147; CHECK-NOFP16-GI-LABEL: fptou_v4f16_v4i8:6148; CHECK-NOFP16-GI: // %bb.0: // %entry6149; CHECK-NOFP16-GI-NEXT: fcvtl v0.4s, v0.4h6150; CHECK-NOFP16-GI-NEXT: fcvtzu v0.4s, v0.4s6151; CHECK-NOFP16-GI-NEXT: xtn v0.4h, v0.4s6152; CHECK-NOFP16-GI-NEXT: ret6153;6154; CHECK-FP16-GI-LABEL: fptou_v4f16_v4i8:6155; CHECK-FP16-GI: // %bb.0: // %entry6156; CHECK-FP16-GI-NEXT: fcvtzu v0.4h, v0.4h6157; CHECK-FP16-GI-NEXT: ret6158entry:6159 %c = fptoui <4 x half> %a to <4 x i8>6160 ret <4 x i8> %c6161}6162 6163define <8 x i8> @fptos_v8f16_v8i8(<8 x half> %a) {6164; CHECK-NOFP16-SD-LABEL: fptos_v8f16_v8i8:6165; CHECK-NOFP16-SD: // %bb.0: // %entry6166; CHECK-NOFP16-SD-NEXT: fcvtl2 v1.4s, v0.8h6167; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h6168; CHECK-NOFP16-SD-NEXT: fcvtzs v1.4s, v1.4s6169; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s6170; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h6171; CHECK-NOFP16-SD-NEXT: xtn v0.8b, v0.8h6172; CHECK-NOFP16-SD-NEXT: ret6173;6174; CHECK-FP16-LABEL: fptos_v8f16_v8i8:6175; CHECK-FP16: // %bb.0: // %entry6176; CHECK-FP16-NEXT: fcvtzs v0.8h, v0.8h6177; CHECK-FP16-NEXT: xtn v0.8b, v0.8h6178; CHECK-FP16-NEXT: ret6179;6180; CHECK-NOFP16-GI-LABEL: fptos_v8f16_v8i8:6181; CHECK-NOFP16-GI: // %bb.0: // %entry6182; CHECK-NOFP16-GI-NEXT: fcvtl v1.4s, v0.4h6183; CHECK-NOFP16-GI-NEXT: fcvtl2 v0.4s, v0.8h6184; CHECK-NOFP16-GI-NEXT: fcvtzs v1.4s, v1.4s6185; CHECK-NOFP16-GI-NEXT: fcvtzs v0.4s, v0.4s6186; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v1.8h, v0.8h6187; CHECK-NOFP16-GI-NEXT: xtn v0.8b, v0.8h6188; CHECK-NOFP16-GI-NEXT: ret6189entry:6190 %c = fptosi <8 x half> %a to <8 x i8>6191 ret <8 x i8> %c6192}6193 6194define <8 x i8> @fptou_v8f16_v8i8(<8 x half> %a) {6195; CHECK-NOFP16-SD-LABEL: fptou_v8f16_v8i8:6196; CHECK-NOFP16-SD: // %bb.0: // %entry6197; CHECK-NOFP16-SD-NEXT: fcvtl2 v1.4s, v0.8h6198; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h6199; CHECK-NOFP16-SD-NEXT: fcvtzu v1.4s, v1.4s6200; CHECK-NOFP16-SD-NEXT: fcvtzu v0.4s, v0.4s6201; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v1.8h6202; CHECK-NOFP16-SD-NEXT: xtn v0.8b, v0.8h6203; CHECK-NOFP16-SD-NEXT: ret6204;6205; CHECK-FP16-LABEL: fptou_v8f16_v8i8:6206; CHECK-FP16: // %bb.0: // %entry6207; CHECK-FP16-NEXT: fcvtzu v0.8h, v0.8h6208; CHECK-FP16-NEXT: xtn v0.8b, v0.8h6209; CHECK-FP16-NEXT: ret6210;6211; CHECK-NOFP16-GI-LABEL: fptou_v8f16_v8i8:6212; CHECK-NOFP16-GI: // %bb.0: // %entry6213; CHECK-NOFP16-GI-NEXT: fcvtl v1.4s, v0.4h6214; CHECK-NOFP16-GI-NEXT: fcvtl2 v0.4s, v0.8h6215; CHECK-NOFP16-GI-NEXT: fcvtzu v1.4s, v1.4s6216; CHECK-NOFP16-GI-NEXT: fcvtzu v0.4s, v0.4s6217; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v1.8h, v0.8h6218; CHECK-NOFP16-GI-NEXT: xtn v0.8b, v0.8h6219; CHECK-NOFP16-GI-NEXT: ret6220entry:6221 %c = fptoui <8 x half> %a to <8 x i8>6222 ret <8 x i8> %c6223}6224 6225define <16 x i8> @fptos_v16f16_v16i8(<16 x half> %a) {6226; CHECK-NOFP16-SD-LABEL: fptos_v16f16_v16i8:6227; CHECK-NOFP16-SD: // %bb.0: // %entry6228; CHECK-NOFP16-SD-NEXT: fcvtl2 v2.4s, v1.8h6229; CHECK-NOFP16-SD-NEXT: fcvtl v1.4s, v1.4h6230; CHECK-NOFP16-SD-NEXT: fcvtl2 v3.4s, v0.8h6231; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h6232; CHECK-NOFP16-SD-NEXT: fcvtzs v2.4s, v2.4s6233; CHECK-NOFP16-SD-NEXT: fcvtzs v1.4s, v1.4s6234; CHECK-NOFP16-SD-NEXT: fcvtzs v3.4s, v3.4s6235; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s6236; CHECK-NOFP16-SD-NEXT: uzp1 v1.8h, v1.8h, v2.8h6237; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v3.8h6238; CHECK-NOFP16-SD-NEXT: uzp1 v0.16b, v0.16b, v1.16b6239; CHECK-NOFP16-SD-NEXT: ret6240;6241; CHECK-FP16-SD-LABEL: fptos_v16f16_v16i8:6242; CHECK-FP16-SD: // %bb.0: // %entry6243; CHECK-FP16-SD-NEXT: fcvtzs v1.8h, v1.8h6244; CHECK-FP16-SD-NEXT: fcvtzs v0.8h, v0.8h6245; CHECK-FP16-SD-NEXT: uzp1 v0.16b, v0.16b, v1.16b6246; CHECK-FP16-SD-NEXT: ret6247;6248; CHECK-NOFP16-GI-LABEL: fptos_v16f16_v16i8:6249; CHECK-NOFP16-GI: // %bb.0: // %entry6250; CHECK-NOFP16-GI-NEXT: fcvtl v2.4s, v0.4h6251; CHECK-NOFP16-GI-NEXT: fcvtl2 v0.4s, v0.8h6252; CHECK-NOFP16-GI-NEXT: fcvtl v3.4s, v1.4h6253; CHECK-NOFP16-GI-NEXT: fcvtl2 v1.4s, v1.8h6254; CHECK-NOFP16-GI-NEXT: fcvtzs v2.4s, v2.4s6255; CHECK-NOFP16-GI-NEXT: fcvtzs v0.4s, v0.4s6256; CHECK-NOFP16-GI-NEXT: fcvtzs v3.4s, v3.4s6257; CHECK-NOFP16-GI-NEXT: fcvtzs v1.4s, v1.4s6258; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v2.8h, v0.8h6259; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v3.8h, v1.8h6260; CHECK-NOFP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b6261; CHECK-NOFP16-GI-NEXT: ret6262;6263; CHECK-FP16-GI-LABEL: fptos_v16f16_v16i8:6264; CHECK-FP16-GI: // %bb.0: // %entry6265; CHECK-FP16-GI-NEXT: fcvtzs v0.8h, v0.8h6266; CHECK-FP16-GI-NEXT: fcvtzs v1.8h, v1.8h6267; CHECK-FP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b6268; CHECK-FP16-GI-NEXT: ret6269entry:6270 %c = fptosi <16 x half> %a to <16 x i8>6271 ret <16 x i8> %c6272}6273 6274define <16 x i8> @fptou_v16f16_v16i8(<16 x half> %a) {6275; CHECK-NOFP16-SD-LABEL: fptou_v16f16_v16i8:6276; CHECK-NOFP16-SD: // %bb.0: // %entry6277; CHECK-NOFP16-SD-NEXT: fcvtl2 v2.4s, v1.8h6278; CHECK-NOFP16-SD-NEXT: fcvtl v1.4s, v1.4h6279; CHECK-NOFP16-SD-NEXT: fcvtl2 v3.4s, v0.8h6280; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h6281; CHECK-NOFP16-SD-NEXT: fcvtzu v2.4s, v2.4s6282; CHECK-NOFP16-SD-NEXT: fcvtzu v1.4s, v1.4s6283; CHECK-NOFP16-SD-NEXT: fcvtzu v3.4s, v3.4s6284; CHECK-NOFP16-SD-NEXT: fcvtzu v0.4s, v0.4s6285; CHECK-NOFP16-SD-NEXT: uzp1 v1.8h, v1.8h, v2.8h6286; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v3.8h6287; CHECK-NOFP16-SD-NEXT: uzp1 v0.16b, v0.16b, v1.16b6288; CHECK-NOFP16-SD-NEXT: ret6289;6290; CHECK-FP16-SD-LABEL: fptou_v16f16_v16i8:6291; CHECK-FP16-SD: // %bb.0: // %entry6292; CHECK-FP16-SD-NEXT: fcvtzu v1.8h, v1.8h6293; CHECK-FP16-SD-NEXT: fcvtzu v0.8h, v0.8h6294; CHECK-FP16-SD-NEXT: uzp1 v0.16b, v0.16b, v1.16b6295; CHECK-FP16-SD-NEXT: ret6296;6297; CHECK-NOFP16-GI-LABEL: fptou_v16f16_v16i8:6298; CHECK-NOFP16-GI: // %bb.0: // %entry6299; CHECK-NOFP16-GI-NEXT: fcvtl v2.4s, v0.4h6300; CHECK-NOFP16-GI-NEXT: fcvtl2 v0.4s, v0.8h6301; CHECK-NOFP16-GI-NEXT: fcvtl v3.4s, v1.4h6302; CHECK-NOFP16-GI-NEXT: fcvtl2 v1.4s, v1.8h6303; CHECK-NOFP16-GI-NEXT: fcvtzu v2.4s, v2.4s6304; CHECK-NOFP16-GI-NEXT: fcvtzu v0.4s, v0.4s6305; CHECK-NOFP16-GI-NEXT: fcvtzu v3.4s, v3.4s6306; CHECK-NOFP16-GI-NEXT: fcvtzu v1.4s, v1.4s6307; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v2.8h, v0.8h6308; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v3.8h, v1.8h6309; CHECK-NOFP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b6310; CHECK-NOFP16-GI-NEXT: ret6311;6312; CHECK-FP16-GI-LABEL: fptou_v16f16_v16i8:6313; CHECK-FP16-GI: // %bb.0: // %entry6314; CHECK-FP16-GI-NEXT: fcvtzu v0.8h, v0.8h6315; CHECK-FP16-GI-NEXT: fcvtzu v1.8h, v1.8h6316; CHECK-FP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b6317; CHECK-FP16-GI-NEXT: ret6318entry:6319 %c = fptoui <16 x half> %a to <16 x i8>6320 ret <16 x i8> %c6321}6322 6323define <32 x i8> @fptos_v32f16_v32i8(<32 x half> %a) {6324; CHECK-NOFP16-SD-LABEL: fptos_v32f16_v32i8:6325; CHECK-NOFP16-SD: // %bb.0: // %entry6326; CHECK-NOFP16-SD-NEXT: fcvtl2 v4.4s, v1.8h6327; CHECK-NOFP16-SD-NEXT: fcvtl v1.4s, v1.4h6328; CHECK-NOFP16-SD-NEXT: fcvtl2 v5.4s, v0.8h6329; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h6330; CHECK-NOFP16-SD-NEXT: fcvtl2 v6.4s, v3.8h6331; CHECK-NOFP16-SD-NEXT: fcvtl v3.4s, v3.4h6332; CHECK-NOFP16-SD-NEXT: fcvtl2 v7.4s, v2.8h6333; CHECK-NOFP16-SD-NEXT: fcvtl v2.4s, v2.4h6334; CHECK-NOFP16-SD-NEXT: fcvtzs v4.4s, v4.4s6335; CHECK-NOFP16-SD-NEXT: fcvtzs v1.4s, v1.4s6336; CHECK-NOFP16-SD-NEXT: fcvtzs v5.4s, v5.4s6337; CHECK-NOFP16-SD-NEXT: fcvtzs v0.4s, v0.4s6338; CHECK-NOFP16-SD-NEXT: fcvtzs v6.4s, v6.4s6339; CHECK-NOFP16-SD-NEXT: fcvtzs v3.4s, v3.4s6340; CHECK-NOFP16-SD-NEXT: fcvtzs v7.4s, v7.4s6341; CHECK-NOFP16-SD-NEXT: fcvtzs v2.4s, v2.4s6342; CHECK-NOFP16-SD-NEXT: uzp1 v1.8h, v1.8h, v4.8h6343; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v5.8h6344; CHECK-NOFP16-SD-NEXT: uzp1 v3.8h, v3.8h, v6.8h6345; CHECK-NOFP16-SD-NEXT: uzp1 v2.8h, v2.8h, v7.8h6346; CHECK-NOFP16-SD-NEXT: uzp1 v0.16b, v0.16b, v1.16b6347; CHECK-NOFP16-SD-NEXT: uzp1 v1.16b, v2.16b, v3.16b6348; CHECK-NOFP16-SD-NEXT: ret6349;6350; CHECK-FP16-SD-LABEL: fptos_v32f16_v32i8:6351; CHECK-FP16-SD: // %bb.0: // %entry6352; CHECK-FP16-SD-NEXT: fcvtzs v1.8h, v1.8h6353; CHECK-FP16-SD-NEXT: fcvtzs v0.8h, v0.8h6354; CHECK-FP16-SD-NEXT: fcvtzs v3.8h, v3.8h6355; CHECK-FP16-SD-NEXT: fcvtzs v2.8h, v2.8h6356; CHECK-FP16-SD-NEXT: uzp1 v0.16b, v0.16b, v1.16b6357; CHECK-FP16-SD-NEXT: uzp1 v1.16b, v2.16b, v3.16b6358; CHECK-FP16-SD-NEXT: ret6359;6360; CHECK-NOFP16-GI-LABEL: fptos_v32f16_v32i8:6361; CHECK-NOFP16-GI: // %bb.0: // %entry6362; CHECK-NOFP16-GI-NEXT: fcvtl v4.4s, v0.4h6363; CHECK-NOFP16-GI-NEXT: fcvtl2 v0.4s, v0.8h6364; CHECK-NOFP16-GI-NEXT: fcvtl v5.4s, v1.4h6365; CHECK-NOFP16-GI-NEXT: fcvtl2 v1.4s, v1.8h6366; CHECK-NOFP16-GI-NEXT: fcvtl v6.4s, v2.4h6367; CHECK-NOFP16-GI-NEXT: fcvtl2 v2.4s, v2.8h6368; CHECK-NOFP16-GI-NEXT: fcvtl v7.4s, v3.4h6369; CHECK-NOFP16-GI-NEXT: fcvtl2 v3.4s, v3.8h6370; CHECK-NOFP16-GI-NEXT: fcvtzs v4.4s, v4.4s6371; CHECK-NOFP16-GI-NEXT: fcvtzs v0.4s, v0.4s6372; CHECK-NOFP16-GI-NEXT: fcvtzs v5.4s, v5.4s6373; CHECK-NOFP16-GI-NEXT: fcvtzs v1.4s, v1.4s6374; CHECK-NOFP16-GI-NEXT: fcvtzs v6.4s, v6.4s6375; CHECK-NOFP16-GI-NEXT: fcvtzs v2.4s, v2.4s6376; CHECK-NOFP16-GI-NEXT: fcvtzs v7.4s, v7.4s6377; CHECK-NOFP16-GI-NEXT: fcvtzs v3.4s, v3.4s6378; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v4.8h, v0.8h6379; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v5.8h, v1.8h6380; CHECK-NOFP16-GI-NEXT: uzp1 v2.8h, v6.8h, v2.8h6381; CHECK-NOFP16-GI-NEXT: uzp1 v3.8h, v7.8h, v3.8h6382; CHECK-NOFP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b6383; CHECK-NOFP16-GI-NEXT: uzp1 v1.16b, v2.16b, v3.16b6384; CHECK-NOFP16-GI-NEXT: ret6385;6386; CHECK-FP16-GI-LABEL: fptos_v32f16_v32i8:6387; CHECK-FP16-GI: // %bb.0: // %entry6388; CHECK-FP16-GI-NEXT: fcvtzs v0.8h, v0.8h6389; CHECK-FP16-GI-NEXT: fcvtzs v1.8h, v1.8h6390; CHECK-FP16-GI-NEXT: fcvtzs v2.8h, v2.8h6391; CHECK-FP16-GI-NEXT: fcvtzs v3.8h, v3.8h6392; CHECK-FP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b6393; CHECK-FP16-GI-NEXT: uzp1 v1.16b, v2.16b, v3.16b6394; CHECK-FP16-GI-NEXT: ret6395entry:6396 %c = fptosi <32 x half> %a to <32 x i8>6397 ret <32 x i8> %c6398}6399 6400define <32 x i8> @fptou_v32f16_v32i8(<32 x half> %a) {6401; CHECK-NOFP16-SD-LABEL: fptou_v32f16_v32i8:6402; CHECK-NOFP16-SD: // %bb.0: // %entry6403; CHECK-NOFP16-SD-NEXT: fcvtl2 v4.4s, v1.8h6404; CHECK-NOFP16-SD-NEXT: fcvtl v1.4s, v1.4h6405; CHECK-NOFP16-SD-NEXT: fcvtl2 v5.4s, v0.8h6406; CHECK-NOFP16-SD-NEXT: fcvtl v0.4s, v0.4h6407; CHECK-NOFP16-SD-NEXT: fcvtl2 v6.4s, v3.8h6408; CHECK-NOFP16-SD-NEXT: fcvtl v3.4s, v3.4h6409; CHECK-NOFP16-SD-NEXT: fcvtl2 v7.4s, v2.8h6410; CHECK-NOFP16-SD-NEXT: fcvtl v2.4s, v2.4h6411; CHECK-NOFP16-SD-NEXT: fcvtzu v4.4s, v4.4s6412; CHECK-NOFP16-SD-NEXT: fcvtzu v1.4s, v1.4s6413; CHECK-NOFP16-SD-NEXT: fcvtzu v5.4s, v5.4s6414; CHECK-NOFP16-SD-NEXT: fcvtzu v0.4s, v0.4s6415; CHECK-NOFP16-SD-NEXT: fcvtzu v6.4s, v6.4s6416; CHECK-NOFP16-SD-NEXT: fcvtzu v3.4s, v3.4s6417; CHECK-NOFP16-SD-NEXT: fcvtzu v7.4s, v7.4s6418; CHECK-NOFP16-SD-NEXT: fcvtzu v2.4s, v2.4s6419; CHECK-NOFP16-SD-NEXT: uzp1 v1.8h, v1.8h, v4.8h6420; CHECK-NOFP16-SD-NEXT: uzp1 v0.8h, v0.8h, v5.8h6421; CHECK-NOFP16-SD-NEXT: uzp1 v3.8h, v3.8h, v6.8h6422; CHECK-NOFP16-SD-NEXT: uzp1 v2.8h, v2.8h, v7.8h6423; CHECK-NOFP16-SD-NEXT: uzp1 v0.16b, v0.16b, v1.16b6424; CHECK-NOFP16-SD-NEXT: uzp1 v1.16b, v2.16b, v3.16b6425; CHECK-NOFP16-SD-NEXT: ret6426;6427; CHECK-FP16-SD-LABEL: fptou_v32f16_v32i8:6428; CHECK-FP16-SD: // %bb.0: // %entry6429; CHECK-FP16-SD-NEXT: fcvtzu v1.8h, v1.8h6430; CHECK-FP16-SD-NEXT: fcvtzu v0.8h, v0.8h6431; CHECK-FP16-SD-NEXT: fcvtzu v3.8h, v3.8h6432; CHECK-FP16-SD-NEXT: fcvtzu v2.8h, v2.8h6433; CHECK-FP16-SD-NEXT: uzp1 v0.16b, v0.16b, v1.16b6434; CHECK-FP16-SD-NEXT: uzp1 v1.16b, v2.16b, v3.16b6435; CHECK-FP16-SD-NEXT: ret6436;6437; CHECK-NOFP16-GI-LABEL: fptou_v32f16_v32i8:6438; CHECK-NOFP16-GI: // %bb.0: // %entry6439; CHECK-NOFP16-GI-NEXT: fcvtl v4.4s, v0.4h6440; CHECK-NOFP16-GI-NEXT: fcvtl2 v0.4s, v0.8h6441; CHECK-NOFP16-GI-NEXT: fcvtl v5.4s, v1.4h6442; CHECK-NOFP16-GI-NEXT: fcvtl2 v1.4s, v1.8h6443; CHECK-NOFP16-GI-NEXT: fcvtl v6.4s, v2.4h6444; CHECK-NOFP16-GI-NEXT: fcvtl2 v2.4s, v2.8h6445; CHECK-NOFP16-GI-NEXT: fcvtl v7.4s, v3.4h6446; CHECK-NOFP16-GI-NEXT: fcvtl2 v3.4s, v3.8h6447; CHECK-NOFP16-GI-NEXT: fcvtzu v4.4s, v4.4s6448; CHECK-NOFP16-GI-NEXT: fcvtzu v0.4s, v0.4s6449; CHECK-NOFP16-GI-NEXT: fcvtzu v5.4s, v5.4s6450; CHECK-NOFP16-GI-NEXT: fcvtzu v1.4s, v1.4s6451; CHECK-NOFP16-GI-NEXT: fcvtzu v6.4s, v6.4s6452; CHECK-NOFP16-GI-NEXT: fcvtzu v2.4s, v2.4s6453; CHECK-NOFP16-GI-NEXT: fcvtzu v7.4s, v7.4s6454; CHECK-NOFP16-GI-NEXT: fcvtzu v3.4s, v3.4s6455; CHECK-NOFP16-GI-NEXT: uzp1 v0.8h, v4.8h, v0.8h6456; CHECK-NOFP16-GI-NEXT: uzp1 v1.8h, v5.8h, v1.8h6457; CHECK-NOFP16-GI-NEXT: uzp1 v2.8h, v6.8h, v2.8h6458; CHECK-NOFP16-GI-NEXT: uzp1 v3.8h, v7.8h, v3.8h6459; CHECK-NOFP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b6460; CHECK-NOFP16-GI-NEXT: uzp1 v1.16b, v2.16b, v3.16b6461; CHECK-NOFP16-GI-NEXT: ret6462;6463; CHECK-FP16-GI-LABEL: fptou_v32f16_v32i8:6464; CHECK-FP16-GI: // %bb.0: // %entry6465; CHECK-FP16-GI-NEXT: fcvtzu v0.8h, v0.8h6466; CHECK-FP16-GI-NEXT: fcvtzu v1.8h, v1.8h6467; CHECK-FP16-GI-NEXT: fcvtzu v2.8h, v2.8h6468; CHECK-FP16-GI-NEXT: fcvtzu v3.8h, v3.8h6469; CHECK-FP16-GI-NEXT: uzp1 v0.16b, v0.16b, v1.16b6470; CHECK-FP16-GI-NEXT: uzp1 v1.16b, v2.16b, v3.16b6471; CHECK-FP16-GI-NEXT: ret6472entry:6473 %c = fptoui <32 x half> %a to <32 x i8>6474 ret <32 x i8> %c6475}6476 6477define <2 x i128> @fptos_v2f16_v2i128(<2 x half> %a) {6478; CHECK-NOFP16-SD-LABEL: fptos_v2f16_v2i128:6479; CHECK-NOFP16-SD: // %bb.0: // %entry6480; CHECK-NOFP16-SD-NEXT: sub sp, sp, #486481; CHECK-NOFP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill6482; CHECK-NOFP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill6483; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 486484; CHECK-NOFP16-SD-NEXT: .cfi_offset w19, -86485; CHECK-NOFP16-SD-NEXT: .cfi_offset w20, -166486; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -326487; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q06488; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill6489; CHECK-NOFP16-SD-NEXT: // kill: def $h0 killed $h0 killed $q06490; CHECK-NOFP16-SD-NEXT: bl __fixhfti6491; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload6492; CHECK-NOFP16-SD-NEXT: mov x19, x06493; CHECK-NOFP16-SD-NEXT: mov x20, x16494; CHECK-NOFP16-SD-NEXT: mov h0, v0.h[1]6495; CHECK-NOFP16-SD-NEXT: bl __fixhfti6496; CHECK-NOFP16-SD-NEXT: mov x2, x06497; CHECK-NOFP16-SD-NEXT: mov x3, x16498; CHECK-NOFP16-SD-NEXT: mov x0, x196499; CHECK-NOFP16-SD-NEXT: mov x1, x206500; CHECK-NOFP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload6501; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload6502; CHECK-NOFP16-SD-NEXT: add sp, sp, #486503; CHECK-NOFP16-SD-NEXT: ret6504;6505; CHECK-FP16-SD-LABEL: fptos_v2f16_v2i128:6506; CHECK-FP16-SD: // %bb.0: // %entry6507; CHECK-FP16-SD-NEXT: sub sp, sp, #486508; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill6509; CHECK-FP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill6510; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 486511; CHECK-FP16-SD-NEXT: .cfi_offset w19, -86512; CHECK-FP16-SD-NEXT: .cfi_offset w20, -166513; CHECK-FP16-SD-NEXT: .cfi_offset w30, -326514; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q06515; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill6516; CHECK-FP16-SD-NEXT: // kill: def $h0 killed $h0 killed $q06517; CHECK-FP16-SD-NEXT: bl __fixhfti6518; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload6519; CHECK-FP16-SD-NEXT: mov x19, x06520; CHECK-FP16-SD-NEXT: mov x20, x16521; CHECK-FP16-SD-NEXT: mov h0, v0.h[1]6522; CHECK-FP16-SD-NEXT: bl __fixhfti6523; CHECK-FP16-SD-NEXT: mov x2, x06524; CHECK-FP16-SD-NEXT: mov x3, x16525; CHECK-FP16-SD-NEXT: mov x0, x196526; CHECK-FP16-SD-NEXT: mov x1, x206527; CHECK-FP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload6528; CHECK-FP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload6529; CHECK-FP16-SD-NEXT: add sp, sp, #486530; CHECK-FP16-SD-NEXT: ret6531;6532; CHECK-NOFP16-GI-LABEL: fptos_v2f16_v2i128:6533; CHECK-NOFP16-GI: // %bb.0: // %entry6534; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q06535; CHECK-NOFP16-GI-NEXT: mov h1, v0.h[1]6536; CHECK-NOFP16-GI-NEXT: fcvt s0, h06537; CHECK-NOFP16-GI-NEXT: fcvt s1, h16538; CHECK-NOFP16-GI-NEXT: fcvtzs x0, s06539; CHECK-NOFP16-GI-NEXT: fcvtzs x2, s16540; CHECK-NOFP16-GI-NEXT: asr x1, x0, #636541; CHECK-NOFP16-GI-NEXT: asr x3, x2, #636542; CHECK-NOFP16-GI-NEXT: ret6543;6544; CHECK-FP16-GI-LABEL: fptos_v2f16_v2i128:6545; CHECK-FP16-GI: // %bb.0: // %entry6546; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q06547; CHECK-FP16-GI-NEXT: mov h1, v0.h[1]6548; CHECK-FP16-GI-NEXT: fcvtzs x0, h06549; CHECK-FP16-GI-NEXT: fcvtzs x2, h16550; CHECK-FP16-GI-NEXT: asr x1, x0, #636551; CHECK-FP16-GI-NEXT: asr x3, x2, #636552; CHECK-FP16-GI-NEXT: ret6553entry:6554 %c = fptosi <2 x half> %a to <2 x i128>6555 ret <2 x i128> %c6556}6557 6558define <2 x i128> @fptou_v2f16_v2i128(<2 x half> %a) {6559; CHECK-NOFP16-SD-LABEL: fptou_v2f16_v2i128:6560; CHECK-NOFP16-SD: // %bb.0: // %entry6561; CHECK-NOFP16-SD-NEXT: sub sp, sp, #486562; CHECK-NOFP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill6563; CHECK-NOFP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill6564; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 486565; CHECK-NOFP16-SD-NEXT: .cfi_offset w19, -86566; CHECK-NOFP16-SD-NEXT: .cfi_offset w20, -166567; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -326568; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q06569; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill6570; CHECK-NOFP16-SD-NEXT: // kill: def $h0 killed $h0 killed $q06571; CHECK-NOFP16-SD-NEXT: bl __fixunshfti6572; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload6573; CHECK-NOFP16-SD-NEXT: mov x19, x06574; CHECK-NOFP16-SD-NEXT: mov x20, x16575; CHECK-NOFP16-SD-NEXT: mov h0, v0.h[1]6576; CHECK-NOFP16-SD-NEXT: bl __fixunshfti6577; CHECK-NOFP16-SD-NEXT: mov x2, x06578; CHECK-NOFP16-SD-NEXT: mov x3, x16579; CHECK-NOFP16-SD-NEXT: mov x0, x196580; CHECK-NOFP16-SD-NEXT: mov x1, x206581; CHECK-NOFP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload6582; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload6583; CHECK-NOFP16-SD-NEXT: add sp, sp, #486584; CHECK-NOFP16-SD-NEXT: ret6585;6586; CHECK-FP16-SD-LABEL: fptou_v2f16_v2i128:6587; CHECK-FP16-SD: // %bb.0: // %entry6588; CHECK-FP16-SD-NEXT: sub sp, sp, #486589; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill6590; CHECK-FP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill6591; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 486592; CHECK-FP16-SD-NEXT: .cfi_offset w19, -86593; CHECK-FP16-SD-NEXT: .cfi_offset w20, -166594; CHECK-FP16-SD-NEXT: .cfi_offset w30, -326595; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q06596; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill6597; CHECK-FP16-SD-NEXT: // kill: def $h0 killed $h0 killed $q06598; CHECK-FP16-SD-NEXT: bl __fixunshfti6599; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload6600; CHECK-FP16-SD-NEXT: mov x19, x06601; CHECK-FP16-SD-NEXT: mov x20, x16602; CHECK-FP16-SD-NEXT: mov h0, v0.h[1]6603; CHECK-FP16-SD-NEXT: bl __fixunshfti6604; CHECK-FP16-SD-NEXT: mov x2, x06605; CHECK-FP16-SD-NEXT: mov x3, x16606; CHECK-FP16-SD-NEXT: mov x0, x196607; CHECK-FP16-SD-NEXT: mov x1, x206608; CHECK-FP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload6609; CHECK-FP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload6610; CHECK-FP16-SD-NEXT: add sp, sp, #486611; CHECK-FP16-SD-NEXT: ret6612;6613; CHECK-NOFP16-GI-LABEL: fptou_v2f16_v2i128:6614; CHECK-NOFP16-GI: // %bb.0: // %entry6615; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q06616; CHECK-NOFP16-GI-NEXT: mov h1, v0.h[1]6617; CHECK-NOFP16-GI-NEXT: mov x1, xzr6618; CHECK-NOFP16-GI-NEXT: mov x3, xzr6619; CHECK-NOFP16-GI-NEXT: fcvt s0, h06620; CHECK-NOFP16-GI-NEXT: fcvt s1, h16621; CHECK-NOFP16-GI-NEXT: fcvtzu x0, s06622; CHECK-NOFP16-GI-NEXT: fcvtzu x2, s16623; CHECK-NOFP16-GI-NEXT: ret6624;6625; CHECK-FP16-GI-LABEL: fptou_v2f16_v2i128:6626; CHECK-FP16-GI: // %bb.0: // %entry6627; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q06628; CHECK-FP16-GI-NEXT: mov h1, v0.h[1]6629; CHECK-FP16-GI-NEXT: fcvtzu x0, h06630; CHECK-FP16-GI-NEXT: mov x1, xzr6631; CHECK-FP16-GI-NEXT: mov x3, xzr6632; CHECK-FP16-GI-NEXT: fcvtzu x2, h16633; CHECK-FP16-GI-NEXT: ret6634entry:6635 %c = fptoui <2 x half> %a to <2 x i128>6636 ret <2 x i128> %c6637}6638 6639define <2 x i64> @fptos_v2f128_v2i64(<2 x fp128> %a) {6640; CHECK-NOFP16-SD-LABEL: fptos_v2f128_v2i64:6641; CHECK-NOFP16-SD: // %bb.0: // %entry6642; CHECK-NOFP16-SD-NEXT: sub sp, sp, #486643; CHECK-NOFP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill6644; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 486645; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -166646; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill6647; CHECK-NOFP16-SD-NEXT: mov v0.16b, v1.16b6648; CHECK-NOFP16-SD-NEXT: bl __fixtfdi6649; CHECK-NOFP16-SD-NEXT: fmov d0, x06650; CHECK-NOFP16-SD-NEXT: str q0, [sp, #16] // 16-byte Spill6651; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload6652; CHECK-NOFP16-SD-NEXT: bl __fixtfdi6653; CHECK-NOFP16-SD-NEXT: fmov d0, x06654; CHECK-NOFP16-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload6655; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload6656; CHECK-NOFP16-SD-NEXT: mov v0.d[1], v1.d[0]6657; CHECK-NOFP16-SD-NEXT: add sp, sp, #486658; CHECK-NOFP16-SD-NEXT: ret6659;6660; CHECK-FP16-SD-LABEL: fptos_v2f128_v2i64:6661; CHECK-FP16-SD: // %bb.0: // %entry6662; CHECK-FP16-SD-NEXT: sub sp, sp, #486663; CHECK-FP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill6664; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 486665; CHECK-FP16-SD-NEXT: .cfi_offset w30, -166666; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill6667; CHECK-FP16-SD-NEXT: mov v0.16b, v1.16b6668; CHECK-FP16-SD-NEXT: bl __fixtfdi6669; CHECK-FP16-SD-NEXT: fmov d0, x06670; CHECK-FP16-SD-NEXT: str q0, [sp, #16] // 16-byte Spill6671; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload6672; CHECK-FP16-SD-NEXT: bl __fixtfdi6673; CHECK-FP16-SD-NEXT: fmov d0, x06674; CHECK-FP16-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload6675; CHECK-FP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload6676; CHECK-FP16-SD-NEXT: mov v0.d[1], v1.d[0]6677; CHECK-FP16-SD-NEXT: add sp, sp, #486678; CHECK-FP16-SD-NEXT: ret6679;6680; CHECK-NOFP16-GI-LABEL: fptos_v2f128_v2i64:6681; CHECK-NOFP16-GI: // %bb.0: // %entry6682; CHECK-NOFP16-GI-NEXT: sub sp, sp, #326683; CHECK-NOFP16-GI-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill6684; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 326685; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -86686; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -166687; CHECK-NOFP16-GI-NEXT: str q1, [sp] // 16-byte Spill6688; CHECK-NOFP16-GI-NEXT: bl __fixtfdi6689; CHECK-NOFP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload6690; CHECK-NOFP16-GI-NEXT: mov x19, x06691; CHECK-NOFP16-GI-NEXT: bl __fixtfdi6692; CHECK-NOFP16-GI-NEXT: fmov d0, x196693; CHECK-NOFP16-GI-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload6694; CHECK-NOFP16-GI-NEXT: mov v0.d[1], x06695; CHECK-NOFP16-GI-NEXT: add sp, sp, #326696; CHECK-NOFP16-GI-NEXT: ret6697;6698; CHECK-FP16-GI-LABEL: fptos_v2f128_v2i64:6699; CHECK-FP16-GI: // %bb.0: // %entry6700; CHECK-FP16-GI-NEXT: sub sp, sp, #326701; CHECK-FP16-GI-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill6702; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 326703; CHECK-FP16-GI-NEXT: .cfi_offset w19, -86704; CHECK-FP16-GI-NEXT: .cfi_offset w30, -166705; CHECK-FP16-GI-NEXT: str q1, [sp] // 16-byte Spill6706; CHECK-FP16-GI-NEXT: bl __fixtfdi6707; CHECK-FP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload6708; CHECK-FP16-GI-NEXT: mov x19, x06709; CHECK-FP16-GI-NEXT: bl __fixtfdi6710; CHECK-FP16-GI-NEXT: fmov d0, x196711; CHECK-FP16-GI-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload6712; CHECK-FP16-GI-NEXT: mov v0.d[1], x06713; CHECK-FP16-GI-NEXT: add sp, sp, #326714; CHECK-FP16-GI-NEXT: ret6715entry:6716 %c = fptosi <2 x fp128> %a to <2 x i64>6717 ret <2 x i64> %c6718}6719 6720define <2 x i64> @fptou_v2f128_v2i64(<2 x fp128> %a) {6721; CHECK-NOFP16-SD-LABEL: fptou_v2f128_v2i64:6722; CHECK-NOFP16-SD: // %bb.0: // %entry6723; CHECK-NOFP16-SD-NEXT: sub sp, sp, #486724; CHECK-NOFP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill6725; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 486726; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -166727; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill6728; CHECK-NOFP16-SD-NEXT: mov v0.16b, v1.16b6729; CHECK-NOFP16-SD-NEXT: bl __fixunstfdi6730; CHECK-NOFP16-SD-NEXT: fmov d0, x06731; CHECK-NOFP16-SD-NEXT: str q0, [sp, #16] // 16-byte Spill6732; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload6733; CHECK-NOFP16-SD-NEXT: bl __fixunstfdi6734; CHECK-NOFP16-SD-NEXT: fmov d0, x06735; CHECK-NOFP16-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload6736; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload6737; CHECK-NOFP16-SD-NEXT: mov v0.d[1], v1.d[0]6738; CHECK-NOFP16-SD-NEXT: add sp, sp, #486739; CHECK-NOFP16-SD-NEXT: ret6740;6741; CHECK-FP16-SD-LABEL: fptou_v2f128_v2i64:6742; CHECK-FP16-SD: // %bb.0: // %entry6743; CHECK-FP16-SD-NEXT: sub sp, sp, #486744; CHECK-FP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill6745; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 486746; CHECK-FP16-SD-NEXT: .cfi_offset w30, -166747; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill6748; CHECK-FP16-SD-NEXT: mov v0.16b, v1.16b6749; CHECK-FP16-SD-NEXT: bl __fixunstfdi6750; CHECK-FP16-SD-NEXT: fmov d0, x06751; CHECK-FP16-SD-NEXT: str q0, [sp, #16] // 16-byte Spill6752; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload6753; CHECK-FP16-SD-NEXT: bl __fixunstfdi6754; CHECK-FP16-SD-NEXT: fmov d0, x06755; CHECK-FP16-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload6756; CHECK-FP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload6757; CHECK-FP16-SD-NEXT: mov v0.d[1], v1.d[0]6758; CHECK-FP16-SD-NEXT: add sp, sp, #486759; CHECK-FP16-SD-NEXT: ret6760;6761; CHECK-NOFP16-GI-LABEL: fptou_v2f128_v2i64:6762; CHECK-NOFP16-GI: // %bb.0: // %entry6763; CHECK-NOFP16-GI-NEXT: sub sp, sp, #326764; CHECK-NOFP16-GI-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill6765; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 326766; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -86767; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -166768; CHECK-NOFP16-GI-NEXT: str q1, [sp] // 16-byte Spill6769; CHECK-NOFP16-GI-NEXT: bl __fixunstfdi6770; CHECK-NOFP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload6771; CHECK-NOFP16-GI-NEXT: mov x19, x06772; CHECK-NOFP16-GI-NEXT: bl __fixunstfdi6773; CHECK-NOFP16-GI-NEXT: fmov d0, x196774; CHECK-NOFP16-GI-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload6775; CHECK-NOFP16-GI-NEXT: mov v0.d[1], x06776; CHECK-NOFP16-GI-NEXT: add sp, sp, #326777; CHECK-NOFP16-GI-NEXT: ret6778;6779; CHECK-FP16-GI-LABEL: fptou_v2f128_v2i64:6780; CHECK-FP16-GI: // %bb.0: // %entry6781; CHECK-FP16-GI-NEXT: sub sp, sp, #326782; CHECK-FP16-GI-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill6783; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 326784; CHECK-FP16-GI-NEXT: .cfi_offset w19, -86785; CHECK-FP16-GI-NEXT: .cfi_offset w30, -166786; CHECK-FP16-GI-NEXT: str q1, [sp] // 16-byte Spill6787; CHECK-FP16-GI-NEXT: bl __fixunstfdi6788; CHECK-FP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload6789; CHECK-FP16-GI-NEXT: mov x19, x06790; CHECK-FP16-GI-NEXT: bl __fixunstfdi6791; CHECK-FP16-GI-NEXT: fmov d0, x196792; CHECK-FP16-GI-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload6793; CHECK-FP16-GI-NEXT: mov v0.d[1], x06794; CHECK-FP16-GI-NEXT: add sp, sp, #326795; CHECK-FP16-GI-NEXT: ret6796entry:6797 %c = fptoui <2 x fp128> %a to <2 x i64>6798 ret <2 x i64> %c6799}6800 6801define <2 x i32> @fptos_v2f128_v2i32(<2 x fp128> %a) {6802; CHECK-NOFP16-SD-LABEL: fptos_v2f128_v2i32:6803; CHECK-NOFP16-SD: // %bb.0: // %entry6804; CHECK-NOFP16-SD-NEXT: sub sp, sp, #486805; CHECK-NOFP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill6806; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 486807; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -166808; CHECK-NOFP16-SD-NEXT: str q1, [sp, #16] // 16-byte Spill6809; CHECK-NOFP16-SD-NEXT: bl __fixtfsi6810; CHECK-NOFP16-SD-NEXT: fmov s0, w06811; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill6812; CHECK-NOFP16-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload6813; CHECK-NOFP16-SD-NEXT: bl __fixtfsi6814; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload6815; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload6816; CHECK-NOFP16-SD-NEXT: mov v0.s[1], w06817; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q06818; CHECK-NOFP16-SD-NEXT: add sp, sp, #486819; CHECK-NOFP16-SD-NEXT: ret6820;6821; CHECK-FP16-SD-LABEL: fptos_v2f128_v2i32:6822; CHECK-FP16-SD: // %bb.0: // %entry6823; CHECK-FP16-SD-NEXT: sub sp, sp, #486824; CHECK-FP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill6825; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 486826; CHECK-FP16-SD-NEXT: .cfi_offset w30, -166827; CHECK-FP16-SD-NEXT: str q1, [sp, #16] // 16-byte Spill6828; CHECK-FP16-SD-NEXT: bl __fixtfsi6829; CHECK-FP16-SD-NEXT: fmov s0, w06830; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill6831; CHECK-FP16-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload6832; CHECK-FP16-SD-NEXT: bl __fixtfsi6833; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload6834; CHECK-FP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload6835; CHECK-FP16-SD-NEXT: mov v0.s[1], w06836; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q06837; CHECK-FP16-SD-NEXT: add sp, sp, #486838; CHECK-FP16-SD-NEXT: ret6839;6840; CHECK-NOFP16-GI-LABEL: fptos_v2f128_v2i32:6841; CHECK-NOFP16-GI: // %bb.0: // %entry6842; CHECK-NOFP16-GI-NEXT: sub sp, sp, #326843; CHECK-NOFP16-GI-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill6844; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 326845; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -86846; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -166847; CHECK-NOFP16-GI-NEXT: str q1, [sp] // 16-byte Spill6848; CHECK-NOFP16-GI-NEXT: bl __fixtfsi6849; CHECK-NOFP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload6850; CHECK-NOFP16-GI-NEXT: mov w19, w06851; CHECK-NOFP16-GI-NEXT: bl __fixtfsi6852; CHECK-NOFP16-GI-NEXT: fmov s0, w196853; CHECK-NOFP16-GI-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload6854; CHECK-NOFP16-GI-NEXT: mov v0.s[1], w06855; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q06856; CHECK-NOFP16-GI-NEXT: add sp, sp, #326857; CHECK-NOFP16-GI-NEXT: ret6858;6859; CHECK-FP16-GI-LABEL: fptos_v2f128_v2i32:6860; CHECK-FP16-GI: // %bb.0: // %entry6861; CHECK-FP16-GI-NEXT: sub sp, sp, #326862; CHECK-FP16-GI-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill6863; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 326864; CHECK-FP16-GI-NEXT: .cfi_offset w19, -86865; CHECK-FP16-GI-NEXT: .cfi_offset w30, -166866; CHECK-FP16-GI-NEXT: str q1, [sp] // 16-byte Spill6867; CHECK-FP16-GI-NEXT: bl __fixtfsi6868; CHECK-FP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload6869; CHECK-FP16-GI-NEXT: mov w19, w06870; CHECK-FP16-GI-NEXT: bl __fixtfsi6871; CHECK-FP16-GI-NEXT: fmov s0, w196872; CHECK-FP16-GI-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload6873; CHECK-FP16-GI-NEXT: mov v0.s[1], w06874; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q06875; CHECK-FP16-GI-NEXT: add sp, sp, #326876; CHECK-FP16-GI-NEXT: ret6877entry:6878 %c = fptosi <2 x fp128> %a to <2 x i32>6879 ret <2 x i32> %c6880}6881 6882define <2 x i32> @fptou_v2f128_v2i32(<2 x fp128> %a) {6883; CHECK-NOFP16-SD-LABEL: fptou_v2f128_v2i32:6884; CHECK-NOFP16-SD: // %bb.0: // %entry6885; CHECK-NOFP16-SD-NEXT: sub sp, sp, #486886; CHECK-NOFP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill6887; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 486888; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -166889; CHECK-NOFP16-SD-NEXT: str q1, [sp, #16] // 16-byte Spill6890; CHECK-NOFP16-SD-NEXT: bl __fixunstfsi6891; CHECK-NOFP16-SD-NEXT: fmov s0, w06892; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill6893; CHECK-NOFP16-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload6894; CHECK-NOFP16-SD-NEXT: bl __fixunstfsi6895; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload6896; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload6897; CHECK-NOFP16-SD-NEXT: mov v0.s[1], w06898; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q06899; CHECK-NOFP16-SD-NEXT: add sp, sp, #486900; CHECK-NOFP16-SD-NEXT: ret6901;6902; CHECK-FP16-SD-LABEL: fptou_v2f128_v2i32:6903; CHECK-FP16-SD: // %bb.0: // %entry6904; CHECK-FP16-SD-NEXT: sub sp, sp, #486905; CHECK-FP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill6906; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 486907; CHECK-FP16-SD-NEXT: .cfi_offset w30, -166908; CHECK-FP16-SD-NEXT: str q1, [sp, #16] // 16-byte Spill6909; CHECK-FP16-SD-NEXT: bl __fixunstfsi6910; CHECK-FP16-SD-NEXT: fmov s0, w06911; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill6912; CHECK-FP16-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload6913; CHECK-FP16-SD-NEXT: bl __fixunstfsi6914; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload6915; CHECK-FP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload6916; CHECK-FP16-SD-NEXT: mov v0.s[1], w06917; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q06918; CHECK-FP16-SD-NEXT: add sp, sp, #486919; CHECK-FP16-SD-NEXT: ret6920;6921; CHECK-NOFP16-GI-LABEL: fptou_v2f128_v2i32:6922; CHECK-NOFP16-GI: // %bb.0: // %entry6923; CHECK-NOFP16-GI-NEXT: sub sp, sp, #326924; CHECK-NOFP16-GI-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill6925; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 326926; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -86927; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -166928; CHECK-NOFP16-GI-NEXT: str q1, [sp] // 16-byte Spill6929; CHECK-NOFP16-GI-NEXT: bl __fixunstfsi6930; CHECK-NOFP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload6931; CHECK-NOFP16-GI-NEXT: mov w19, w06932; CHECK-NOFP16-GI-NEXT: bl __fixunstfsi6933; CHECK-NOFP16-GI-NEXT: fmov s0, w196934; CHECK-NOFP16-GI-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload6935; CHECK-NOFP16-GI-NEXT: mov v0.s[1], w06936; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q06937; CHECK-NOFP16-GI-NEXT: add sp, sp, #326938; CHECK-NOFP16-GI-NEXT: ret6939;6940; CHECK-FP16-GI-LABEL: fptou_v2f128_v2i32:6941; CHECK-FP16-GI: // %bb.0: // %entry6942; CHECK-FP16-GI-NEXT: sub sp, sp, #326943; CHECK-FP16-GI-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill6944; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 326945; CHECK-FP16-GI-NEXT: .cfi_offset w19, -86946; CHECK-FP16-GI-NEXT: .cfi_offset w30, -166947; CHECK-FP16-GI-NEXT: str q1, [sp] // 16-byte Spill6948; CHECK-FP16-GI-NEXT: bl __fixunstfsi6949; CHECK-FP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload6950; CHECK-FP16-GI-NEXT: mov w19, w06951; CHECK-FP16-GI-NEXT: bl __fixunstfsi6952; CHECK-FP16-GI-NEXT: fmov s0, w196953; CHECK-FP16-GI-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload6954; CHECK-FP16-GI-NEXT: mov v0.s[1], w06955; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q06956; CHECK-FP16-GI-NEXT: add sp, sp, #326957; CHECK-FP16-GI-NEXT: ret6958entry:6959 %c = fptoui <2 x fp128> %a to <2 x i32>6960 ret <2 x i32> %c6961}6962 6963define <2 x i16> @fptos_v2f128_v2i16(<2 x fp128> %a) {6964; CHECK-NOFP16-SD-LABEL: fptos_v2f128_v2i16:6965; CHECK-NOFP16-SD: // %bb.0: // %entry6966; CHECK-NOFP16-SD-NEXT: sub sp, sp, #486967; CHECK-NOFP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill6968; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 486969; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -166970; CHECK-NOFP16-SD-NEXT: str q1, [sp, #16] // 16-byte Spill6971; CHECK-NOFP16-SD-NEXT: bl __fixtfsi6972; CHECK-NOFP16-SD-NEXT: fmov s0, w06973; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill6974; CHECK-NOFP16-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload6975; CHECK-NOFP16-SD-NEXT: bl __fixtfsi6976; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload6977; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload6978; CHECK-NOFP16-SD-NEXT: mov v0.s[1], w06979; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q06980; CHECK-NOFP16-SD-NEXT: add sp, sp, #486981; CHECK-NOFP16-SD-NEXT: ret6982;6983; CHECK-FP16-SD-LABEL: fptos_v2f128_v2i16:6984; CHECK-FP16-SD: // %bb.0: // %entry6985; CHECK-FP16-SD-NEXT: sub sp, sp, #486986; CHECK-FP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill6987; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 486988; CHECK-FP16-SD-NEXT: .cfi_offset w30, -166989; CHECK-FP16-SD-NEXT: str q1, [sp, #16] // 16-byte Spill6990; CHECK-FP16-SD-NEXT: bl __fixtfsi6991; CHECK-FP16-SD-NEXT: fmov s0, w06992; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill6993; CHECK-FP16-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload6994; CHECK-FP16-SD-NEXT: bl __fixtfsi6995; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload6996; CHECK-FP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload6997; CHECK-FP16-SD-NEXT: mov v0.s[1], w06998; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q06999; CHECK-FP16-SD-NEXT: add sp, sp, #487000; CHECK-FP16-SD-NEXT: ret7001;7002; CHECK-NOFP16-GI-LABEL: fptos_v2f128_v2i16:7003; CHECK-NOFP16-GI: // %bb.0: // %entry7004; CHECK-NOFP16-GI-NEXT: sub sp, sp, #327005; CHECK-NOFP16-GI-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill7006; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 327007; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -87008; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -167009; CHECK-NOFP16-GI-NEXT: str q1, [sp] // 16-byte Spill7010; CHECK-NOFP16-GI-NEXT: bl __fixtfsi7011; CHECK-NOFP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7012; CHECK-NOFP16-GI-NEXT: mov w19, w07013; CHECK-NOFP16-GI-NEXT: bl __fixtfsi7014; CHECK-NOFP16-GI-NEXT: fmov s0, w197015; CHECK-NOFP16-GI-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload7016; CHECK-NOFP16-GI-NEXT: mov v0.s[1], w07017; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q07018; CHECK-NOFP16-GI-NEXT: add sp, sp, #327019; CHECK-NOFP16-GI-NEXT: ret7020;7021; CHECK-FP16-GI-LABEL: fptos_v2f128_v2i16:7022; CHECK-FP16-GI: // %bb.0: // %entry7023; CHECK-FP16-GI-NEXT: sub sp, sp, #327024; CHECK-FP16-GI-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill7025; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 327026; CHECK-FP16-GI-NEXT: .cfi_offset w19, -87027; CHECK-FP16-GI-NEXT: .cfi_offset w30, -167028; CHECK-FP16-GI-NEXT: str q1, [sp] // 16-byte Spill7029; CHECK-FP16-GI-NEXT: bl __fixtfsi7030; CHECK-FP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7031; CHECK-FP16-GI-NEXT: mov w19, w07032; CHECK-FP16-GI-NEXT: bl __fixtfsi7033; CHECK-FP16-GI-NEXT: fmov s0, w197034; CHECK-FP16-GI-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload7035; CHECK-FP16-GI-NEXT: mov v0.s[1], w07036; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q07037; CHECK-FP16-GI-NEXT: add sp, sp, #327038; CHECK-FP16-GI-NEXT: ret7039entry:7040 %c = fptosi <2 x fp128> %a to <2 x i16>7041 ret <2 x i16> %c7042}7043 7044define <2 x i16> @fptou_v2f128_v2i16(<2 x fp128> %a) {7045; CHECK-NOFP16-SD-LABEL: fptou_v2f128_v2i16:7046; CHECK-NOFP16-SD: // %bb.0: // %entry7047; CHECK-NOFP16-SD-NEXT: sub sp, sp, #487048; CHECK-NOFP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill7049; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 487050; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -167051; CHECK-NOFP16-SD-NEXT: str q1, [sp, #16] // 16-byte Spill7052; CHECK-NOFP16-SD-NEXT: bl __fixtfsi7053; CHECK-NOFP16-SD-NEXT: fmov s0, w07054; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill7055; CHECK-NOFP16-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload7056; CHECK-NOFP16-SD-NEXT: bl __fixtfsi7057; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload7058; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload7059; CHECK-NOFP16-SD-NEXT: mov v0.s[1], w07060; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q07061; CHECK-NOFP16-SD-NEXT: add sp, sp, #487062; CHECK-NOFP16-SD-NEXT: ret7063;7064; CHECK-FP16-SD-LABEL: fptou_v2f128_v2i16:7065; CHECK-FP16-SD: // %bb.0: // %entry7066; CHECK-FP16-SD-NEXT: sub sp, sp, #487067; CHECK-FP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill7068; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 487069; CHECK-FP16-SD-NEXT: .cfi_offset w30, -167070; CHECK-FP16-SD-NEXT: str q1, [sp, #16] // 16-byte Spill7071; CHECK-FP16-SD-NEXT: bl __fixtfsi7072; CHECK-FP16-SD-NEXT: fmov s0, w07073; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill7074; CHECK-FP16-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload7075; CHECK-FP16-SD-NEXT: bl __fixtfsi7076; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload7077; CHECK-FP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload7078; CHECK-FP16-SD-NEXT: mov v0.s[1], w07079; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q07080; CHECK-FP16-SD-NEXT: add sp, sp, #487081; CHECK-FP16-SD-NEXT: ret7082;7083; CHECK-NOFP16-GI-LABEL: fptou_v2f128_v2i16:7084; CHECK-NOFP16-GI: // %bb.0: // %entry7085; CHECK-NOFP16-GI-NEXT: sub sp, sp, #327086; CHECK-NOFP16-GI-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill7087; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 327088; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -87089; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -167090; CHECK-NOFP16-GI-NEXT: str q1, [sp] // 16-byte Spill7091; CHECK-NOFP16-GI-NEXT: bl __fixunstfsi7092; CHECK-NOFP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7093; CHECK-NOFP16-GI-NEXT: mov w19, w07094; CHECK-NOFP16-GI-NEXT: bl __fixunstfsi7095; CHECK-NOFP16-GI-NEXT: fmov s0, w197096; CHECK-NOFP16-GI-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload7097; CHECK-NOFP16-GI-NEXT: mov v0.s[1], w07098; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q07099; CHECK-NOFP16-GI-NEXT: add sp, sp, #327100; CHECK-NOFP16-GI-NEXT: ret7101;7102; CHECK-FP16-GI-LABEL: fptou_v2f128_v2i16:7103; CHECK-FP16-GI: // %bb.0: // %entry7104; CHECK-FP16-GI-NEXT: sub sp, sp, #327105; CHECK-FP16-GI-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill7106; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 327107; CHECK-FP16-GI-NEXT: .cfi_offset w19, -87108; CHECK-FP16-GI-NEXT: .cfi_offset w30, -167109; CHECK-FP16-GI-NEXT: str q1, [sp] // 16-byte Spill7110; CHECK-FP16-GI-NEXT: bl __fixunstfsi7111; CHECK-FP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7112; CHECK-FP16-GI-NEXT: mov w19, w07113; CHECK-FP16-GI-NEXT: bl __fixunstfsi7114; CHECK-FP16-GI-NEXT: fmov s0, w197115; CHECK-FP16-GI-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload7116; CHECK-FP16-GI-NEXT: mov v0.s[1], w07117; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q07118; CHECK-FP16-GI-NEXT: add sp, sp, #327119; CHECK-FP16-GI-NEXT: ret7120entry:7121 %c = fptoui <2 x fp128> %a to <2 x i16>7122 ret <2 x i16> %c7123}7124 7125define <2 x i8> @fptos_v2f128_v2i8(<2 x fp128> %a) {7126; CHECK-NOFP16-SD-LABEL: fptos_v2f128_v2i8:7127; CHECK-NOFP16-SD: // %bb.0: // %entry7128; CHECK-NOFP16-SD-NEXT: sub sp, sp, #487129; CHECK-NOFP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill7130; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 487131; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -167132; CHECK-NOFP16-SD-NEXT: str q1, [sp, #16] // 16-byte Spill7133; CHECK-NOFP16-SD-NEXT: bl __fixtfsi7134; CHECK-NOFP16-SD-NEXT: fmov s0, w07135; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill7136; CHECK-NOFP16-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload7137; CHECK-NOFP16-SD-NEXT: bl __fixtfsi7138; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload7139; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload7140; CHECK-NOFP16-SD-NEXT: mov v0.s[1], w07141; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q07142; CHECK-NOFP16-SD-NEXT: add sp, sp, #487143; CHECK-NOFP16-SD-NEXT: ret7144;7145; CHECK-FP16-SD-LABEL: fptos_v2f128_v2i8:7146; CHECK-FP16-SD: // %bb.0: // %entry7147; CHECK-FP16-SD-NEXT: sub sp, sp, #487148; CHECK-FP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill7149; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 487150; CHECK-FP16-SD-NEXT: .cfi_offset w30, -167151; CHECK-FP16-SD-NEXT: str q1, [sp, #16] // 16-byte Spill7152; CHECK-FP16-SD-NEXT: bl __fixtfsi7153; CHECK-FP16-SD-NEXT: fmov s0, w07154; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill7155; CHECK-FP16-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload7156; CHECK-FP16-SD-NEXT: bl __fixtfsi7157; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload7158; CHECK-FP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload7159; CHECK-FP16-SD-NEXT: mov v0.s[1], w07160; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q07161; CHECK-FP16-SD-NEXT: add sp, sp, #487162; CHECK-FP16-SD-NEXT: ret7163;7164; CHECK-NOFP16-GI-LABEL: fptos_v2f128_v2i8:7165; CHECK-NOFP16-GI: // %bb.0: // %entry7166; CHECK-NOFP16-GI-NEXT: sub sp, sp, #327167; CHECK-NOFP16-GI-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill7168; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 327169; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -87170; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -167171; CHECK-NOFP16-GI-NEXT: str q1, [sp] // 16-byte Spill7172; CHECK-NOFP16-GI-NEXT: bl __fixtfsi7173; CHECK-NOFP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7174; CHECK-NOFP16-GI-NEXT: mov w19, w07175; CHECK-NOFP16-GI-NEXT: bl __fixtfsi7176; CHECK-NOFP16-GI-NEXT: fmov s0, w197177; CHECK-NOFP16-GI-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload7178; CHECK-NOFP16-GI-NEXT: mov v0.s[1], w07179; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q07180; CHECK-NOFP16-GI-NEXT: add sp, sp, #327181; CHECK-NOFP16-GI-NEXT: ret7182;7183; CHECK-FP16-GI-LABEL: fptos_v2f128_v2i8:7184; CHECK-FP16-GI: // %bb.0: // %entry7185; CHECK-FP16-GI-NEXT: sub sp, sp, #327186; CHECK-FP16-GI-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill7187; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 327188; CHECK-FP16-GI-NEXT: .cfi_offset w19, -87189; CHECK-FP16-GI-NEXT: .cfi_offset w30, -167190; CHECK-FP16-GI-NEXT: str q1, [sp] // 16-byte Spill7191; CHECK-FP16-GI-NEXT: bl __fixtfsi7192; CHECK-FP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7193; CHECK-FP16-GI-NEXT: mov w19, w07194; CHECK-FP16-GI-NEXT: bl __fixtfsi7195; CHECK-FP16-GI-NEXT: fmov s0, w197196; CHECK-FP16-GI-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload7197; CHECK-FP16-GI-NEXT: mov v0.s[1], w07198; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q07199; CHECK-FP16-GI-NEXT: add sp, sp, #327200; CHECK-FP16-GI-NEXT: ret7201entry:7202 %c = fptosi <2 x fp128> %a to <2 x i8>7203 ret <2 x i8> %c7204}7205 7206define <2 x i8> @fptou_v2f128_v2i8(<2 x fp128> %a) {7207; CHECK-NOFP16-SD-LABEL: fptou_v2f128_v2i8:7208; CHECK-NOFP16-SD: // %bb.0: // %entry7209; CHECK-NOFP16-SD-NEXT: sub sp, sp, #487210; CHECK-NOFP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill7211; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 487212; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -167213; CHECK-NOFP16-SD-NEXT: str q1, [sp, #16] // 16-byte Spill7214; CHECK-NOFP16-SD-NEXT: bl __fixtfsi7215; CHECK-NOFP16-SD-NEXT: fmov s0, w07216; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill7217; CHECK-NOFP16-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload7218; CHECK-NOFP16-SD-NEXT: bl __fixtfsi7219; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload7220; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload7221; CHECK-NOFP16-SD-NEXT: mov v0.s[1], w07222; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q07223; CHECK-NOFP16-SD-NEXT: add sp, sp, #487224; CHECK-NOFP16-SD-NEXT: ret7225;7226; CHECK-FP16-SD-LABEL: fptou_v2f128_v2i8:7227; CHECK-FP16-SD: // %bb.0: // %entry7228; CHECK-FP16-SD-NEXT: sub sp, sp, #487229; CHECK-FP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill7230; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 487231; CHECK-FP16-SD-NEXT: .cfi_offset w30, -167232; CHECK-FP16-SD-NEXT: str q1, [sp, #16] // 16-byte Spill7233; CHECK-FP16-SD-NEXT: bl __fixtfsi7234; CHECK-FP16-SD-NEXT: fmov s0, w07235; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill7236; CHECK-FP16-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload7237; CHECK-FP16-SD-NEXT: bl __fixtfsi7238; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload7239; CHECK-FP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload7240; CHECK-FP16-SD-NEXT: mov v0.s[1], w07241; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q07242; CHECK-FP16-SD-NEXT: add sp, sp, #487243; CHECK-FP16-SD-NEXT: ret7244;7245; CHECK-NOFP16-GI-LABEL: fptou_v2f128_v2i8:7246; CHECK-NOFP16-GI: // %bb.0: // %entry7247; CHECK-NOFP16-GI-NEXT: sub sp, sp, #327248; CHECK-NOFP16-GI-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill7249; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 327250; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -87251; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -167252; CHECK-NOFP16-GI-NEXT: str q1, [sp] // 16-byte Spill7253; CHECK-NOFP16-GI-NEXT: bl __fixunstfsi7254; CHECK-NOFP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7255; CHECK-NOFP16-GI-NEXT: mov w19, w07256; CHECK-NOFP16-GI-NEXT: bl __fixunstfsi7257; CHECK-NOFP16-GI-NEXT: fmov s0, w197258; CHECK-NOFP16-GI-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload7259; CHECK-NOFP16-GI-NEXT: mov v0.s[1], w07260; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q07261; CHECK-NOFP16-GI-NEXT: add sp, sp, #327262; CHECK-NOFP16-GI-NEXT: ret7263;7264; CHECK-FP16-GI-LABEL: fptou_v2f128_v2i8:7265; CHECK-FP16-GI: // %bb.0: // %entry7266; CHECK-FP16-GI-NEXT: sub sp, sp, #327267; CHECK-FP16-GI-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill7268; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 327269; CHECK-FP16-GI-NEXT: .cfi_offset w19, -87270; CHECK-FP16-GI-NEXT: .cfi_offset w30, -167271; CHECK-FP16-GI-NEXT: str q1, [sp] // 16-byte Spill7272; CHECK-FP16-GI-NEXT: bl __fixunstfsi7273; CHECK-FP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7274; CHECK-FP16-GI-NEXT: mov w19, w07275; CHECK-FP16-GI-NEXT: bl __fixunstfsi7276; CHECK-FP16-GI-NEXT: fmov s0, w197277; CHECK-FP16-GI-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload7278; CHECK-FP16-GI-NEXT: mov v0.s[1], w07279; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q07280; CHECK-FP16-GI-NEXT: add sp, sp, #327281; CHECK-FP16-GI-NEXT: ret7282entry:7283 %c = fptoui <2 x fp128> %a to <2 x i8>7284 ret <2 x i8> %c7285}7286 7287define <2 x i128> @fptos_v2f128_v2i128(<2 x fp128> %a) {7288; CHECK-LABEL: fptos_v2f128_v2i128:7289; CHECK: // %bb.0: // %entry7290; CHECK-NEXT: sub sp, sp, #487291; CHECK-NEXT: str x30, [sp, #16] // 8-byte Spill7292; CHECK-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill7293; CHECK-NEXT: .cfi_def_cfa_offset 487294; CHECK-NEXT: .cfi_offset w19, -87295; CHECK-NEXT: .cfi_offset w20, -167296; CHECK-NEXT: .cfi_offset w30, -327297; CHECK-NEXT: str q1, [sp] // 16-byte Spill7298; CHECK-NEXT: bl __fixtfti7299; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload7300; CHECK-NEXT: mov x19, x07301; CHECK-NEXT: mov x20, x17302; CHECK-NEXT: bl __fixtfti7303; CHECK-NEXT: mov x2, x07304; CHECK-NEXT: mov x3, x17305; CHECK-NEXT: mov x0, x197306; CHECK-NEXT: mov x1, x207307; CHECK-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload7308; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Reload7309; CHECK-NEXT: add sp, sp, #487310; CHECK-NEXT: ret7311entry:7312 %c = fptosi <2 x fp128> %a to <2 x i128>7313 ret <2 x i128> %c7314}7315 7316define <2 x i128> @fptou_v2f128_v2i128(<2 x fp128> %a) {7317; CHECK-LABEL: fptou_v2f128_v2i128:7318; CHECK: // %bb.0: // %entry7319; CHECK-NEXT: sub sp, sp, #487320; CHECK-NEXT: str x30, [sp, #16] // 8-byte Spill7321; CHECK-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill7322; CHECK-NEXT: .cfi_def_cfa_offset 487323; CHECK-NEXT: .cfi_offset w19, -87324; CHECK-NEXT: .cfi_offset w20, -167325; CHECK-NEXT: .cfi_offset w30, -327326; CHECK-NEXT: str q1, [sp] // 16-byte Spill7327; CHECK-NEXT: bl __fixunstfti7328; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload7329; CHECK-NEXT: mov x19, x07330; CHECK-NEXT: mov x20, x17331; CHECK-NEXT: bl __fixunstfti7332; CHECK-NEXT: mov x2, x07333; CHECK-NEXT: mov x3, x17334; CHECK-NEXT: mov x0, x197335; CHECK-NEXT: mov x1, x207336; CHECK-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload7337; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Reload7338; CHECK-NEXT: add sp, sp, #487339; CHECK-NEXT: ret7340entry:7341 %c = fptoui <2 x fp128> %a to <2 x i128>7342 ret <2 x i128> %c7343}7344