8233 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 -global-isel-abort=2 -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-NOFP16,CHECK-NOFP16-GI5; RUN: llc -mtriple=aarch64 -mattr=+fullfp16 -global-isel -global-isel-abort=2 -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-FP16,CHECK-FP16-GI6 7define double @stofp_i64_f64(i64 %a) {8; CHECK-LABEL: stofp_i64_f64:9; CHECK: // %bb.0: // %entry10; CHECK-NEXT: scvtf d0, x011; CHECK-NEXT: ret12entry:13 %c = sitofp i64 %a to double14 ret double %c15}16 17define double @utofp_i64_f64(i64 %a) {18; CHECK-LABEL: utofp_i64_f64:19; CHECK: // %bb.0: // %entry20; CHECK-NEXT: ucvtf d0, x021; CHECK-NEXT: ret22entry:23 %c = uitofp i64 %a to double24 ret double %c25}26 27define double @stofp_i32_f64(i32 %a) {28; CHECK-LABEL: stofp_i32_f64:29; CHECK: // %bb.0: // %entry30; CHECK-NEXT: scvtf d0, w031; CHECK-NEXT: ret32entry:33 %c = sitofp i32 %a to double34 ret double %c35}36 37define double @utofp_i32_f64(i32 %a) {38; CHECK-LABEL: utofp_i32_f64:39; CHECK: // %bb.0: // %entry40; CHECK-NEXT: ucvtf d0, w041; CHECK-NEXT: ret42entry:43 %c = uitofp i32 %a to double44 ret double %c45}46 47define double @stofp_i16_f64(i16 %a) {48; CHECK-LABEL: stofp_i16_f64:49; CHECK: // %bb.0: // %entry50; CHECK-NEXT: sxth w8, w051; CHECK-NEXT: scvtf d0, w852; CHECK-NEXT: ret53entry:54 %c = sitofp i16 %a to double55 ret double %c56}57 58define double @utofp_i16_f64(i16 %a) {59; CHECK-LABEL: utofp_i16_f64:60; CHECK: // %bb.0: // %entry61; CHECK-NEXT: and w8, w0, #0xffff62; CHECK-NEXT: ucvtf d0, w863; CHECK-NEXT: ret64entry:65 %c = uitofp i16 %a to double66 ret double %c67}68 69define double @stofp_i8_f64(i8 %a) {70; CHECK-LABEL: stofp_i8_f64:71; CHECK: // %bb.0: // %entry72; CHECK-NEXT: sxtb w8, w073; CHECK-NEXT: scvtf d0, w874; CHECK-NEXT: ret75entry:76 %c = sitofp i8 %a to double77 ret double %c78}79 80define double @utofp_i8_f64(i8 %a) {81; CHECK-LABEL: utofp_i8_f64:82; CHECK: // %bb.0: // %entry83; CHECK-NEXT: and w8, w0, #0xff84; CHECK-NEXT: ucvtf d0, w885; CHECK-NEXT: ret86entry:87 %c = uitofp i8 %a to double88 ret double %c89}90 91define double @stofp_i128_f64(i128 %a) {92; CHECK-NOFP16-SD-LABEL: stofp_i128_f64:93; CHECK-NOFP16-SD: // %bb.0: // %entry94; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill95; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 1696; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -1697; CHECK-NOFP16-SD-NEXT: bl __floattidf98; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload99; CHECK-NOFP16-SD-NEXT: ret100;101; CHECK-FP16-SD-LABEL: stofp_i128_f64:102; CHECK-FP16-SD: // %bb.0: // %entry103; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill104; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16105; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16106; CHECK-FP16-SD-NEXT: bl __floattidf107; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload108; CHECK-FP16-SD-NEXT: ret109;110; CHECK-NOFP16-GI-LABEL: stofp_i128_f64:111; CHECK-NOFP16-GI: // %bb.0: // %entry112; CHECK-NOFP16-GI-NEXT: b __floattidf113;114; CHECK-FP16-GI-LABEL: stofp_i128_f64:115; CHECK-FP16-GI: // %bb.0: // %entry116; CHECK-FP16-GI-NEXT: b __floattidf117entry:118 %c = sitofp i128 %a to double119 ret double %c120}121 122define double @utofp_i128_f64(i128 %a) {123; CHECK-NOFP16-SD-LABEL: utofp_i128_f64:124; CHECK-NOFP16-SD: // %bb.0: // %entry125; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill126; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16127; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16128; CHECK-NOFP16-SD-NEXT: bl __floatuntidf129; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload130; CHECK-NOFP16-SD-NEXT: ret131;132; CHECK-FP16-SD-LABEL: utofp_i128_f64:133; CHECK-FP16-SD: // %bb.0: // %entry134; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill135; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16136; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16137; CHECK-FP16-SD-NEXT: bl __floatuntidf138; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload139; CHECK-FP16-SD-NEXT: ret140;141; CHECK-NOFP16-GI-LABEL: utofp_i128_f64:142; CHECK-NOFP16-GI: // %bb.0: // %entry143; CHECK-NOFP16-GI-NEXT: b __floatuntidf144;145; CHECK-FP16-GI-LABEL: utofp_i128_f64:146; CHECK-FP16-GI: // %bb.0: // %entry147; CHECK-FP16-GI-NEXT: b __floatuntidf148entry:149 %c = uitofp i128 %a to double150 ret double %c151}152 153define float @stofp_i64_f32(i64 %a) {154; CHECK-LABEL: stofp_i64_f32:155; CHECK: // %bb.0: // %entry156; CHECK-NEXT: scvtf s0, x0157; CHECK-NEXT: ret158entry:159 %c = sitofp i64 %a to float160 ret float %c161}162 163define float @utofp_i64_f32(i64 %a) {164; CHECK-LABEL: utofp_i64_f32:165; CHECK: // %bb.0: // %entry166; CHECK-NEXT: ucvtf s0, x0167; CHECK-NEXT: ret168entry:169 %c = uitofp i64 %a to float170 ret float %c171}172 173define float @stofp_i32_f32(i32 %a) {174; CHECK-LABEL: stofp_i32_f32:175; CHECK: // %bb.0: // %entry176; CHECK-NEXT: scvtf s0, w0177; CHECK-NEXT: ret178entry:179 %c = sitofp i32 %a to float180 ret float %c181}182 183define float @utofp_i32_f32(i32 %a) {184; CHECK-LABEL: utofp_i32_f32:185; CHECK: // %bb.0: // %entry186; CHECK-NEXT: ucvtf s0, w0187; CHECK-NEXT: ret188entry:189 %c = uitofp i32 %a to float190 ret float %c191}192 193define float @stofp_i16_f32(i16 %a) {194; CHECK-LABEL: stofp_i16_f32:195; CHECK: // %bb.0: // %entry196; CHECK-NEXT: sxth w8, w0197; CHECK-NEXT: scvtf s0, w8198; CHECK-NEXT: ret199entry:200 %c = sitofp i16 %a to float201 ret float %c202}203 204define float @utofp_i16_f32(i16 %a) {205; CHECK-LABEL: utofp_i16_f32:206; CHECK: // %bb.0: // %entry207; CHECK-NEXT: and w8, w0, #0xffff208; CHECK-NEXT: ucvtf s0, w8209; CHECK-NEXT: ret210entry:211 %c = uitofp i16 %a to float212 ret float %c213}214 215define float @stofp_i8_f32(i8 %a) {216; CHECK-LABEL: stofp_i8_f32:217; CHECK: // %bb.0: // %entry218; CHECK-NEXT: sxtb w8, w0219; CHECK-NEXT: scvtf s0, w8220; CHECK-NEXT: ret221entry:222 %c = sitofp i8 %a to float223 ret float %c224}225 226define float @utofp_i8_f32(i8 %a) {227; CHECK-LABEL: utofp_i8_f32:228; CHECK: // %bb.0: // %entry229; CHECK-NEXT: and w8, w0, #0xff230; CHECK-NEXT: ucvtf s0, w8231; CHECK-NEXT: ret232entry:233 %c = uitofp i8 %a to float234 ret float %c235}236 237define float @stofp_i128_f32(i128 %a) {238; CHECK-NOFP16-SD-LABEL: stofp_i128_f32:239; CHECK-NOFP16-SD: // %bb.0: // %entry240; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill241; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16242; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16243; CHECK-NOFP16-SD-NEXT: bl __floattisf244; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload245; CHECK-NOFP16-SD-NEXT: ret246;247; CHECK-FP16-SD-LABEL: stofp_i128_f32:248; CHECK-FP16-SD: // %bb.0: // %entry249; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill250; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16251; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16252; CHECK-FP16-SD-NEXT: bl __floattisf253; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload254; CHECK-FP16-SD-NEXT: ret255;256; CHECK-NOFP16-GI-LABEL: stofp_i128_f32:257; CHECK-NOFP16-GI: // %bb.0: // %entry258; CHECK-NOFP16-GI-NEXT: b __floattisf259;260; CHECK-FP16-GI-LABEL: stofp_i128_f32:261; CHECK-FP16-GI: // %bb.0: // %entry262; CHECK-FP16-GI-NEXT: b __floattisf263entry:264 %c = sitofp i128 %a to float265 ret float %c266}267 268define float @utofp_i128_f32(i128 %a) {269; CHECK-NOFP16-SD-LABEL: utofp_i128_f32:270; CHECK-NOFP16-SD: // %bb.0: // %entry271; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill272; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16273; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16274; CHECK-NOFP16-SD-NEXT: bl __floatuntisf275; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload276; CHECK-NOFP16-SD-NEXT: ret277;278; CHECK-FP16-SD-LABEL: utofp_i128_f32:279; CHECK-FP16-SD: // %bb.0: // %entry280; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill281; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16282; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16283; CHECK-FP16-SD-NEXT: bl __floatuntisf284; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload285; CHECK-FP16-SD-NEXT: ret286;287; CHECK-NOFP16-GI-LABEL: utofp_i128_f32:288; CHECK-NOFP16-GI: // %bb.0: // %entry289; CHECK-NOFP16-GI-NEXT: b __floatuntisf290;291; CHECK-FP16-GI-LABEL: utofp_i128_f32:292; CHECK-FP16-GI: // %bb.0: // %entry293; CHECK-FP16-GI-NEXT: b __floatuntisf294entry:295 %c = uitofp i128 %a to float296 ret float %c297}298 299define half @stofp_i64_f16(i64 %a) {300; CHECK-NOFP16-LABEL: stofp_i64_f16:301; CHECK-NOFP16: // %bb.0: // %entry302; CHECK-NOFP16-NEXT: scvtf s0, x0303; CHECK-NOFP16-NEXT: fcvt h0, s0304; CHECK-NOFP16-NEXT: ret305;306; CHECK-FP16-LABEL: stofp_i64_f16:307; CHECK-FP16: // %bb.0: // %entry308; CHECK-FP16-NEXT: scvtf h0, x0309; CHECK-FP16-NEXT: ret310entry:311 %c = sitofp i64 %a to half312 ret half %c313}314 315define half @utofp_i64_f16(i64 %a) {316; CHECK-NOFP16-LABEL: utofp_i64_f16:317; CHECK-NOFP16: // %bb.0: // %entry318; CHECK-NOFP16-NEXT: ucvtf s0, x0319; CHECK-NOFP16-NEXT: fcvt h0, s0320; CHECK-NOFP16-NEXT: ret321;322; CHECK-FP16-LABEL: utofp_i64_f16:323; CHECK-FP16: // %bb.0: // %entry324; CHECK-FP16-NEXT: ucvtf h0, x0325; CHECK-FP16-NEXT: ret326entry:327 %c = uitofp i64 %a to half328 ret half %c329}330 331define half @stofp_i32_f16(i32 %a) {332; CHECK-NOFP16-LABEL: stofp_i32_f16:333; CHECK-NOFP16: // %bb.0: // %entry334; CHECK-NOFP16-NEXT: scvtf s0, w0335; CHECK-NOFP16-NEXT: fcvt h0, s0336; CHECK-NOFP16-NEXT: ret337;338; CHECK-FP16-LABEL: stofp_i32_f16:339; CHECK-FP16: // %bb.0: // %entry340; CHECK-FP16-NEXT: scvtf h0, w0341; CHECK-FP16-NEXT: ret342entry:343 %c = sitofp i32 %a to half344 ret half %c345}346 347define half @utofp_i32_f16(i32 %a) {348; CHECK-NOFP16-LABEL: utofp_i32_f16:349; CHECK-NOFP16: // %bb.0: // %entry350; CHECK-NOFP16-NEXT: ucvtf s0, w0351; CHECK-NOFP16-NEXT: fcvt h0, s0352; CHECK-NOFP16-NEXT: ret353;354; CHECK-FP16-LABEL: utofp_i32_f16:355; CHECK-FP16: // %bb.0: // %entry356; CHECK-FP16-NEXT: ucvtf h0, w0357; CHECK-FP16-NEXT: ret358entry:359 %c = uitofp i32 %a to half360 ret half %c361}362 363define half @stofp_i16_f16(i16 %a) {364; CHECK-NOFP16-LABEL: stofp_i16_f16:365; CHECK-NOFP16: // %bb.0: // %entry366; CHECK-NOFP16-NEXT: sxth w8, w0367; CHECK-NOFP16-NEXT: scvtf s0, w8368; CHECK-NOFP16-NEXT: fcvt h0, s0369; CHECK-NOFP16-NEXT: ret370;371; CHECK-FP16-LABEL: stofp_i16_f16:372; CHECK-FP16: // %bb.0: // %entry373; CHECK-FP16-NEXT: sxth w8, w0374; CHECK-FP16-NEXT: scvtf h0, w8375; CHECK-FP16-NEXT: ret376entry:377 %c = sitofp i16 %a to half378 ret half %c379}380 381define half @utofp_i16_f16(i16 %a) {382; CHECK-NOFP16-LABEL: utofp_i16_f16:383; CHECK-NOFP16: // %bb.0: // %entry384; CHECK-NOFP16-NEXT: and w8, w0, #0xffff385; CHECK-NOFP16-NEXT: ucvtf s0, w8386; CHECK-NOFP16-NEXT: fcvt h0, s0387; CHECK-NOFP16-NEXT: ret388;389; CHECK-FP16-LABEL: utofp_i16_f16:390; CHECK-FP16: // %bb.0: // %entry391; CHECK-FP16-NEXT: and w8, w0, #0xffff392; CHECK-FP16-NEXT: ucvtf h0, w8393; CHECK-FP16-NEXT: ret394entry:395 %c = uitofp i16 %a to half396 ret half %c397}398 399define half @stofp_i8_f16(i8 %a) {400; CHECK-NOFP16-LABEL: stofp_i8_f16:401; CHECK-NOFP16: // %bb.0: // %entry402; CHECK-NOFP16-NEXT: sxtb w8, w0403; CHECK-NOFP16-NEXT: scvtf s0, w8404; CHECK-NOFP16-NEXT: fcvt h0, s0405; CHECK-NOFP16-NEXT: ret406;407; CHECK-FP16-LABEL: stofp_i8_f16:408; CHECK-FP16: // %bb.0: // %entry409; CHECK-FP16-NEXT: sxtb w8, w0410; CHECK-FP16-NEXT: scvtf h0, w8411; CHECK-FP16-NEXT: ret412entry:413 %c = sitofp i8 %a to half414 ret half %c415}416 417define half @utofp_i8_f16(i8 %a) {418; CHECK-NOFP16-LABEL: utofp_i8_f16:419; CHECK-NOFP16: // %bb.0: // %entry420; CHECK-NOFP16-NEXT: and w8, w0, #0xff421; CHECK-NOFP16-NEXT: ucvtf s0, w8422; CHECK-NOFP16-NEXT: fcvt h0, s0423; CHECK-NOFP16-NEXT: ret424;425; CHECK-FP16-LABEL: utofp_i8_f16:426; CHECK-FP16: // %bb.0: // %entry427; CHECK-FP16-NEXT: and w8, w0, #0xff428; CHECK-FP16-NEXT: ucvtf h0, w8429; CHECK-FP16-NEXT: ret430entry:431 %c = uitofp i8 %a to half432 ret half %c433}434 435define half @stofp_i128_f16(i128 %a) {436; CHECK-NOFP16-LABEL: stofp_i128_f16:437; CHECK-NOFP16: // %bb.0: // %entry438; CHECK-NOFP16-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill439; CHECK-NOFP16-NEXT: .cfi_def_cfa_offset 16440; CHECK-NOFP16-NEXT: .cfi_offset w30, -16441; CHECK-NOFP16-NEXT: bl __floattisf442; CHECK-NOFP16-NEXT: fcvt h0, s0443; CHECK-NOFP16-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload444; CHECK-NOFP16-NEXT: ret445;446; CHECK-FP16-SD-LABEL: stofp_i128_f16:447; CHECK-FP16-SD: // %bb.0: // %entry448; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill449; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16450; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16451; CHECK-FP16-SD-NEXT: bl __floattihf452; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload453; CHECK-FP16-SD-NEXT: ret454;455; CHECK-FP16-GI-LABEL: stofp_i128_f16:456; CHECK-FP16-GI: // %bb.0: // %entry457; CHECK-FP16-GI-NEXT: b __floattihf458entry:459 %c = sitofp i128 %a to half460 ret half %c461}462 463define half @utofp_i128_f16(i128 %a) {464; CHECK-NOFP16-LABEL: utofp_i128_f16:465; CHECK-NOFP16: // %bb.0: // %entry466; CHECK-NOFP16-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill467; CHECK-NOFP16-NEXT: .cfi_def_cfa_offset 16468; CHECK-NOFP16-NEXT: .cfi_offset w30, -16469; CHECK-NOFP16-NEXT: bl __floatuntisf470; CHECK-NOFP16-NEXT: fcvt h0, s0471; CHECK-NOFP16-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload472; CHECK-NOFP16-NEXT: ret473;474; CHECK-FP16-SD-LABEL: utofp_i128_f16:475; CHECK-FP16-SD: // %bb.0: // %entry476; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill477; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16478; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16479; CHECK-FP16-SD-NEXT: bl __floatuntihf480; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload481; CHECK-FP16-SD-NEXT: ret482;483; CHECK-FP16-GI-LABEL: utofp_i128_f16:484; CHECK-FP16-GI: // %bb.0: // %entry485; CHECK-FP16-GI-NEXT: b __floatuntihf486entry:487 %c = uitofp i128 %a to half488 ret half %c489}490 491define fp128 @stofp_i64_f128(i64 %a) {492; CHECK-NOFP16-SD-LABEL: stofp_i64_f128:493; CHECK-NOFP16-SD: // %bb.0: // %entry494; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill495; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16496; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16497; CHECK-NOFP16-SD-NEXT: bl __floatditf498; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload499; CHECK-NOFP16-SD-NEXT: ret500;501; CHECK-FP16-SD-LABEL: stofp_i64_f128:502; CHECK-FP16-SD: // %bb.0: // %entry503; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill504; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16505; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16506; CHECK-FP16-SD-NEXT: bl __floatditf507; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload508; CHECK-FP16-SD-NEXT: ret509;510; CHECK-NOFP16-GI-LABEL: stofp_i64_f128:511; CHECK-NOFP16-GI: // %bb.0: // %entry512; CHECK-NOFP16-GI-NEXT: b __floatditf513;514; CHECK-FP16-GI-LABEL: stofp_i64_f128:515; CHECK-FP16-GI: // %bb.0: // %entry516; CHECK-FP16-GI-NEXT: b __floatditf517entry:518 %c = sitofp i64 %a to fp128519 ret fp128 %c520}521 522define fp128 @utofp_i64_f128(i64 %a) {523; CHECK-NOFP16-SD-LABEL: utofp_i64_f128:524; CHECK-NOFP16-SD: // %bb.0: // %entry525; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill526; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16527; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16528; CHECK-NOFP16-SD-NEXT: bl __floatunditf529; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload530; CHECK-NOFP16-SD-NEXT: ret531;532; CHECK-FP16-SD-LABEL: utofp_i64_f128:533; CHECK-FP16-SD: // %bb.0: // %entry534; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill535; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16536; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16537; CHECK-FP16-SD-NEXT: bl __floatunditf538; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload539; CHECK-FP16-SD-NEXT: ret540;541; CHECK-NOFP16-GI-LABEL: utofp_i64_f128:542; CHECK-NOFP16-GI: // %bb.0: // %entry543; CHECK-NOFP16-GI-NEXT: b __floatunditf544;545; CHECK-FP16-GI-LABEL: utofp_i64_f128:546; CHECK-FP16-GI: // %bb.0: // %entry547; CHECK-FP16-GI-NEXT: b __floatunditf548entry:549 %c = uitofp i64 %a to fp128550 ret fp128 %c551}552 553define fp128 @stofp_i32_f128(i32 %a) {554; CHECK-NOFP16-SD-LABEL: stofp_i32_f128:555; CHECK-NOFP16-SD: // %bb.0: // %entry556; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill557; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16558; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16559; CHECK-NOFP16-SD-NEXT: bl __floatsitf560; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload561; CHECK-NOFP16-SD-NEXT: ret562;563; CHECK-FP16-SD-LABEL: stofp_i32_f128:564; CHECK-FP16-SD: // %bb.0: // %entry565; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill566; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16567; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16568; CHECK-FP16-SD-NEXT: bl __floatsitf569; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload570; CHECK-FP16-SD-NEXT: ret571;572; CHECK-NOFP16-GI-LABEL: stofp_i32_f128:573; CHECK-NOFP16-GI: // %bb.0: // %entry574; CHECK-NOFP16-GI-NEXT: b __floatsitf575;576; CHECK-FP16-GI-LABEL: stofp_i32_f128:577; CHECK-FP16-GI: // %bb.0: // %entry578; CHECK-FP16-GI-NEXT: b __floatsitf579entry:580 %c = sitofp i32 %a to fp128581 ret fp128 %c582}583 584define fp128 @utofp_i32_f128(i32 %a) {585; CHECK-NOFP16-SD-LABEL: utofp_i32_f128:586; CHECK-NOFP16-SD: // %bb.0: // %entry587; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill588; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16589; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16590; CHECK-NOFP16-SD-NEXT: bl __floatunsitf591; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload592; CHECK-NOFP16-SD-NEXT: ret593;594; CHECK-FP16-SD-LABEL: utofp_i32_f128:595; CHECK-FP16-SD: // %bb.0: // %entry596; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill597; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16598; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16599; CHECK-FP16-SD-NEXT: bl __floatunsitf600; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload601; CHECK-FP16-SD-NEXT: ret602;603; CHECK-NOFP16-GI-LABEL: utofp_i32_f128:604; CHECK-NOFP16-GI: // %bb.0: // %entry605; CHECK-NOFP16-GI-NEXT: b __floatunsitf606;607; CHECK-FP16-GI-LABEL: utofp_i32_f128:608; CHECK-FP16-GI: // %bb.0: // %entry609; CHECK-FP16-GI-NEXT: b __floatunsitf610entry:611 %c = uitofp i32 %a to fp128612 ret fp128 %c613}614 615define fp128 @stofp_i16_f128(i16 %a) {616; CHECK-NOFP16-SD-LABEL: stofp_i16_f128:617; CHECK-NOFP16-SD: // %bb.0: // %entry618; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill619; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16620; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16621; CHECK-NOFP16-SD-NEXT: sxth w0, w0622; CHECK-NOFP16-SD-NEXT: bl __floatsitf623; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload624; CHECK-NOFP16-SD-NEXT: ret625;626; CHECK-FP16-SD-LABEL: stofp_i16_f128:627; CHECK-FP16-SD: // %bb.0: // %entry628; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill629; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16630; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16631; CHECK-FP16-SD-NEXT: sxth w0, w0632; CHECK-FP16-SD-NEXT: bl __floatsitf633; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload634; CHECK-FP16-SD-NEXT: ret635;636; CHECK-NOFP16-GI-LABEL: stofp_i16_f128:637; CHECK-NOFP16-GI: // %bb.0: // %entry638; CHECK-NOFP16-GI-NEXT: sxth w0, w0639; CHECK-NOFP16-GI-NEXT: b __floatsitf640;641; CHECK-FP16-GI-LABEL: stofp_i16_f128:642; CHECK-FP16-GI: // %bb.0: // %entry643; CHECK-FP16-GI-NEXT: sxth w0, w0644; CHECK-FP16-GI-NEXT: b __floatsitf645entry:646 %c = sitofp i16 %a to fp128647 ret fp128 %c648}649 650define fp128 @utofp_i16_f128(i16 %a) {651; CHECK-NOFP16-SD-LABEL: utofp_i16_f128:652; CHECK-NOFP16-SD: // %bb.0: // %entry653; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill654; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16655; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16656; CHECK-NOFP16-SD-NEXT: and w0, w0, #0xffff657; CHECK-NOFP16-SD-NEXT: bl __floatunsitf658; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload659; CHECK-NOFP16-SD-NEXT: ret660;661; CHECK-FP16-SD-LABEL: utofp_i16_f128:662; CHECK-FP16-SD: // %bb.0: // %entry663; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill664; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16665; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16666; CHECK-FP16-SD-NEXT: and w0, w0, #0xffff667; CHECK-FP16-SD-NEXT: bl __floatunsitf668; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload669; CHECK-FP16-SD-NEXT: ret670;671; CHECK-NOFP16-GI-LABEL: utofp_i16_f128:672; CHECK-NOFP16-GI: // %bb.0: // %entry673; CHECK-NOFP16-GI-NEXT: and w0, w0, #0xffff674; CHECK-NOFP16-GI-NEXT: b __floatunsitf675;676; CHECK-FP16-GI-LABEL: utofp_i16_f128:677; CHECK-FP16-GI: // %bb.0: // %entry678; CHECK-FP16-GI-NEXT: and w0, w0, #0xffff679; CHECK-FP16-GI-NEXT: b __floatunsitf680entry:681 %c = uitofp i16 %a to fp128682 ret fp128 %c683}684 685define fp128 @stofp_i8_f128(i8 %a) {686; CHECK-NOFP16-SD-LABEL: stofp_i8_f128:687; CHECK-NOFP16-SD: // %bb.0: // %entry688; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill689; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16690; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16691; CHECK-NOFP16-SD-NEXT: sxtb w0, w0692; CHECK-NOFP16-SD-NEXT: bl __floatsitf693; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload694; CHECK-NOFP16-SD-NEXT: ret695;696; CHECK-FP16-SD-LABEL: stofp_i8_f128:697; CHECK-FP16-SD: // %bb.0: // %entry698; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill699; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16700; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16701; CHECK-FP16-SD-NEXT: sxtb w0, w0702; CHECK-FP16-SD-NEXT: bl __floatsitf703; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload704; CHECK-FP16-SD-NEXT: ret705;706; CHECK-NOFP16-GI-LABEL: stofp_i8_f128:707; CHECK-NOFP16-GI: // %bb.0: // %entry708; CHECK-NOFP16-GI-NEXT: sxtb w0, w0709; CHECK-NOFP16-GI-NEXT: b __floatsitf710;711; CHECK-FP16-GI-LABEL: stofp_i8_f128:712; CHECK-FP16-GI: // %bb.0: // %entry713; CHECK-FP16-GI-NEXT: sxtb w0, w0714; CHECK-FP16-GI-NEXT: b __floatsitf715entry:716 %c = sitofp i8 %a to fp128717 ret fp128 %c718}719 720define fp128 @utofp_i8_f128(i8 %a) {721; CHECK-NOFP16-SD-LABEL: utofp_i8_f128:722; CHECK-NOFP16-SD: // %bb.0: // %entry723; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill724; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16725; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16726; CHECK-NOFP16-SD-NEXT: and w0, w0, #0xff727; CHECK-NOFP16-SD-NEXT: bl __floatunsitf728; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload729; CHECK-NOFP16-SD-NEXT: ret730;731; CHECK-FP16-SD-LABEL: utofp_i8_f128:732; CHECK-FP16-SD: // %bb.0: // %entry733; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill734; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16735; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16736; CHECK-FP16-SD-NEXT: and w0, w0, #0xff737; CHECK-FP16-SD-NEXT: bl __floatunsitf738; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload739; CHECK-FP16-SD-NEXT: ret740;741; CHECK-NOFP16-GI-LABEL: utofp_i8_f128:742; CHECK-NOFP16-GI: // %bb.0: // %entry743; CHECK-NOFP16-GI-NEXT: and w0, w0, #0xff744; CHECK-NOFP16-GI-NEXT: b __floatunsitf745;746; CHECK-FP16-GI-LABEL: utofp_i8_f128:747; CHECK-FP16-GI: // %bb.0: // %entry748; CHECK-FP16-GI-NEXT: and w0, w0, #0xff749; CHECK-FP16-GI-NEXT: b __floatunsitf750entry:751 %c = uitofp i8 %a to fp128752 ret fp128 %c753}754 755define fp128 @stofp_i128_f128(i128 %a) {756; CHECK-NOFP16-SD-LABEL: stofp_i128_f128:757; CHECK-NOFP16-SD: // %bb.0: // %entry758; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill759; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16760; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16761; CHECK-NOFP16-SD-NEXT: bl __floattitf762; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload763; CHECK-NOFP16-SD-NEXT: ret764;765; CHECK-FP16-SD-LABEL: stofp_i128_f128:766; CHECK-FP16-SD: // %bb.0: // %entry767; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill768; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16769; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16770; CHECK-FP16-SD-NEXT: bl __floattitf771; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload772; CHECK-FP16-SD-NEXT: ret773;774; CHECK-NOFP16-GI-LABEL: stofp_i128_f128:775; CHECK-NOFP16-GI: // %bb.0: // %entry776; CHECK-NOFP16-GI-NEXT: b __floattitf777;778; CHECK-FP16-GI-LABEL: stofp_i128_f128:779; CHECK-FP16-GI: // %bb.0: // %entry780; CHECK-FP16-GI-NEXT: b __floattitf781entry:782 %c = sitofp i128 %a to fp128783 ret fp128 %c784}785 786define fp128 @utofp_i128_f128(i128 %a) {787; CHECK-NOFP16-SD-LABEL: utofp_i128_f128:788; CHECK-NOFP16-SD: // %bb.0: // %entry789; CHECK-NOFP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill790; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 16791; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -16792; CHECK-NOFP16-SD-NEXT: bl __floatuntitf793; CHECK-NOFP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload794; CHECK-NOFP16-SD-NEXT: ret795;796; CHECK-FP16-SD-LABEL: utofp_i128_f128:797; CHECK-FP16-SD: // %bb.0: // %entry798; CHECK-FP16-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill799; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 16800; CHECK-FP16-SD-NEXT: .cfi_offset w30, -16801; CHECK-FP16-SD-NEXT: bl __floatuntitf802; CHECK-FP16-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload803; CHECK-FP16-SD-NEXT: ret804;805; CHECK-NOFP16-GI-LABEL: utofp_i128_f128:806; CHECK-NOFP16-GI: // %bb.0: // %entry807; CHECK-NOFP16-GI-NEXT: b __floatuntitf808;809; CHECK-FP16-GI-LABEL: utofp_i128_f128:810; CHECK-FP16-GI: // %bb.0: // %entry811; CHECK-FP16-GI-NEXT: b __floatuntitf812entry:813 %c = uitofp i128 %a to fp128814 ret fp128 %c815}816 817define double @stofp_load_i64_f64(ptr %p) {818; CHECK-LABEL: stofp_load_i64_f64:819; CHECK: // %bb.0: // %entry820; CHECK-NEXT: ldr d0, [x0]821; CHECK-NEXT: scvtf d0, d0822; CHECK-NEXT: ret823entry:824 %a = load i64, ptr %p825 %c = sitofp i64 %a to double826 ret double %c827}828 829define double @utofp_load_i64_f64(ptr %p) {830; CHECK-LABEL: utofp_load_i64_f64:831; CHECK: // %bb.0: // %entry832; CHECK-NEXT: ldr d0, [x0]833; CHECK-NEXT: ucvtf d0, d0834; CHECK-NEXT: ret835entry:836 %a = load i64, ptr %p837 %c = uitofp i64 %a to double838 ret double %c839}840 841define double @stofp_load_i32_f64(ptr %p) {842; CHECK-LABEL: stofp_load_i32_f64:843; CHECK: // %bb.0: // %entry844; CHECK-NEXT: ldr w8, [x0]845; CHECK-NEXT: scvtf d0, w8846; CHECK-NEXT: ret847entry:848 %a = load i32, ptr %p849 %c = sitofp i32 %a to double850 ret double %c851}852 853define double @utofp_load_i32_f64(ptr %p) {854; CHECK-LABEL: utofp_load_i32_f64:855; CHECK: // %bb.0: // %entry856; CHECK-NEXT: ldr s0, [x0]857; CHECK-NEXT: ucvtf d0, d0858; CHECK-NEXT: ret859entry:860 %a = load i32, ptr %p861 %c = uitofp i32 %a to double862 ret double %c863}864 865define double @stofp_load_i16_f64(ptr %p) {866; CHECK-LABEL: stofp_load_i16_f64:867; CHECK: // %bb.0: // %entry868; CHECK-NEXT: ldrsh w8, [x0]869; CHECK-NEXT: scvtf d0, w8870; CHECK-NEXT: ret871entry:872 %a = load i16, ptr %p873 %c = sitofp i16 %a to double874 ret double %c875}876 877define double @utofp_load_i16_f64(ptr %p) {878; CHECK-LABEL: utofp_load_i16_f64:879; CHECK: // %bb.0: // %entry880; CHECK-NEXT: ldr h0, [x0]881; CHECK-NEXT: ucvtf d0, d0882; CHECK-NEXT: ret883entry:884 %a = load i16, ptr %p885 %c = uitofp i16 %a to double886 ret double %c887}888 889define double @stofp_load_i8_f64(ptr %p) {890; CHECK-LABEL: stofp_load_i8_f64:891; CHECK: // %bb.0: // %entry892; CHECK-NEXT: ldrsb w8, [x0]893; CHECK-NEXT: scvtf d0, w8894; CHECK-NEXT: ret895entry:896 %a = load i8, ptr %p897 %c = sitofp i8 %a to double898 ret double %c899}900 901define double @utofp_load_i8_f64(ptr %p) {902; CHECK-LABEL: utofp_load_i8_f64:903; CHECK: // %bb.0: // %entry904; CHECK-NEXT: ldr b0, [x0]905; CHECK-NEXT: ucvtf d0, d0906; CHECK-NEXT: ret907entry:908 %a = load i8, ptr %p909 %c = uitofp i8 %a to double910 ret double %c911}912 913define float @stofp_load_i64_f32(ptr %p) {914; CHECK-LABEL: stofp_load_i64_f32:915; CHECK: // %bb.0: // %entry916; CHECK-NEXT: ldr x8, [x0]917; CHECK-NEXT: scvtf s0, x8918; CHECK-NEXT: ret919entry:920 %a = load i64, ptr %p921 %c = sitofp i64 %a to float922 ret float %c923}924 925define float @utofp_load_i64_f32(ptr %p) {926; CHECK-LABEL: utofp_load_i64_f32:927; CHECK: // %bb.0: // %entry928; CHECK-NEXT: ldr x8, [x0]929; CHECK-NEXT: ucvtf s0, x8930; CHECK-NEXT: ret931entry:932 %a = load i64, ptr %p933 %c = uitofp i64 %a to float934 ret float %c935}936 937define float @stofp_load_i32_f32(ptr %p) {938; CHECK-LABEL: stofp_load_i32_f32:939; CHECK: // %bb.0: // %entry940; CHECK-NEXT: ldr s0, [x0]941; CHECK-NEXT: scvtf s0, s0942; CHECK-NEXT: ret943entry:944 %a = load i32, ptr %p945 %c = sitofp i32 %a to float946 ret float %c947}948 949define float @utofp_load_i32_f32(ptr %p) {950; CHECK-LABEL: utofp_load_i32_f32:951; CHECK: // %bb.0: // %entry952; CHECK-NEXT: ldr s0, [x0]953; CHECK-NEXT: ucvtf s0, s0954; CHECK-NEXT: ret955entry:956 %a = load i32, ptr %p957 %c = uitofp i32 %a to float958 ret float %c959}960 961define float @stofp_load_i16_f32(ptr %p) {962; CHECK-LABEL: stofp_load_i16_f32:963; CHECK: // %bb.0: // %entry964; CHECK-NEXT: ldrsh w8, [x0]965; CHECK-NEXT: scvtf s0, w8966; CHECK-NEXT: ret967entry:968 %a = load i16, ptr %p969 %c = sitofp i16 %a to float970 ret float %c971}972 973define float @utofp_load_i16_f32(ptr %p) {974; CHECK-LABEL: utofp_load_i16_f32:975; CHECK: // %bb.0: // %entry976; CHECK-NEXT: ldr h0, [x0]977; CHECK-NEXT: ucvtf s0, s0978; CHECK-NEXT: ret979entry:980 %a = load i16, ptr %p981 %c = uitofp i16 %a to float982 ret float %c983}984 985define float @stofp_load_i8_f32(ptr %p) {986; CHECK-LABEL: stofp_load_i8_f32:987; CHECK: // %bb.0: // %entry988; CHECK-NEXT: ldrsb w8, [x0]989; CHECK-NEXT: scvtf s0, w8990; CHECK-NEXT: ret991entry:992 %a = load i8, ptr %p993 %c = sitofp i8 %a to float994 ret float %c995}996 997define float @utofp_load_i8_f32(ptr %p) {998; CHECK-LABEL: utofp_load_i8_f32:999; CHECK: // %bb.0: // %entry1000; CHECK-NEXT: ldr b0, [x0]1001; CHECK-NEXT: ucvtf s0, s01002; CHECK-NEXT: ret1003entry:1004 %a = load i8, ptr %p1005 %c = uitofp i8 %a to float1006 ret float %c1007}1008 1009define half @stofp_load_i64_f16(ptr %p) {1010; CHECK-NOFP16-LABEL: stofp_load_i64_f16:1011; CHECK-NOFP16: // %bb.0: // %entry1012; CHECK-NOFP16-NEXT: ldr x8, [x0]1013; CHECK-NOFP16-NEXT: scvtf s0, x81014; CHECK-NOFP16-NEXT: fcvt h0, s01015; CHECK-NOFP16-NEXT: ret1016;1017; CHECK-FP16-LABEL: stofp_load_i64_f16:1018; CHECK-FP16: // %bb.0: // %entry1019; CHECK-FP16-NEXT: ldr x8, [x0]1020; CHECK-FP16-NEXT: scvtf h0, x81021; CHECK-FP16-NEXT: ret1022entry:1023 %a = load i64, ptr %p1024 %c = sitofp i64 %a to half1025 ret half %c1026}1027 1028define half @utofp_load_i64_f16(ptr %p) {1029; CHECK-NOFP16-LABEL: utofp_load_i64_f16:1030; CHECK-NOFP16: // %bb.0: // %entry1031; CHECK-NOFP16-NEXT: ldr x8, [x0]1032; CHECK-NOFP16-NEXT: ucvtf s0, x81033; CHECK-NOFP16-NEXT: fcvt h0, s01034; CHECK-NOFP16-NEXT: ret1035;1036; CHECK-FP16-LABEL: utofp_load_i64_f16:1037; CHECK-FP16: // %bb.0: // %entry1038; CHECK-FP16-NEXT: ldr x8, [x0]1039; CHECK-FP16-NEXT: ucvtf h0, x81040; CHECK-FP16-NEXT: ret1041entry:1042 %a = load i64, ptr %p1043 %c = uitofp i64 %a to half1044 ret half %c1045}1046 1047define half @stofp_load_i32_f16(ptr %p) {1048; CHECK-NOFP16-LABEL: stofp_load_i32_f16:1049; CHECK-NOFP16: // %bb.0: // %entry1050; CHECK-NOFP16-NEXT: ldr s0, [x0]1051; CHECK-NOFP16-NEXT: scvtf s0, s01052; CHECK-NOFP16-NEXT: fcvt h0, s01053; CHECK-NOFP16-NEXT: ret1054;1055; CHECK-FP16-LABEL: stofp_load_i32_f16:1056; CHECK-FP16: // %bb.0: // %entry1057; CHECK-FP16-NEXT: ldr w8, [x0]1058; CHECK-FP16-NEXT: scvtf h0, w81059; CHECK-FP16-NEXT: ret1060entry:1061 %a = load i32, ptr %p1062 %c = sitofp i32 %a to half1063 ret half %c1064}1065 1066define half @utofp_load_i32_f16(ptr %p) {1067; CHECK-NOFP16-LABEL: utofp_load_i32_f16:1068; CHECK-NOFP16: // %bb.0: // %entry1069; CHECK-NOFP16-NEXT: ldr s0, [x0]1070; CHECK-NOFP16-NEXT: ucvtf s0, s01071; CHECK-NOFP16-NEXT: fcvt h0, s01072; CHECK-NOFP16-NEXT: ret1073;1074; CHECK-FP16-LABEL: utofp_load_i32_f16:1075; CHECK-FP16: // %bb.0: // %entry1076; CHECK-FP16-NEXT: ldr w8, [x0]1077; CHECK-FP16-NEXT: ucvtf h0, w81078; CHECK-FP16-NEXT: ret1079entry:1080 %a = load i32, ptr %p1081 %c = uitofp i32 %a to half1082 ret half %c1083}1084 1085define half @stofp_load_i16_f16(ptr %p) {1086; CHECK-NOFP16-LABEL: stofp_load_i16_f16:1087; CHECK-NOFP16: // %bb.0: // %entry1088; CHECK-NOFP16-NEXT: ldrsh w8, [x0]1089; CHECK-NOFP16-NEXT: scvtf s0, w81090; CHECK-NOFP16-NEXT: fcvt h0, s01091; CHECK-NOFP16-NEXT: ret1092;1093; CHECK-FP16-SD-LABEL: stofp_load_i16_f16:1094; CHECK-FP16-SD: // %bb.0: // %entry1095; CHECK-FP16-SD-NEXT: ldr h0, [x0]1096; CHECK-FP16-SD-NEXT: scvtf h0, h01097; CHECK-FP16-SD-NEXT: ret1098;1099; CHECK-FP16-GI-LABEL: stofp_load_i16_f16:1100; CHECK-FP16-GI: // %bb.0: // %entry1101; CHECK-FP16-GI-NEXT: ldrsh w8, [x0]1102; CHECK-FP16-GI-NEXT: scvtf h0, w81103; CHECK-FP16-GI-NEXT: ret1104entry:1105 %a = load i16, ptr %p1106 %c = sitofp i16 %a to half1107 ret half %c1108}1109 1110define half @utofp_load_i16_f16(ptr %p) {1111; CHECK-NOFP16-LABEL: utofp_load_i16_f16:1112; CHECK-NOFP16: // %bb.0: // %entry1113; CHECK-NOFP16-NEXT: ldr h0, [x0]1114; CHECK-NOFP16-NEXT: ucvtf s0, s01115; CHECK-NOFP16-NEXT: fcvt h0, s01116; CHECK-NOFP16-NEXT: ret1117;1118; CHECK-FP16-SD-LABEL: utofp_load_i16_f16:1119; CHECK-FP16-SD: // %bb.0: // %entry1120; CHECK-FP16-SD-NEXT: ldr h0, [x0]1121; CHECK-FP16-SD-NEXT: ucvtf h0, h01122; CHECK-FP16-SD-NEXT: ret1123;1124; CHECK-FP16-GI-LABEL: utofp_load_i16_f16:1125; CHECK-FP16-GI: // %bb.0: // %entry1126; CHECK-FP16-GI-NEXT: ldrh w8, [x0]1127; CHECK-FP16-GI-NEXT: ucvtf h0, w81128; CHECK-FP16-GI-NEXT: ret1129entry:1130 %a = load i16, ptr %p1131 %c = uitofp i16 %a to half1132 ret half %c1133}1134 1135define half @stofp_load_i8_f16(ptr %p) {1136; CHECK-NOFP16-LABEL: stofp_load_i8_f16:1137; CHECK-NOFP16: // %bb.0: // %entry1138; CHECK-NOFP16-NEXT: ldrsb w8, [x0]1139; CHECK-NOFP16-NEXT: scvtf s0, w81140; CHECK-NOFP16-NEXT: fcvt h0, s01141; CHECK-NOFP16-NEXT: ret1142;1143; CHECK-FP16-LABEL: stofp_load_i8_f16:1144; CHECK-FP16: // %bb.0: // %entry1145; CHECK-FP16-NEXT: ldrsb w8, [x0]1146; CHECK-FP16-NEXT: scvtf h0, w81147; CHECK-FP16-NEXT: ret1148entry:1149 %a = load i8, ptr %p1150 %c = sitofp i8 %a to half1151 ret half %c1152}1153 1154define half @utofp_load_i8_f16(ptr %p) {1155; CHECK-NOFP16-LABEL: utofp_load_i8_f16:1156; CHECK-NOFP16: // %bb.0: // %entry1157; CHECK-NOFP16-NEXT: ldr b0, [x0]1158; CHECK-NOFP16-NEXT: ucvtf s0, s01159; CHECK-NOFP16-NEXT: fcvt h0, s01160; CHECK-NOFP16-NEXT: ret1161;1162; CHECK-FP16-LABEL: utofp_load_i8_f16:1163; CHECK-FP16: // %bb.0: // %entry1164; CHECK-FP16-NEXT: ldr b0, [x0]1165; CHECK-FP16-NEXT: ucvtf h0, h01166; CHECK-FP16-NEXT: ret1167entry:1168 %a = load i8, ptr %p1169 %c = uitofp i8 %a to half1170 ret half %c1171}1172 1173define <2 x double> @stofp_v2i64_v2f64(<2 x i64> %a) {1174; CHECK-LABEL: stofp_v2i64_v2f64:1175; CHECK: // %bb.0: // %entry1176; CHECK-NEXT: scvtf v0.2d, v0.2d1177; CHECK-NEXT: ret1178entry:1179 %c = sitofp <2 x i64> %a to <2 x double>1180 ret <2 x double> %c1181}1182 1183define <2 x double> @utofp_v2i64_v2f64(<2 x i64> %a) {1184; CHECK-LABEL: utofp_v2i64_v2f64:1185; CHECK: // %bb.0: // %entry1186; CHECK-NEXT: ucvtf v0.2d, v0.2d1187; CHECK-NEXT: ret1188entry:1189 %c = uitofp <2 x i64> %a to <2 x double>1190 ret <2 x double> %c1191}1192 1193define <3 x double> @stofp_v3i64_v3f64(<3 x i64> %a) {1194; CHECK-NOFP16-SD-LABEL: stofp_v3i64_v3f64:1195; CHECK-NOFP16-SD: // %bb.0: // %entry1196; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q01197; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 def $q11198; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 def $q21199; CHECK-NOFP16-SD-NEXT: mov v0.d[1], v1.d[0]1200; CHECK-NOFP16-SD-NEXT: scvtf v2.2d, v2.2d1201; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q21202; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v0.2d1203; CHECK-NOFP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #81204; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q01205; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q11206; CHECK-NOFP16-SD-NEXT: ret1207;1208; CHECK-FP16-SD-LABEL: stofp_v3i64_v3f64:1209; CHECK-FP16-SD: // %bb.0: // %entry1210; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q01211; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 def $q11212; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 def $q21213; CHECK-FP16-SD-NEXT: mov v0.d[1], v1.d[0]1214; CHECK-FP16-SD-NEXT: scvtf v2.2d, v2.2d1215; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q21216; CHECK-FP16-SD-NEXT: scvtf v0.2d, v0.2d1217; CHECK-FP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #81218; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q01219; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q11220; CHECK-FP16-SD-NEXT: ret1221;1222; CHECK-NOFP16-GI-LABEL: stofp_v3i64_v3f64:1223; CHECK-NOFP16-GI: // %bb.0: // %entry1224; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q01225; CHECK-NOFP16-GI-NEXT: // kill: def $d1 killed $d1 def $q11226; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 def $q21227; CHECK-NOFP16-GI-NEXT: mov v0.d[1], v1.d[0]1228; CHECK-NOFP16-GI-NEXT: scvtf v2.2d, v2.2d1229; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q21230; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v0.2d1231; CHECK-NOFP16-GI-NEXT: mov d1, v0.d[1]1232; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q01233; CHECK-NOFP16-GI-NEXT: ret1234;1235; CHECK-FP16-GI-LABEL: stofp_v3i64_v3f64:1236; CHECK-FP16-GI: // %bb.0: // %entry1237; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q01238; CHECK-FP16-GI-NEXT: // kill: def $d1 killed $d1 def $q11239; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 def $q21240; CHECK-FP16-GI-NEXT: mov v0.d[1], v1.d[0]1241; CHECK-FP16-GI-NEXT: scvtf v2.2d, v2.2d1242; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q21243; CHECK-FP16-GI-NEXT: scvtf v0.2d, v0.2d1244; CHECK-FP16-GI-NEXT: mov d1, v0.d[1]1245; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q01246; CHECK-FP16-GI-NEXT: ret1247entry:1248 %c = sitofp <3 x i64> %a to <3 x double>1249 ret <3 x double> %c1250}1251 1252define <3 x double> @utofp_v3i64_v3f64(<3 x i64> %a) {1253; CHECK-NOFP16-SD-LABEL: utofp_v3i64_v3f64:1254; CHECK-NOFP16-SD: // %bb.0: // %entry1255; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q01256; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 def $q11257; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 def $q21258; CHECK-NOFP16-SD-NEXT: mov v0.d[1], v1.d[0]1259; CHECK-NOFP16-SD-NEXT: ucvtf v2.2d, v2.2d1260; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q21261; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v0.2d1262; CHECK-NOFP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #81263; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q01264; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q11265; CHECK-NOFP16-SD-NEXT: ret1266;1267; CHECK-FP16-SD-LABEL: utofp_v3i64_v3f64:1268; CHECK-FP16-SD: // %bb.0: // %entry1269; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q01270; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 def $q11271; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 def $q21272; CHECK-FP16-SD-NEXT: mov v0.d[1], v1.d[0]1273; CHECK-FP16-SD-NEXT: ucvtf v2.2d, v2.2d1274; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q21275; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v0.2d1276; CHECK-FP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #81277; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q01278; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q11279; CHECK-FP16-SD-NEXT: ret1280;1281; CHECK-NOFP16-GI-LABEL: utofp_v3i64_v3f64:1282; CHECK-NOFP16-GI: // %bb.0: // %entry1283; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q01284; CHECK-NOFP16-GI-NEXT: // kill: def $d1 killed $d1 def $q11285; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 def $q21286; CHECK-NOFP16-GI-NEXT: mov v0.d[1], v1.d[0]1287; CHECK-NOFP16-GI-NEXT: ucvtf v2.2d, v2.2d1288; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q21289; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v0.2d1290; CHECK-NOFP16-GI-NEXT: mov d1, v0.d[1]1291; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q01292; CHECK-NOFP16-GI-NEXT: ret1293;1294; CHECK-FP16-GI-LABEL: utofp_v3i64_v3f64:1295; CHECK-FP16-GI: // %bb.0: // %entry1296; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q01297; CHECK-FP16-GI-NEXT: // kill: def $d1 killed $d1 def $q11298; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 def $q21299; CHECK-FP16-GI-NEXT: mov v0.d[1], v1.d[0]1300; CHECK-FP16-GI-NEXT: ucvtf v2.2d, v2.2d1301; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q21302; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v0.2d1303; CHECK-FP16-GI-NEXT: mov d1, v0.d[1]1304; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q01305; CHECK-FP16-GI-NEXT: ret1306entry:1307 %c = uitofp <3 x i64> %a to <3 x double>1308 ret <3 x double> %c1309}1310 1311define <4 x double> @stofp_v4i64_v4f64(<4 x i64> %a) {1312; CHECK-LABEL: stofp_v4i64_v4f64:1313; CHECK: // %bb.0: // %entry1314; CHECK-NEXT: scvtf v0.2d, v0.2d1315; CHECK-NEXT: scvtf v1.2d, v1.2d1316; CHECK-NEXT: ret1317entry:1318 %c = sitofp <4 x i64> %a to <4 x double>1319 ret <4 x double> %c1320}1321 1322define <4 x double> @utofp_v4i64_v4f64(<4 x i64> %a) {1323; CHECK-LABEL: utofp_v4i64_v4f64:1324; CHECK: // %bb.0: // %entry1325; CHECK-NEXT: ucvtf v0.2d, v0.2d1326; CHECK-NEXT: ucvtf v1.2d, v1.2d1327; CHECK-NEXT: ret1328entry:1329 %c = uitofp <4 x i64> %a to <4 x double>1330 ret <4 x double> %c1331}1332 1333define <2 x double> @stofp_v2i32_v2f64(<2 x i32> %a) {1334; CHECK-LABEL: stofp_v2i32_v2f64:1335; CHECK: // %bb.0: // %entry1336; CHECK-NEXT: sshll v0.2d, v0.2s, #01337; CHECK-NEXT: scvtf v0.2d, v0.2d1338; CHECK-NEXT: ret1339entry:1340 %c = sitofp <2 x i32> %a to <2 x double>1341 ret <2 x double> %c1342}1343 1344define <2 x double> @utofp_v2i32_v2f64(<2 x i32> %a) {1345; CHECK-LABEL: utofp_v2i32_v2f64:1346; CHECK: // %bb.0: // %entry1347; CHECK-NEXT: ushll v0.2d, v0.2s, #01348; CHECK-NEXT: ucvtf v0.2d, v0.2d1349; CHECK-NEXT: ret1350entry:1351 %c = uitofp <2 x i32> %a to <2 x double>1352 ret <2 x double> %c1353}1354 1355define <3 x double> @stofp_v3i32_v3f64(<3 x i32> %a) {1356; CHECK-NOFP16-SD-LABEL: stofp_v3i32_v3f64:1357; CHECK-NOFP16-SD: // %bb.0: // %entry1358; CHECK-NOFP16-SD-NEXT: sshll v1.2d, v0.2s, #01359; CHECK-NOFP16-SD-NEXT: sshll2 v0.2d, v0.4s, #01360; CHECK-NOFP16-SD-NEXT: scvtf v3.2d, v1.2d1361; CHECK-NOFP16-SD-NEXT: scvtf v2.2d, v0.2d1362; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q21363; CHECK-NOFP16-SD-NEXT: fmov d0, d31364; CHECK-NOFP16-SD-NEXT: ext v1.16b, v3.16b, v3.16b, #81365; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q11366; CHECK-NOFP16-SD-NEXT: ret1367;1368; CHECK-FP16-SD-LABEL: stofp_v3i32_v3f64:1369; CHECK-FP16-SD: // %bb.0: // %entry1370; CHECK-FP16-SD-NEXT: sshll v1.2d, v0.2s, #01371; CHECK-FP16-SD-NEXT: sshll2 v0.2d, v0.4s, #01372; CHECK-FP16-SD-NEXT: scvtf v3.2d, v1.2d1373; CHECK-FP16-SD-NEXT: scvtf v2.2d, v0.2d1374; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q21375; CHECK-FP16-SD-NEXT: fmov d0, d31376; CHECK-FP16-SD-NEXT: ext v1.16b, v3.16b, v3.16b, #81377; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q11378; CHECK-FP16-SD-NEXT: ret1379;1380; CHECK-NOFP16-GI-LABEL: stofp_v3i32_v3f64:1381; CHECK-NOFP16-GI: // %bb.0: // %entry1382; CHECK-NOFP16-GI-NEXT: sshll v1.2d, v0.2s, #01383; CHECK-NOFP16-GI-NEXT: sshll2 v0.2d, v0.4s, #01384; CHECK-NOFP16-GI-NEXT: scvtf v3.2d, v1.2d1385; CHECK-NOFP16-GI-NEXT: scvtf v2.2d, v0.2d1386; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q21387; CHECK-NOFP16-GI-NEXT: mov d1, v3.d[1]1388; CHECK-NOFP16-GI-NEXT: fmov d0, d31389; CHECK-NOFP16-GI-NEXT: ret1390;1391; CHECK-FP16-GI-LABEL: stofp_v3i32_v3f64:1392; CHECK-FP16-GI: // %bb.0: // %entry1393; CHECK-FP16-GI-NEXT: sshll v1.2d, v0.2s, #01394; CHECK-FP16-GI-NEXT: sshll2 v0.2d, v0.4s, #01395; CHECK-FP16-GI-NEXT: scvtf v3.2d, v1.2d1396; CHECK-FP16-GI-NEXT: scvtf v2.2d, v0.2d1397; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q21398; CHECK-FP16-GI-NEXT: mov d1, v3.d[1]1399; CHECK-FP16-GI-NEXT: fmov d0, d31400; CHECK-FP16-GI-NEXT: ret1401entry:1402 %c = sitofp <3 x i32> %a to <3 x double>1403 ret <3 x double> %c1404}1405 1406define <3 x double> @utofp_v3i32_v3f64(<3 x i32> %a) {1407; CHECK-NOFP16-SD-LABEL: utofp_v3i32_v3f64:1408; CHECK-NOFP16-SD: // %bb.0: // %entry1409; CHECK-NOFP16-SD-NEXT: ushll v1.2d, v0.2s, #01410; CHECK-NOFP16-SD-NEXT: ushll2 v0.2d, v0.4s, #01411; CHECK-NOFP16-SD-NEXT: ucvtf v3.2d, v1.2d1412; CHECK-NOFP16-SD-NEXT: ucvtf v2.2d, v0.2d1413; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q21414; CHECK-NOFP16-SD-NEXT: fmov d0, d31415; CHECK-NOFP16-SD-NEXT: ext v1.16b, v3.16b, v3.16b, #81416; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q11417; CHECK-NOFP16-SD-NEXT: ret1418;1419; CHECK-FP16-SD-LABEL: utofp_v3i32_v3f64:1420; CHECK-FP16-SD: // %bb.0: // %entry1421; CHECK-FP16-SD-NEXT: ushll v1.2d, v0.2s, #01422; CHECK-FP16-SD-NEXT: ushll2 v0.2d, v0.4s, #01423; CHECK-FP16-SD-NEXT: ucvtf v3.2d, v1.2d1424; CHECK-FP16-SD-NEXT: ucvtf v2.2d, v0.2d1425; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q21426; CHECK-FP16-SD-NEXT: fmov d0, d31427; CHECK-FP16-SD-NEXT: ext v1.16b, v3.16b, v3.16b, #81428; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q11429; CHECK-FP16-SD-NEXT: ret1430;1431; CHECK-NOFP16-GI-LABEL: utofp_v3i32_v3f64:1432; CHECK-NOFP16-GI: // %bb.0: // %entry1433; CHECK-NOFP16-GI-NEXT: ushll v1.2d, v0.2s, #01434; CHECK-NOFP16-GI-NEXT: ushll2 v0.2d, v0.4s, #01435; CHECK-NOFP16-GI-NEXT: ucvtf v3.2d, v1.2d1436; CHECK-NOFP16-GI-NEXT: ucvtf v2.2d, v0.2d1437; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q21438; CHECK-NOFP16-GI-NEXT: mov d1, v3.d[1]1439; CHECK-NOFP16-GI-NEXT: fmov d0, d31440; CHECK-NOFP16-GI-NEXT: ret1441;1442; CHECK-FP16-GI-LABEL: utofp_v3i32_v3f64:1443; CHECK-FP16-GI: // %bb.0: // %entry1444; CHECK-FP16-GI-NEXT: ushll v1.2d, v0.2s, #01445; CHECK-FP16-GI-NEXT: ushll2 v0.2d, v0.4s, #01446; CHECK-FP16-GI-NEXT: ucvtf v3.2d, v1.2d1447; CHECK-FP16-GI-NEXT: ucvtf v2.2d, v0.2d1448; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q21449; CHECK-FP16-GI-NEXT: mov d1, v3.d[1]1450; CHECK-FP16-GI-NEXT: fmov d0, d31451; CHECK-FP16-GI-NEXT: ret1452entry:1453 %c = uitofp <3 x i32> %a to <3 x double>1454 ret <3 x double> %c1455}1456 1457define <4 x double> @stofp_v4i32_v4f64(<4 x i32> %a) {1458; CHECK-NOFP16-SD-LABEL: stofp_v4i32_v4f64:1459; CHECK-NOFP16-SD: // %bb.0: // %entry1460; CHECK-NOFP16-SD-NEXT: sshll2 v1.2d, v0.4s, #01461; CHECK-NOFP16-SD-NEXT: sshll v0.2d, v0.2s, #01462; CHECK-NOFP16-SD-NEXT: scvtf v1.2d, v1.2d1463; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v0.2d1464; CHECK-NOFP16-SD-NEXT: ret1465;1466; CHECK-FP16-SD-LABEL: stofp_v4i32_v4f64:1467; CHECK-FP16-SD: // %bb.0: // %entry1468; CHECK-FP16-SD-NEXT: sshll2 v1.2d, v0.4s, #01469; CHECK-FP16-SD-NEXT: sshll v0.2d, v0.2s, #01470; CHECK-FP16-SD-NEXT: scvtf v1.2d, v1.2d1471; CHECK-FP16-SD-NEXT: scvtf v0.2d, v0.2d1472; CHECK-FP16-SD-NEXT: ret1473;1474; CHECK-NOFP16-GI-LABEL: stofp_v4i32_v4f64:1475; CHECK-NOFP16-GI: // %bb.0: // %entry1476; CHECK-NOFP16-GI-NEXT: sshll v1.2d, v0.2s, #01477; CHECK-NOFP16-GI-NEXT: sshll2 v2.2d, v0.4s, #01478; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v1.2d1479; CHECK-NOFP16-GI-NEXT: scvtf v1.2d, v2.2d1480; CHECK-NOFP16-GI-NEXT: ret1481;1482; CHECK-FP16-GI-LABEL: stofp_v4i32_v4f64:1483; CHECK-FP16-GI: // %bb.0: // %entry1484; CHECK-FP16-GI-NEXT: sshll v1.2d, v0.2s, #01485; CHECK-FP16-GI-NEXT: sshll2 v2.2d, v0.4s, #01486; CHECK-FP16-GI-NEXT: scvtf v0.2d, v1.2d1487; CHECK-FP16-GI-NEXT: scvtf v1.2d, v2.2d1488; CHECK-FP16-GI-NEXT: ret1489entry:1490 %c = sitofp <4 x i32> %a to <4 x double>1491 ret <4 x double> %c1492}1493 1494define <4 x double> @utofp_v4i32_v4f64(<4 x i32> %a) {1495; CHECK-NOFP16-SD-LABEL: utofp_v4i32_v4f64:1496; CHECK-NOFP16-SD: // %bb.0: // %entry1497; CHECK-NOFP16-SD-NEXT: ushll2 v1.2d, v0.4s, #01498; CHECK-NOFP16-SD-NEXT: ushll v0.2d, v0.2s, #01499; CHECK-NOFP16-SD-NEXT: ucvtf v1.2d, v1.2d1500; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v0.2d1501; CHECK-NOFP16-SD-NEXT: ret1502;1503; CHECK-FP16-SD-LABEL: utofp_v4i32_v4f64:1504; CHECK-FP16-SD: // %bb.0: // %entry1505; CHECK-FP16-SD-NEXT: ushll2 v1.2d, v0.4s, #01506; CHECK-FP16-SD-NEXT: ushll v0.2d, v0.2s, #01507; CHECK-FP16-SD-NEXT: ucvtf v1.2d, v1.2d1508; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v0.2d1509; CHECK-FP16-SD-NEXT: ret1510;1511; CHECK-NOFP16-GI-LABEL: utofp_v4i32_v4f64:1512; CHECK-NOFP16-GI: // %bb.0: // %entry1513; CHECK-NOFP16-GI-NEXT: ushll v1.2d, v0.2s, #01514; CHECK-NOFP16-GI-NEXT: ushll2 v2.2d, v0.4s, #01515; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v1.2d1516; CHECK-NOFP16-GI-NEXT: ucvtf v1.2d, v2.2d1517; CHECK-NOFP16-GI-NEXT: ret1518;1519; CHECK-FP16-GI-LABEL: utofp_v4i32_v4f64:1520; CHECK-FP16-GI: // %bb.0: // %entry1521; CHECK-FP16-GI-NEXT: ushll v1.2d, v0.2s, #01522; CHECK-FP16-GI-NEXT: ushll2 v2.2d, v0.4s, #01523; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v1.2d1524; CHECK-FP16-GI-NEXT: ucvtf v1.2d, v2.2d1525; CHECK-FP16-GI-NEXT: ret1526entry:1527 %c = uitofp <4 x i32> %a to <4 x double>1528 ret <4 x double> %c1529}1530 1531define <8 x double> @stofp_v8i32_v8f64(<8 x i32> %a) {1532; CHECK-NOFP16-SD-LABEL: stofp_v8i32_v8f64:1533; CHECK-NOFP16-SD: // %bb.0: // %entry1534; CHECK-NOFP16-SD-NEXT: sshll v2.2d, v0.2s, #01535; CHECK-NOFP16-SD-NEXT: sshll2 v3.2d, v0.4s, #01536; CHECK-NOFP16-SD-NEXT: sshll2 v4.2d, v1.4s, #01537; CHECK-NOFP16-SD-NEXT: sshll v5.2d, v1.2s, #01538; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v2.2d1539; CHECK-NOFP16-SD-NEXT: scvtf v1.2d, v3.2d1540; CHECK-NOFP16-SD-NEXT: scvtf v3.2d, v4.2d1541; CHECK-NOFP16-SD-NEXT: scvtf v2.2d, v5.2d1542; CHECK-NOFP16-SD-NEXT: ret1543;1544; CHECK-FP16-SD-LABEL: stofp_v8i32_v8f64:1545; CHECK-FP16-SD: // %bb.0: // %entry1546; CHECK-FP16-SD-NEXT: sshll v2.2d, v0.2s, #01547; CHECK-FP16-SD-NEXT: sshll2 v3.2d, v0.4s, #01548; CHECK-FP16-SD-NEXT: sshll2 v4.2d, v1.4s, #01549; CHECK-FP16-SD-NEXT: sshll v5.2d, v1.2s, #01550; CHECK-FP16-SD-NEXT: scvtf v0.2d, v2.2d1551; CHECK-FP16-SD-NEXT: scvtf v1.2d, v3.2d1552; CHECK-FP16-SD-NEXT: scvtf v3.2d, v4.2d1553; CHECK-FP16-SD-NEXT: scvtf v2.2d, v5.2d1554; CHECK-FP16-SD-NEXT: ret1555;1556; CHECK-NOFP16-GI-LABEL: stofp_v8i32_v8f64:1557; CHECK-NOFP16-GI: // %bb.0: // %entry1558; CHECK-NOFP16-GI-NEXT: sshll v2.2d, v0.2s, #01559; CHECK-NOFP16-GI-NEXT: sshll2 v3.2d, v0.4s, #01560; CHECK-NOFP16-GI-NEXT: sshll v4.2d, v1.2s, #01561; CHECK-NOFP16-GI-NEXT: sshll2 v5.2d, v1.4s, #01562; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v2.2d1563; CHECK-NOFP16-GI-NEXT: scvtf v1.2d, v3.2d1564; CHECK-NOFP16-GI-NEXT: scvtf v2.2d, v4.2d1565; CHECK-NOFP16-GI-NEXT: scvtf v3.2d, v5.2d1566; CHECK-NOFP16-GI-NEXT: ret1567;1568; CHECK-FP16-GI-LABEL: stofp_v8i32_v8f64:1569; CHECK-FP16-GI: // %bb.0: // %entry1570; CHECK-FP16-GI-NEXT: sshll v2.2d, v0.2s, #01571; CHECK-FP16-GI-NEXT: sshll2 v3.2d, v0.4s, #01572; CHECK-FP16-GI-NEXT: sshll v4.2d, v1.2s, #01573; CHECK-FP16-GI-NEXT: sshll2 v5.2d, v1.4s, #01574; CHECK-FP16-GI-NEXT: scvtf v0.2d, v2.2d1575; CHECK-FP16-GI-NEXT: scvtf v1.2d, v3.2d1576; CHECK-FP16-GI-NEXT: scvtf v2.2d, v4.2d1577; CHECK-FP16-GI-NEXT: scvtf v3.2d, v5.2d1578; CHECK-FP16-GI-NEXT: ret1579entry:1580 %c = sitofp <8 x i32> %a to <8 x double>1581 ret <8 x double> %c1582}1583 1584define <8 x double> @utofp_v8i32_v8f64(<8 x i32> %a) {1585; CHECK-NOFP16-SD-LABEL: utofp_v8i32_v8f64:1586; CHECK-NOFP16-SD: // %bb.0: // %entry1587; CHECK-NOFP16-SD-NEXT: ushll v2.2d, v0.2s, #01588; CHECK-NOFP16-SD-NEXT: ushll2 v3.2d, v0.4s, #01589; CHECK-NOFP16-SD-NEXT: ushll2 v4.2d, v1.4s, #01590; CHECK-NOFP16-SD-NEXT: ushll v5.2d, v1.2s, #01591; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v2.2d1592; CHECK-NOFP16-SD-NEXT: ucvtf v1.2d, v3.2d1593; CHECK-NOFP16-SD-NEXT: ucvtf v3.2d, v4.2d1594; CHECK-NOFP16-SD-NEXT: ucvtf v2.2d, v5.2d1595; CHECK-NOFP16-SD-NEXT: ret1596;1597; CHECK-FP16-SD-LABEL: utofp_v8i32_v8f64:1598; CHECK-FP16-SD: // %bb.0: // %entry1599; CHECK-FP16-SD-NEXT: ushll v2.2d, v0.2s, #01600; CHECK-FP16-SD-NEXT: ushll2 v3.2d, v0.4s, #01601; CHECK-FP16-SD-NEXT: ushll2 v4.2d, v1.4s, #01602; CHECK-FP16-SD-NEXT: ushll v5.2d, v1.2s, #01603; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v2.2d1604; CHECK-FP16-SD-NEXT: ucvtf v1.2d, v3.2d1605; CHECK-FP16-SD-NEXT: ucvtf v3.2d, v4.2d1606; CHECK-FP16-SD-NEXT: ucvtf v2.2d, v5.2d1607; CHECK-FP16-SD-NEXT: ret1608;1609; CHECK-NOFP16-GI-LABEL: utofp_v8i32_v8f64:1610; CHECK-NOFP16-GI: // %bb.0: // %entry1611; CHECK-NOFP16-GI-NEXT: ushll v2.2d, v0.2s, #01612; CHECK-NOFP16-GI-NEXT: ushll2 v3.2d, v0.4s, #01613; CHECK-NOFP16-GI-NEXT: ushll v4.2d, v1.2s, #01614; CHECK-NOFP16-GI-NEXT: ushll2 v5.2d, v1.4s, #01615; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v2.2d1616; CHECK-NOFP16-GI-NEXT: ucvtf v1.2d, v3.2d1617; CHECK-NOFP16-GI-NEXT: ucvtf v2.2d, v4.2d1618; CHECK-NOFP16-GI-NEXT: ucvtf v3.2d, v5.2d1619; CHECK-NOFP16-GI-NEXT: ret1620;1621; CHECK-FP16-GI-LABEL: utofp_v8i32_v8f64:1622; CHECK-FP16-GI: // %bb.0: // %entry1623; CHECK-FP16-GI-NEXT: ushll v2.2d, v0.2s, #01624; CHECK-FP16-GI-NEXT: ushll2 v3.2d, v0.4s, #01625; CHECK-FP16-GI-NEXT: ushll v4.2d, v1.2s, #01626; CHECK-FP16-GI-NEXT: ushll2 v5.2d, v1.4s, #01627; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v2.2d1628; CHECK-FP16-GI-NEXT: ucvtf v1.2d, v3.2d1629; CHECK-FP16-GI-NEXT: ucvtf v2.2d, v4.2d1630; CHECK-FP16-GI-NEXT: ucvtf v3.2d, v5.2d1631; CHECK-FP16-GI-NEXT: ret1632entry:1633 %c = uitofp <8 x i32> %a to <8 x double>1634 ret <8 x double> %c1635}1636 1637define <2 x double> @stofp_v2i16_v2f64(<2 x i16> %a) {1638; CHECK-NOFP16-SD-LABEL: stofp_v2i16_v2f64:1639; CHECK-NOFP16-SD: // %bb.0: // %entry1640; CHECK-NOFP16-SD-NEXT: shl v0.2s, v0.2s, #161641; CHECK-NOFP16-SD-NEXT: sshr v0.2s, v0.2s, #161642; CHECK-NOFP16-SD-NEXT: sshll v0.2d, v0.2s, #01643; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v0.2d1644; CHECK-NOFP16-SD-NEXT: ret1645;1646; CHECK-FP16-SD-LABEL: stofp_v2i16_v2f64:1647; CHECK-FP16-SD: // %bb.0: // %entry1648; CHECK-FP16-SD-NEXT: shl v0.2s, v0.2s, #161649; CHECK-FP16-SD-NEXT: sshr v0.2s, v0.2s, #161650; CHECK-FP16-SD-NEXT: sshll v0.2d, v0.2s, #01651; CHECK-FP16-SD-NEXT: scvtf v0.2d, v0.2d1652; CHECK-FP16-SD-NEXT: ret1653;1654; CHECK-NOFP16-GI-LABEL: stofp_v2i16_v2f64:1655; CHECK-NOFP16-GI: // %bb.0: // %entry1656; CHECK-NOFP16-GI-NEXT: ushll v0.2d, v0.2s, #01657; CHECK-NOFP16-GI-NEXT: shl v0.2d, v0.2d, #481658; CHECK-NOFP16-GI-NEXT: sshr v0.2d, v0.2d, #481659; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v0.2d1660; CHECK-NOFP16-GI-NEXT: ret1661;1662; CHECK-FP16-GI-LABEL: stofp_v2i16_v2f64:1663; CHECK-FP16-GI: // %bb.0: // %entry1664; CHECK-FP16-GI-NEXT: ushll v0.2d, v0.2s, #01665; CHECK-FP16-GI-NEXT: shl v0.2d, v0.2d, #481666; CHECK-FP16-GI-NEXT: sshr v0.2d, v0.2d, #481667; CHECK-FP16-GI-NEXT: scvtf v0.2d, v0.2d1668; CHECK-FP16-GI-NEXT: ret1669entry:1670 %c = sitofp <2 x i16> %a to <2 x double>1671 ret <2 x double> %c1672}1673 1674define <2 x double> @utofp_v2i16_v2f64(<2 x i16> %a) {1675; CHECK-NOFP16-SD-LABEL: utofp_v2i16_v2f64:1676; CHECK-NOFP16-SD: // %bb.0: // %entry1677; CHECK-NOFP16-SD-NEXT: movi d1, #0x00ffff0000ffff1678; CHECK-NOFP16-SD-NEXT: and v0.8b, v0.8b, v1.8b1679; CHECK-NOFP16-SD-NEXT: ushll v0.2d, v0.2s, #01680; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v0.2d1681; CHECK-NOFP16-SD-NEXT: ret1682;1683; CHECK-FP16-SD-LABEL: utofp_v2i16_v2f64:1684; CHECK-FP16-SD: // %bb.0: // %entry1685; CHECK-FP16-SD-NEXT: movi d1, #0x00ffff0000ffff1686; CHECK-FP16-SD-NEXT: and v0.8b, v0.8b, v1.8b1687; CHECK-FP16-SD-NEXT: ushll v0.2d, v0.2s, #01688; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v0.2d1689; CHECK-FP16-SD-NEXT: ret1690;1691; CHECK-NOFP16-GI-LABEL: utofp_v2i16_v2f64:1692; CHECK-NOFP16-GI: // %bb.0: // %entry1693; CHECK-NOFP16-GI-NEXT: movi v1.2d, #0x0000000000ffff1694; CHECK-NOFP16-GI-NEXT: ushll v0.2d, v0.2s, #01695; CHECK-NOFP16-GI-NEXT: and v0.16b, v0.16b, v1.16b1696; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v0.2d1697; CHECK-NOFP16-GI-NEXT: ret1698;1699; CHECK-FP16-GI-LABEL: utofp_v2i16_v2f64:1700; CHECK-FP16-GI: // %bb.0: // %entry1701; CHECK-FP16-GI-NEXT: movi v1.2d, #0x0000000000ffff1702; CHECK-FP16-GI-NEXT: ushll v0.2d, v0.2s, #01703; CHECK-FP16-GI-NEXT: and v0.16b, v0.16b, v1.16b1704; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v0.2d1705; CHECK-FP16-GI-NEXT: ret1706entry:1707 %c = uitofp <2 x i16> %a to <2 x double>1708 ret <2 x double> %c1709}1710 1711define <3 x double> @stofp_v3i16_v3f64(<3 x i16> %a) {1712; CHECK-NOFP16-SD-LABEL: stofp_v3i16_v3f64:1713; CHECK-NOFP16-SD: // %bb.0: // %entry1714; CHECK-NOFP16-SD-NEXT: sshll v1.4s, v0.4h, #01715; CHECK-NOFP16-SD-NEXT: sshll v0.2d, v1.2s, #01716; CHECK-NOFP16-SD-NEXT: sshll2 v1.2d, v1.4s, #01717; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v0.2d1718; CHECK-NOFP16-SD-NEXT: scvtf v2.2d, v1.2d1719; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q21720; CHECK-NOFP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #81721; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q01722; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q11723; CHECK-NOFP16-SD-NEXT: ret1724;1725; CHECK-FP16-SD-LABEL: stofp_v3i16_v3f64:1726; CHECK-FP16-SD: // %bb.0: // %entry1727; CHECK-FP16-SD-NEXT: sshll v1.4s, v0.4h, #01728; CHECK-FP16-SD-NEXT: sshll v0.2d, v1.2s, #01729; CHECK-FP16-SD-NEXT: sshll2 v1.2d, v1.4s, #01730; CHECK-FP16-SD-NEXT: scvtf v0.2d, v0.2d1731; CHECK-FP16-SD-NEXT: scvtf v2.2d, v1.2d1732; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q21733; CHECK-FP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #81734; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q01735; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q11736; CHECK-FP16-SD-NEXT: ret1737;1738; CHECK-NOFP16-GI-LABEL: stofp_v3i16_v3f64:1739; CHECK-NOFP16-GI: // %bb.0: // %entry1740; CHECK-NOFP16-GI-NEXT: sshll v1.4s, v0.4h, #01741; CHECK-NOFP16-GI-NEXT: sshll v0.2d, v1.2s, #01742; CHECK-NOFP16-GI-NEXT: sshll2 v1.2d, v1.4s, #01743; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v0.2d1744; CHECK-NOFP16-GI-NEXT: scvtf v2.2d, v1.2d1745; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q21746; CHECK-NOFP16-GI-NEXT: mov d1, v0.d[1]1747; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q01748; CHECK-NOFP16-GI-NEXT: ret1749;1750; CHECK-FP16-GI-LABEL: stofp_v3i16_v3f64:1751; CHECK-FP16-GI: // %bb.0: // %entry1752; CHECK-FP16-GI-NEXT: sshll v1.4s, v0.4h, #01753; CHECK-FP16-GI-NEXT: sshll v0.2d, v1.2s, #01754; CHECK-FP16-GI-NEXT: sshll2 v1.2d, v1.4s, #01755; CHECK-FP16-GI-NEXT: scvtf v0.2d, v0.2d1756; CHECK-FP16-GI-NEXT: scvtf v2.2d, v1.2d1757; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q21758; CHECK-FP16-GI-NEXT: mov d1, v0.d[1]1759; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q01760; CHECK-FP16-GI-NEXT: ret1761entry:1762 %c = sitofp <3 x i16> %a to <3 x double>1763 ret <3 x double> %c1764}1765 1766define <3 x double> @utofp_v3i16_v3f64(<3 x i16> %a) {1767; CHECK-NOFP16-SD-LABEL: utofp_v3i16_v3f64:1768; CHECK-NOFP16-SD: // %bb.0: // %entry1769; CHECK-NOFP16-SD-NEXT: ushll v1.4s, v0.4h, #01770; CHECK-NOFP16-SD-NEXT: ushll v0.2d, v1.2s, #01771; CHECK-NOFP16-SD-NEXT: ushll2 v1.2d, v1.4s, #01772; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v0.2d1773; CHECK-NOFP16-SD-NEXT: ucvtf v2.2d, v1.2d1774; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q21775; CHECK-NOFP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #81776; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q01777; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q11778; CHECK-NOFP16-SD-NEXT: ret1779;1780; CHECK-FP16-SD-LABEL: utofp_v3i16_v3f64:1781; CHECK-FP16-SD: // %bb.0: // %entry1782; CHECK-FP16-SD-NEXT: ushll v1.4s, v0.4h, #01783; CHECK-FP16-SD-NEXT: ushll v0.2d, v1.2s, #01784; CHECK-FP16-SD-NEXT: ushll2 v1.2d, v1.4s, #01785; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v0.2d1786; CHECK-FP16-SD-NEXT: ucvtf v2.2d, v1.2d1787; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q21788; CHECK-FP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #81789; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q01790; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q11791; CHECK-FP16-SD-NEXT: ret1792;1793; CHECK-NOFP16-GI-LABEL: utofp_v3i16_v3f64:1794; CHECK-NOFP16-GI: // %bb.0: // %entry1795; CHECK-NOFP16-GI-NEXT: ushll v1.4s, v0.4h, #01796; CHECK-NOFP16-GI-NEXT: ushll v0.2d, v1.2s, #01797; CHECK-NOFP16-GI-NEXT: ushll2 v1.2d, v1.4s, #01798; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v0.2d1799; CHECK-NOFP16-GI-NEXT: ucvtf v2.2d, v1.2d1800; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q21801; CHECK-NOFP16-GI-NEXT: mov d1, v0.d[1]1802; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q01803; CHECK-NOFP16-GI-NEXT: ret1804;1805; CHECK-FP16-GI-LABEL: utofp_v3i16_v3f64:1806; CHECK-FP16-GI: // %bb.0: // %entry1807; CHECK-FP16-GI-NEXT: ushll v1.4s, v0.4h, #01808; CHECK-FP16-GI-NEXT: ushll v0.2d, v1.2s, #01809; CHECK-FP16-GI-NEXT: ushll2 v1.2d, v1.4s, #01810; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v0.2d1811; CHECK-FP16-GI-NEXT: ucvtf v2.2d, v1.2d1812; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q21813; CHECK-FP16-GI-NEXT: mov d1, v0.d[1]1814; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q01815; CHECK-FP16-GI-NEXT: ret1816entry:1817 %c = uitofp <3 x i16> %a to <3 x double>1818 ret <3 x double> %c1819}1820 1821define <4 x double> @stofp_v4i16_v4f64(<4 x i16> %a) {1822; CHECK-NOFP16-SD-LABEL: stofp_v4i16_v4f64:1823; CHECK-NOFP16-SD: // %bb.0: // %entry1824; CHECK-NOFP16-SD-NEXT: sshll v0.4s, v0.4h, #01825; CHECK-NOFP16-SD-NEXT: sshll2 v1.2d, v0.4s, #01826; CHECK-NOFP16-SD-NEXT: sshll v0.2d, v0.2s, #01827; CHECK-NOFP16-SD-NEXT: scvtf v1.2d, v1.2d1828; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v0.2d1829; CHECK-NOFP16-SD-NEXT: ret1830;1831; CHECK-FP16-SD-LABEL: stofp_v4i16_v4f64:1832; CHECK-FP16-SD: // %bb.0: // %entry1833; CHECK-FP16-SD-NEXT: sshll v0.4s, v0.4h, #01834; CHECK-FP16-SD-NEXT: sshll2 v1.2d, v0.4s, #01835; CHECK-FP16-SD-NEXT: sshll v0.2d, v0.2s, #01836; CHECK-FP16-SD-NEXT: scvtf v1.2d, v1.2d1837; CHECK-FP16-SD-NEXT: scvtf v0.2d, v0.2d1838; CHECK-FP16-SD-NEXT: ret1839;1840; CHECK-NOFP16-GI-LABEL: stofp_v4i16_v4f64:1841; CHECK-NOFP16-GI: // %bb.0: // %entry1842; CHECK-NOFP16-GI-NEXT: sshll v0.4s, v0.4h, #01843; CHECK-NOFP16-GI-NEXT: sshll v1.2d, v0.2s, #01844; CHECK-NOFP16-GI-NEXT: sshll2 v2.2d, v0.4s, #01845; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v1.2d1846; CHECK-NOFP16-GI-NEXT: scvtf v1.2d, v2.2d1847; CHECK-NOFP16-GI-NEXT: ret1848;1849; CHECK-FP16-GI-LABEL: stofp_v4i16_v4f64:1850; CHECK-FP16-GI: // %bb.0: // %entry1851; CHECK-FP16-GI-NEXT: sshll v0.4s, v0.4h, #01852; CHECK-FP16-GI-NEXT: sshll v1.2d, v0.2s, #01853; CHECK-FP16-GI-NEXT: sshll2 v2.2d, v0.4s, #01854; CHECK-FP16-GI-NEXT: scvtf v0.2d, v1.2d1855; CHECK-FP16-GI-NEXT: scvtf v1.2d, v2.2d1856; CHECK-FP16-GI-NEXT: ret1857entry:1858 %c = sitofp <4 x i16> %a to <4 x double>1859 ret <4 x double> %c1860}1861 1862define <4 x double> @utofp_v4i16_v4f64(<4 x i16> %a) {1863; CHECK-NOFP16-SD-LABEL: utofp_v4i16_v4f64:1864; CHECK-NOFP16-SD: // %bb.0: // %entry1865; CHECK-NOFP16-SD-NEXT: ushll v0.4s, v0.4h, #01866; CHECK-NOFP16-SD-NEXT: ushll2 v1.2d, v0.4s, #01867; CHECK-NOFP16-SD-NEXT: ushll v0.2d, v0.2s, #01868; CHECK-NOFP16-SD-NEXT: ucvtf v1.2d, v1.2d1869; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v0.2d1870; CHECK-NOFP16-SD-NEXT: ret1871;1872; CHECK-FP16-SD-LABEL: utofp_v4i16_v4f64:1873; CHECK-FP16-SD: // %bb.0: // %entry1874; CHECK-FP16-SD-NEXT: ushll v0.4s, v0.4h, #01875; CHECK-FP16-SD-NEXT: ushll2 v1.2d, v0.4s, #01876; CHECK-FP16-SD-NEXT: ushll v0.2d, v0.2s, #01877; CHECK-FP16-SD-NEXT: ucvtf v1.2d, v1.2d1878; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v0.2d1879; CHECK-FP16-SD-NEXT: ret1880;1881; CHECK-NOFP16-GI-LABEL: utofp_v4i16_v4f64:1882; CHECK-NOFP16-GI: // %bb.0: // %entry1883; CHECK-NOFP16-GI-NEXT: ushll v0.4s, v0.4h, #01884; CHECK-NOFP16-GI-NEXT: ushll v1.2d, v0.2s, #01885; CHECK-NOFP16-GI-NEXT: ushll2 v2.2d, v0.4s, #01886; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v1.2d1887; CHECK-NOFP16-GI-NEXT: ucvtf v1.2d, v2.2d1888; CHECK-NOFP16-GI-NEXT: ret1889;1890; CHECK-FP16-GI-LABEL: utofp_v4i16_v4f64:1891; CHECK-FP16-GI: // %bb.0: // %entry1892; CHECK-FP16-GI-NEXT: ushll v0.4s, v0.4h, #01893; CHECK-FP16-GI-NEXT: ushll v1.2d, v0.2s, #01894; CHECK-FP16-GI-NEXT: ushll2 v2.2d, v0.4s, #01895; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v1.2d1896; CHECK-FP16-GI-NEXT: ucvtf v1.2d, v2.2d1897; CHECK-FP16-GI-NEXT: ret1898entry:1899 %c = uitofp <4 x i16> %a to <4 x double>1900 ret <4 x double> %c1901}1902 1903define <8 x double> @stofp_v8i16_v8f64(<8 x i16> %a) {1904; CHECK-NOFP16-SD-LABEL: stofp_v8i16_v8f64:1905; CHECK-NOFP16-SD: // %bb.0: // %entry1906; CHECK-NOFP16-SD-NEXT: sshll v1.4s, v0.4h, #01907; CHECK-NOFP16-SD-NEXT: sshll2 v0.4s, v0.8h, #01908; CHECK-NOFP16-SD-NEXT: sshll v2.2d, v1.2s, #01909; CHECK-NOFP16-SD-NEXT: sshll2 v3.2d, v0.4s, #01910; CHECK-NOFP16-SD-NEXT: sshll2 v1.2d, v1.4s, #01911; CHECK-NOFP16-SD-NEXT: sshll v4.2d, v0.2s, #01912; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v2.2d1913; CHECK-NOFP16-SD-NEXT: scvtf v3.2d, v3.2d1914; CHECK-NOFP16-SD-NEXT: scvtf v1.2d, v1.2d1915; CHECK-NOFP16-SD-NEXT: scvtf v2.2d, v4.2d1916; CHECK-NOFP16-SD-NEXT: ret1917;1918; CHECK-FP16-SD-LABEL: stofp_v8i16_v8f64:1919; CHECK-FP16-SD: // %bb.0: // %entry1920; CHECK-FP16-SD-NEXT: sshll v1.4s, v0.4h, #01921; CHECK-FP16-SD-NEXT: sshll2 v0.4s, v0.8h, #01922; CHECK-FP16-SD-NEXT: sshll v2.2d, v1.2s, #01923; CHECK-FP16-SD-NEXT: sshll2 v3.2d, v0.4s, #01924; CHECK-FP16-SD-NEXT: sshll2 v1.2d, v1.4s, #01925; CHECK-FP16-SD-NEXT: sshll v4.2d, v0.2s, #01926; CHECK-FP16-SD-NEXT: scvtf v0.2d, v2.2d1927; CHECK-FP16-SD-NEXT: scvtf v3.2d, v3.2d1928; CHECK-FP16-SD-NEXT: scvtf v1.2d, v1.2d1929; CHECK-FP16-SD-NEXT: scvtf v2.2d, v4.2d1930; CHECK-FP16-SD-NEXT: ret1931;1932; CHECK-NOFP16-GI-LABEL: stofp_v8i16_v8f64:1933; CHECK-NOFP16-GI: // %bb.0: // %entry1934; CHECK-NOFP16-GI-NEXT: sshll v1.4s, v0.4h, #01935; CHECK-NOFP16-GI-NEXT: sshll2 v0.4s, v0.8h, #01936; CHECK-NOFP16-GI-NEXT: sshll v2.2d, v1.2s, #01937; CHECK-NOFP16-GI-NEXT: sshll2 v1.2d, v1.4s, #01938; CHECK-NOFP16-GI-NEXT: sshll v3.2d, v0.2s, #01939; CHECK-NOFP16-GI-NEXT: sshll2 v4.2d, v0.4s, #01940; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v2.2d1941; CHECK-NOFP16-GI-NEXT: scvtf v1.2d, v1.2d1942; CHECK-NOFP16-GI-NEXT: scvtf v2.2d, v3.2d1943; CHECK-NOFP16-GI-NEXT: scvtf v3.2d, v4.2d1944; CHECK-NOFP16-GI-NEXT: ret1945;1946; CHECK-FP16-GI-LABEL: stofp_v8i16_v8f64:1947; CHECK-FP16-GI: // %bb.0: // %entry1948; CHECK-FP16-GI-NEXT: sshll v1.4s, v0.4h, #01949; CHECK-FP16-GI-NEXT: sshll2 v0.4s, v0.8h, #01950; CHECK-FP16-GI-NEXT: sshll v2.2d, v1.2s, #01951; CHECK-FP16-GI-NEXT: sshll2 v1.2d, v1.4s, #01952; CHECK-FP16-GI-NEXT: sshll v3.2d, v0.2s, #01953; CHECK-FP16-GI-NEXT: sshll2 v4.2d, v0.4s, #01954; CHECK-FP16-GI-NEXT: scvtf v0.2d, v2.2d1955; CHECK-FP16-GI-NEXT: scvtf v1.2d, v1.2d1956; CHECK-FP16-GI-NEXT: scvtf v2.2d, v3.2d1957; CHECK-FP16-GI-NEXT: scvtf v3.2d, v4.2d1958; CHECK-FP16-GI-NEXT: ret1959entry:1960 %c = sitofp <8 x i16> %a to <8 x double>1961 ret <8 x double> %c1962}1963 1964define <8 x double> @utofp_v8i16_v8f64(<8 x i16> %a) {1965; CHECK-NOFP16-SD-LABEL: utofp_v8i16_v8f64:1966; CHECK-NOFP16-SD: // %bb.0: // %entry1967; CHECK-NOFP16-SD-NEXT: ushll v1.4s, v0.4h, #01968; CHECK-NOFP16-SD-NEXT: ushll2 v0.4s, v0.8h, #01969; CHECK-NOFP16-SD-NEXT: ushll v2.2d, v1.2s, #01970; CHECK-NOFP16-SD-NEXT: ushll2 v3.2d, v0.4s, #01971; CHECK-NOFP16-SD-NEXT: ushll2 v1.2d, v1.4s, #01972; CHECK-NOFP16-SD-NEXT: ushll v4.2d, v0.2s, #01973; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v2.2d1974; CHECK-NOFP16-SD-NEXT: ucvtf v3.2d, v3.2d1975; CHECK-NOFP16-SD-NEXT: ucvtf v1.2d, v1.2d1976; CHECK-NOFP16-SD-NEXT: ucvtf v2.2d, v4.2d1977; CHECK-NOFP16-SD-NEXT: ret1978;1979; CHECK-FP16-SD-LABEL: utofp_v8i16_v8f64:1980; CHECK-FP16-SD: // %bb.0: // %entry1981; CHECK-FP16-SD-NEXT: ushll v1.4s, v0.4h, #01982; CHECK-FP16-SD-NEXT: ushll2 v0.4s, v0.8h, #01983; CHECK-FP16-SD-NEXT: ushll v2.2d, v1.2s, #01984; CHECK-FP16-SD-NEXT: ushll2 v3.2d, v0.4s, #01985; CHECK-FP16-SD-NEXT: ushll2 v1.2d, v1.4s, #01986; CHECK-FP16-SD-NEXT: ushll v4.2d, v0.2s, #01987; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v2.2d1988; CHECK-FP16-SD-NEXT: ucvtf v3.2d, v3.2d1989; CHECK-FP16-SD-NEXT: ucvtf v1.2d, v1.2d1990; CHECK-FP16-SD-NEXT: ucvtf v2.2d, v4.2d1991; CHECK-FP16-SD-NEXT: ret1992;1993; CHECK-NOFP16-GI-LABEL: utofp_v8i16_v8f64:1994; CHECK-NOFP16-GI: // %bb.0: // %entry1995; CHECK-NOFP16-GI-NEXT: ushll v1.4s, v0.4h, #01996; CHECK-NOFP16-GI-NEXT: ushll2 v0.4s, v0.8h, #01997; CHECK-NOFP16-GI-NEXT: ushll v2.2d, v1.2s, #01998; CHECK-NOFP16-GI-NEXT: ushll2 v1.2d, v1.4s, #01999; CHECK-NOFP16-GI-NEXT: ushll v3.2d, v0.2s, #02000; CHECK-NOFP16-GI-NEXT: ushll2 v4.2d, v0.4s, #02001; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v2.2d2002; CHECK-NOFP16-GI-NEXT: ucvtf v1.2d, v1.2d2003; CHECK-NOFP16-GI-NEXT: ucvtf v2.2d, v3.2d2004; CHECK-NOFP16-GI-NEXT: ucvtf v3.2d, v4.2d2005; CHECK-NOFP16-GI-NEXT: ret2006;2007; CHECK-FP16-GI-LABEL: utofp_v8i16_v8f64:2008; CHECK-FP16-GI: // %bb.0: // %entry2009; CHECK-FP16-GI-NEXT: ushll v1.4s, v0.4h, #02010; CHECK-FP16-GI-NEXT: ushll2 v0.4s, v0.8h, #02011; CHECK-FP16-GI-NEXT: ushll v2.2d, v1.2s, #02012; CHECK-FP16-GI-NEXT: ushll2 v1.2d, v1.4s, #02013; CHECK-FP16-GI-NEXT: ushll v3.2d, v0.2s, #02014; CHECK-FP16-GI-NEXT: ushll2 v4.2d, v0.4s, #02015; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v2.2d2016; CHECK-FP16-GI-NEXT: ucvtf v1.2d, v1.2d2017; CHECK-FP16-GI-NEXT: ucvtf v2.2d, v3.2d2018; CHECK-FP16-GI-NEXT: ucvtf v3.2d, v4.2d2019; CHECK-FP16-GI-NEXT: ret2020entry:2021 %c = uitofp <8 x i16> %a to <8 x double>2022 ret <8 x double> %c2023}2024 2025define <16 x double> @stofp_v16i16_v16f64(<16 x i16> %a) {2026; CHECK-NOFP16-SD-LABEL: stofp_v16i16_v16f64:2027; CHECK-NOFP16-SD: // %bb.0: // %entry2028; CHECK-NOFP16-SD-NEXT: sshll v2.4s, v0.4h, #02029; CHECK-NOFP16-SD-NEXT: sshll2 v0.4s, v0.8h, #02030; CHECK-NOFP16-SD-NEXT: sshll v3.4s, v1.4h, #02031; CHECK-NOFP16-SD-NEXT: sshll2 v1.4s, v1.8h, #02032; CHECK-NOFP16-SD-NEXT: sshll2 v4.2d, v2.4s, #02033; CHECK-NOFP16-SD-NEXT: sshll v2.2d, v2.2s, #02034; CHECK-NOFP16-SD-NEXT: sshll2 v5.2d, v0.4s, #02035; CHECK-NOFP16-SD-NEXT: sshll v6.2d, v0.2s, #02036; CHECK-NOFP16-SD-NEXT: sshll v7.2d, v3.2s, #02037; CHECK-NOFP16-SD-NEXT: sshll2 v16.2d, v1.4s, #02038; CHECK-NOFP16-SD-NEXT: sshll2 v17.2d, v3.4s, #02039; CHECK-NOFP16-SD-NEXT: sshll v18.2d, v1.2s, #02040; CHECK-NOFP16-SD-NEXT: scvtf v1.2d, v4.2d2041; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v2.2d2042; CHECK-NOFP16-SD-NEXT: scvtf v3.2d, v5.2d2043; CHECK-NOFP16-SD-NEXT: scvtf v2.2d, v6.2d2044; CHECK-NOFP16-SD-NEXT: scvtf v4.2d, v7.2d2045; CHECK-NOFP16-SD-NEXT: scvtf v7.2d, v16.2d2046; CHECK-NOFP16-SD-NEXT: scvtf v5.2d, v17.2d2047; CHECK-NOFP16-SD-NEXT: scvtf v6.2d, v18.2d2048; CHECK-NOFP16-SD-NEXT: ret2049;2050; CHECK-FP16-SD-LABEL: stofp_v16i16_v16f64:2051; CHECK-FP16-SD: // %bb.0: // %entry2052; CHECK-FP16-SD-NEXT: sshll v2.4s, v0.4h, #02053; CHECK-FP16-SD-NEXT: sshll2 v0.4s, v0.8h, #02054; CHECK-FP16-SD-NEXT: sshll v3.4s, v1.4h, #02055; CHECK-FP16-SD-NEXT: sshll2 v1.4s, v1.8h, #02056; CHECK-FP16-SD-NEXT: sshll2 v4.2d, v2.4s, #02057; CHECK-FP16-SD-NEXT: sshll v2.2d, v2.2s, #02058; CHECK-FP16-SD-NEXT: sshll2 v5.2d, v0.4s, #02059; CHECK-FP16-SD-NEXT: sshll v6.2d, v0.2s, #02060; CHECK-FP16-SD-NEXT: sshll v7.2d, v3.2s, #02061; CHECK-FP16-SD-NEXT: sshll2 v16.2d, v1.4s, #02062; CHECK-FP16-SD-NEXT: sshll2 v17.2d, v3.4s, #02063; CHECK-FP16-SD-NEXT: sshll v18.2d, v1.2s, #02064; CHECK-FP16-SD-NEXT: scvtf v1.2d, v4.2d2065; CHECK-FP16-SD-NEXT: scvtf v0.2d, v2.2d2066; CHECK-FP16-SD-NEXT: scvtf v3.2d, v5.2d2067; CHECK-FP16-SD-NEXT: scvtf v2.2d, v6.2d2068; CHECK-FP16-SD-NEXT: scvtf v4.2d, v7.2d2069; CHECK-FP16-SD-NEXT: scvtf v7.2d, v16.2d2070; CHECK-FP16-SD-NEXT: scvtf v5.2d, v17.2d2071; CHECK-FP16-SD-NEXT: scvtf v6.2d, v18.2d2072; CHECK-FP16-SD-NEXT: ret2073;2074; CHECK-NOFP16-GI-LABEL: stofp_v16i16_v16f64:2075; CHECK-NOFP16-GI: // %bb.0: // %entry2076; CHECK-NOFP16-GI-NEXT: sshll v2.4s, v0.4h, #02077; CHECK-NOFP16-GI-NEXT: sshll2 v0.4s, v0.8h, #02078; CHECK-NOFP16-GI-NEXT: sshll v3.4s, v1.4h, #02079; CHECK-NOFP16-GI-NEXT: sshll2 v1.4s, v1.8h, #02080; CHECK-NOFP16-GI-NEXT: sshll v4.2d, v2.2s, #02081; CHECK-NOFP16-GI-NEXT: sshll2 v2.2d, v2.4s, #02082; CHECK-NOFP16-GI-NEXT: sshll v5.2d, v0.2s, #02083; CHECK-NOFP16-GI-NEXT: sshll2 v6.2d, v0.4s, #02084; CHECK-NOFP16-GI-NEXT: sshll v7.2d, v3.2s, #02085; CHECK-NOFP16-GI-NEXT: sshll2 v16.2d, v3.4s, #02086; CHECK-NOFP16-GI-NEXT: sshll v17.2d, v1.2s, #02087; CHECK-NOFP16-GI-NEXT: sshll2 v18.2d, v1.4s, #02088; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v4.2d2089; CHECK-NOFP16-GI-NEXT: scvtf v1.2d, v2.2d2090; CHECK-NOFP16-GI-NEXT: scvtf v2.2d, v5.2d2091; CHECK-NOFP16-GI-NEXT: scvtf v3.2d, v6.2d2092; CHECK-NOFP16-GI-NEXT: scvtf v4.2d, v7.2d2093; CHECK-NOFP16-GI-NEXT: scvtf v5.2d, v16.2d2094; CHECK-NOFP16-GI-NEXT: scvtf v6.2d, v17.2d2095; CHECK-NOFP16-GI-NEXT: scvtf v7.2d, v18.2d2096; CHECK-NOFP16-GI-NEXT: ret2097;2098; CHECK-FP16-GI-LABEL: stofp_v16i16_v16f64:2099; CHECK-FP16-GI: // %bb.0: // %entry2100; CHECK-FP16-GI-NEXT: sshll v2.4s, v0.4h, #02101; CHECK-FP16-GI-NEXT: sshll2 v0.4s, v0.8h, #02102; CHECK-FP16-GI-NEXT: sshll v3.4s, v1.4h, #02103; CHECK-FP16-GI-NEXT: sshll2 v1.4s, v1.8h, #02104; CHECK-FP16-GI-NEXT: sshll v4.2d, v2.2s, #02105; CHECK-FP16-GI-NEXT: sshll2 v2.2d, v2.4s, #02106; CHECK-FP16-GI-NEXT: sshll v5.2d, v0.2s, #02107; CHECK-FP16-GI-NEXT: sshll2 v6.2d, v0.4s, #02108; CHECK-FP16-GI-NEXT: sshll v7.2d, v3.2s, #02109; CHECK-FP16-GI-NEXT: sshll2 v16.2d, v3.4s, #02110; CHECK-FP16-GI-NEXT: sshll v17.2d, v1.2s, #02111; CHECK-FP16-GI-NEXT: sshll2 v18.2d, v1.4s, #02112; CHECK-FP16-GI-NEXT: scvtf v0.2d, v4.2d2113; CHECK-FP16-GI-NEXT: scvtf v1.2d, v2.2d2114; CHECK-FP16-GI-NEXT: scvtf v2.2d, v5.2d2115; CHECK-FP16-GI-NEXT: scvtf v3.2d, v6.2d2116; CHECK-FP16-GI-NEXT: scvtf v4.2d, v7.2d2117; CHECK-FP16-GI-NEXT: scvtf v5.2d, v16.2d2118; CHECK-FP16-GI-NEXT: scvtf v6.2d, v17.2d2119; CHECK-FP16-GI-NEXT: scvtf v7.2d, v18.2d2120; CHECK-FP16-GI-NEXT: ret2121entry:2122 %c = sitofp <16 x i16> %a to <16 x double>2123 ret <16 x double> %c2124}2125 2126define <16 x double> @utofp_v16i16_v16f64(<16 x i16> %a) {2127; CHECK-NOFP16-SD-LABEL: utofp_v16i16_v16f64:2128; CHECK-NOFP16-SD: // %bb.0: // %entry2129; CHECK-NOFP16-SD-NEXT: ushll v2.4s, v0.4h, #02130; CHECK-NOFP16-SD-NEXT: ushll2 v0.4s, v0.8h, #02131; CHECK-NOFP16-SD-NEXT: ushll v3.4s, v1.4h, #02132; CHECK-NOFP16-SD-NEXT: ushll2 v1.4s, v1.8h, #02133; CHECK-NOFP16-SD-NEXT: ushll2 v4.2d, v2.4s, #02134; CHECK-NOFP16-SD-NEXT: ushll v2.2d, v2.2s, #02135; CHECK-NOFP16-SD-NEXT: ushll2 v5.2d, v0.4s, #02136; CHECK-NOFP16-SD-NEXT: ushll v6.2d, v0.2s, #02137; CHECK-NOFP16-SD-NEXT: ushll v7.2d, v3.2s, #02138; CHECK-NOFP16-SD-NEXT: ushll2 v16.2d, v1.4s, #02139; CHECK-NOFP16-SD-NEXT: ushll2 v17.2d, v3.4s, #02140; CHECK-NOFP16-SD-NEXT: ushll v18.2d, v1.2s, #02141; CHECK-NOFP16-SD-NEXT: ucvtf v1.2d, v4.2d2142; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v2.2d2143; CHECK-NOFP16-SD-NEXT: ucvtf v3.2d, v5.2d2144; CHECK-NOFP16-SD-NEXT: ucvtf v2.2d, v6.2d2145; CHECK-NOFP16-SD-NEXT: ucvtf v4.2d, v7.2d2146; CHECK-NOFP16-SD-NEXT: ucvtf v7.2d, v16.2d2147; CHECK-NOFP16-SD-NEXT: ucvtf v5.2d, v17.2d2148; CHECK-NOFP16-SD-NEXT: ucvtf v6.2d, v18.2d2149; CHECK-NOFP16-SD-NEXT: ret2150;2151; CHECK-FP16-SD-LABEL: utofp_v16i16_v16f64:2152; CHECK-FP16-SD: // %bb.0: // %entry2153; CHECK-FP16-SD-NEXT: ushll v2.4s, v0.4h, #02154; CHECK-FP16-SD-NEXT: ushll2 v0.4s, v0.8h, #02155; CHECK-FP16-SD-NEXT: ushll v3.4s, v1.4h, #02156; CHECK-FP16-SD-NEXT: ushll2 v1.4s, v1.8h, #02157; CHECK-FP16-SD-NEXT: ushll2 v4.2d, v2.4s, #02158; CHECK-FP16-SD-NEXT: ushll v2.2d, v2.2s, #02159; CHECK-FP16-SD-NEXT: ushll2 v5.2d, v0.4s, #02160; CHECK-FP16-SD-NEXT: ushll v6.2d, v0.2s, #02161; CHECK-FP16-SD-NEXT: ushll v7.2d, v3.2s, #02162; CHECK-FP16-SD-NEXT: ushll2 v16.2d, v1.4s, #02163; CHECK-FP16-SD-NEXT: ushll2 v17.2d, v3.4s, #02164; CHECK-FP16-SD-NEXT: ushll v18.2d, v1.2s, #02165; CHECK-FP16-SD-NEXT: ucvtf v1.2d, v4.2d2166; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v2.2d2167; CHECK-FP16-SD-NEXT: ucvtf v3.2d, v5.2d2168; CHECK-FP16-SD-NEXT: ucvtf v2.2d, v6.2d2169; CHECK-FP16-SD-NEXT: ucvtf v4.2d, v7.2d2170; CHECK-FP16-SD-NEXT: ucvtf v7.2d, v16.2d2171; CHECK-FP16-SD-NEXT: ucvtf v5.2d, v17.2d2172; CHECK-FP16-SD-NEXT: ucvtf v6.2d, v18.2d2173; CHECK-FP16-SD-NEXT: ret2174;2175; CHECK-NOFP16-GI-LABEL: utofp_v16i16_v16f64:2176; CHECK-NOFP16-GI: // %bb.0: // %entry2177; CHECK-NOFP16-GI-NEXT: ushll v2.4s, v0.4h, #02178; CHECK-NOFP16-GI-NEXT: ushll2 v0.4s, v0.8h, #02179; CHECK-NOFP16-GI-NEXT: ushll v3.4s, v1.4h, #02180; CHECK-NOFP16-GI-NEXT: ushll2 v1.4s, v1.8h, #02181; CHECK-NOFP16-GI-NEXT: ushll v4.2d, v2.2s, #02182; CHECK-NOFP16-GI-NEXT: ushll2 v2.2d, v2.4s, #02183; CHECK-NOFP16-GI-NEXT: ushll v5.2d, v0.2s, #02184; CHECK-NOFP16-GI-NEXT: ushll2 v6.2d, v0.4s, #02185; CHECK-NOFP16-GI-NEXT: ushll v7.2d, v3.2s, #02186; CHECK-NOFP16-GI-NEXT: ushll2 v16.2d, v3.4s, #02187; CHECK-NOFP16-GI-NEXT: ushll v17.2d, v1.2s, #02188; CHECK-NOFP16-GI-NEXT: ushll2 v18.2d, v1.4s, #02189; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v4.2d2190; CHECK-NOFP16-GI-NEXT: ucvtf v1.2d, v2.2d2191; CHECK-NOFP16-GI-NEXT: ucvtf v2.2d, v5.2d2192; CHECK-NOFP16-GI-NEXT: ucvtf v3.2d, v6.2d2193; CHECK-NOFP16-GI-NEXT: ucvtf v4.2d, v7.2d2194; CHECK-NOFP16-GI-NEXT: ucvtf v5.2d, v16.2d2195; CHECK-NOFP16-GI-NEXT: ucvtf v6.2d, v17.2d2196; CHECK-NOFP16-GI-NEXT: ucvtf v7.2d, v18.2d2197; CHECK-NOFP16-GI-NEXT: ret2198;2199; CHECK-FP16-GI-LABEL: utofp_v16i16_v16f64:2200; CHECK-FP16-GI: // %bb.0: // %entry2201; CHECK-FP16-GI-NEXT: ushll v2.4s, v0.4h, #02202; CHECK-FP16-GI-NEXT: ushll2 v0.4s, v0.8h, #02203; CHECK-FP16-GI-NEXT: ushll v3.4s, v1.4h, #02204; CHECK-FP16-GI-NEXT: ushll2 v1.4s, v1.8h, #02205; CHECK-FP16-GI-NEXT: ushll v4.2d, v2.2s, #02206; CHECK-FP16-GI-NEXT: ushll2 v2.2d, v2.4s, #02207; CHECK-FP16-GI-NEXT: ushll v5.2d, v0.2s, #02208; CHECK-FP16-GI-NEXT: ushll2 v6.2d, v0.4s, #02209; CHECK-FP16-GI-NEXT: ushll v7.2d, v3.2s, #02210; CHECK-FP16-GI-NEXT: ushll2 v16.2d, v3.4s, #02211; CHECK-FP16-GI-NEXT: ushll v17.2d, v1.2s, #02212; CHECK-FP16-GI-NEXT: ushll2 v18.2d, v1.4s, #02213; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v4.2d2214; CHECK-FP16-GI-NEXT: ucvtf v1.2d, v2.2d2215; CHECK-FP16-GI-NEXT: ucvtf v2.2d, v5.2d2216; CHECK-FP16-GI-NEXT: ucvtf v3.2d, v6.2d2217; CHECK-FP16-GI-NEXT: ucvtf v4.2d, v7.2d2218; CHECK-FP16-GI-NEXT: ucvtf v5.2d, v16.2d2219; CHECK-FP16-GI-NEXT: ucvtf v6.2d, v17.2d2220; CHECK-FP16-GI-NEXT: ucvtf v7.2d, v18.2d2221; CHECK-FP16-GI-NEXT: ret2222entry:2223 %c = uitofp <16 x i16> %a to <16 x double>2224 ret <16 x double> %c2225}2226 2227define <2 x double> @stofp_v2i8_v2f64(<2 x i8> %a) {2228; CHECK-NOFP16-SD-LABEL: stofp_v2i8_v2f64:2229; CHECK-NOFP16-SD: // %bb.0: // %entry2230; CHECK-NOFP16-SD-NEXT: shl v0.2s, v0.2s, #242231; CHECK-NOFP16-SD-NEXT: sshr v0.2s, v0.2s, #242232; CHECK-NOFP16-SD-NEXT: sshll v0.2d, v0.2s, #02233; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v0.2d2234; CHECK-NOFP16-SD-NEXT: ret2235;2236; CHECK-FP16-SD-LABEL: stofp_v2i8_v2f64:2237; CHECK-FP16-SD: // %bb.0: // %entry2238; CHECK-FP16-SD-NEXT: shl v0.2s, v0.2s, #242239; CHECK-FP16-SD-NEXT: sshr v0.2s, v0.2s, #242240; CHECK-FP16-SD-NEXT: sshll v0.2d, v0.2s, #02241; CHECK-FP16-SD-NEXT: scvtf v0.2d, v0.2d2242; CHECK-FP16-SD-NEXT: ret2243;2244; CHECK-NOFP16-GI-LABEL: stofp_v2i8_v2f64:2245; CHECK-NOFP16-GI: // %bb.0: // %entry2246; CHECK-NOFP16-GI-NEXT: ushll v0.2d, v0.2s, #02247; CHECK-NOFP16-GI-NEXT: shl v0.2d, v0.2d, #562248; CHECK-NOFP16-GI-NEXT: sshr v0.2d, v0.2d, #562249; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v0.2d2250; CHECK-NOFP16-GI-NEXT: ret2251;2252; CHECK-FP16-GI-LABEL: stofp_v2i8_v2f64:2253; CHECK-FP16-GI: // %bb.0: // %entry2254; CHECK-FP16-GI-NEXT: ushll v0.2d, v0.2s, #02255; CHECK-FP16-GI-NEXT: shl v0.2d, v0.2d, #562256; CHECK-FP16-GI-NEXT: sshr v0.2d, v0.2d, #562257; CHECK-FP16-GI-NEXT: scvtf v0.2d, v0.2d2258; CHECK-FP16-GI-NEXT: ret2259entry:2260 %c = sitofp <2 x i8> %a to <2 x double>2261 ret <2 x double> %c2262}2263 2264define <2 x double> @utofp_v2i8_v2f64(<2 x i8> %a) {2265; CHECK-NOFP16-SD-LABEL: utofp_v2i8_v2f64:2266; CHECK-NOFP16-SD: // %bb.0: // %entry2267; CHECK-NOFP16-SD-NEXT: movi d1, #0x0000ff000000ff2268; CHECK-NOFP16-SD-NEXT: and v0.8b, v0.8b, v1.8b2269; CHECK-NOFP16-SD-NEXT: ushll v0.2d, v0.2s, #02270; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v0.2d2271; CHECK-NOFP16-SD-NEXT: ret2272;2273; CHECK-FP16-SD-LABEL: utofp_v2i8_v2f64:2274; CHECK-FP16-SD: // %bb.0: // %entry2275; CHECK-FP16-SD-NEXT: movi d1, #0x0000ff000000ff2276; CHECK-FP16-SD-NEXT: and v0.8b, v0.8b, v1.8b2277; CHECK-FP16-SD-NEXT: ushll v0.2d, v0.2s, #02278; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v0.2d2279; CHECK-FP16-SD-NEXT: ret2280;2281; CHECK-NOFP16-GI-LABEL: utofp_v2i8_v2f64:2282; CHECK-NOFP16-GI: // %bb.0: // %entry2283; CHECK-NOFP16-GI-NEXT: movi v1.2d, #0x000000000000ff2284; CHECK-NOFP16-GI-NEXT: ushll v0.2d, v0.2s, #02285; CHECK-NOFP16-GI-NEXT: and v0.16b, v0.16b, v1.16b2286; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v0.2d2287; CHECK-NOFP16-GI-NEXT: ret2288;2289; CHECK-FP16-GI-LABEL: utofp_v2i8_v2f64:2290; CHECK-FP16-GI: // %bb.0: // %entry2291; CHECK-FP16-GI-NEXT: movi v1.2d, #0x000000000000ff2292; CHECK-FP16-GI-NEXT: ushll v0.2d, v0.2s, #02293; CHECK-FP16-GI-NEXT: and v0.16b, v0.16b, v1.16b2294; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v0.2d2295; CHECK-FP16-GI-NEXT: ret2296entry:2297 %c = uitofp <2 x i8> %a to <2 x double>2298 ret <2 x double> %c2299}2300 2301define <3 x double> @stofp_v3i8_v3f64(<3 x i8> %a) {2302; CHECK-NOFP16-SD-LABEL: stofp_v3i8_v3f64:2303; CHECK-NOFP16-SD: // %bb.0: // %entry2304; CHECK-NOFP16-SD-NEXT: fmov s0, w02305; CHECK-NOFP16-SD-NEXT: fmov s1, w22306; CHECK-NOFP16-SD-NEXT: mov v0.s[1], w12307; CHECK-NOFP16-SD-NEXT: shl v1.2s, v1.2s, #242308; CHECK-NOFP16-SD-NEXT: sshr v1.2s, v1.2s, #242309; CHECK-NOFP16-SD-NEXT: shl v0.2s, v0.2s, #242310; CHECK-NOFP16-SD-NEXT: sshll v1.2d, v1.2s, #02311; CHECK-NOFP16-SD-NEXT: sshr v0.2s, v0.2s, #242312; CHECK-NOFP16-SD-NEXT: scvtf v2.2d, v1.2d2313; CHECK-NOFP16-SD-NEXT: sshll v0.2d, v0.2s, #02314; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q22315; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v0.2d2316; CHECK-NOFP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #82317; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q02318; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q12319; CHECK-NOFP16-SD-NEXT: ret2320;2321; CHECK-FP16-SD-LABEL: stofp_v3i8_v3f64:2322; CHECK-FP16-SD: // %bb.0: // %entry2323; CHECK-FP16-SD-NEXT: fmov s0, w02324; CHECK-FP16-SD-NEXT: fmov s1, w22325; CHECK-FP16-SD-NEXT: mov v0.s[1], w12326; CHECK-FP16-SD-NEXT: shl v1.2s, v1.2s, #242327; CHECK-FP16-SD-NEXT: sshr v1.2s, v1.2s, #242328; CHECK-FP16-SD-NEXT: shl v0.2s, v0.2s, #242329; CHECK-FP16-SD-NEXT: sshll v1.2d, v1.2s, #02330; CHECK-FP16-SD-NEXT: sshr v0.2s, v0.2s, #242331; CHECK-FP16-SD-NEXT: scvtf v2.2d, v1.2d2332; CHECK-FP16-SD-NEXT: sshll v0.2d, v0.2s, #02333; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q22334; CHECK-FP16-SD-NEXT: scvtf v0.2d, v0.2d2335; CHECK-FP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #82336; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q02337; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q12338; CHECK-FP16-SD-NEXT: ret2339;2340; CHECK-NOFP16-GI-LABEL: stofp_v3i8_v3f64:2341; CHECK-NOFP16-GI: // %bb.0: // %entry2342; CHECK-NOFP16-GI-NEXT: fmov s0, w02343; CHECK-NOFP16-GI-NEXT: mov v0.h[1], w12344; CHECK-NOFP16-GI-NEXT: mov v0.h[2], w22345; CHECK-NOFP16-GI-NEXT: shl v0.4h, v0.4h, #82346; CHECK-NOFP16-GI-NEXT: sshr v0.4h, v0.4h, #82347; CHECK-NOFP16-GI-NEXT: smov x8, v0.h[0]2348; CHECK-NOFP16-GI-NEXT: smov x9, v0.h[1]2349; CHECK-NOFP16-GI-NEXT: fmov d1, x82350; CHECK-NOFP16-GI-NEXT: smov x8, v0.h[2]2351; CHECK-NOFP16-GI-NEXT: mov v1.d[1], x92352; CHECK-NOFP16-GI-NEXT: smov x9, v0.h[3]2353; CHECK-NOFP16-GI-NEXT: fmov d2, x82354; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v1.2d2355; CHECK-NOFP16-GI-NEXT: mov v2.d[1], x92356; CHECK-NOFP16-GI-NEXT: mov d1, v0.d[1]2357; CHECK-NOFP16-GI-NEXT: scvtf v2.2d, v2.2d2358; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q02359; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q22360; CHECK-NOFP16-GI-NEXT: ret2361;2362; CHECK-FP16-GI-LABEL: stofp_v3i8_v3f64:2363; CHECK-FP16-GI: // %bb.0: // %entry2364; CHECK-FP16-GI-NEXT: fmov s0, w02365; CHECK-FP16-GI-NEXT: mov v0.h[1], w12366; CHECK-FP16-GI-NEXT: mov v0.h[2], w22367; CHECK-FP16-GI-NEXT: shl v0.4h, v0.4h, #82368; CHECK-FP16-GI-NEXT: sshr v0.4h, v0.4h, #82369; CHECK-FP16-GI-NEXT: smov x8, v0.h[0]2370; CHECK-FP16-GI-NEXT: smov x9, v0.h[1]2371; CHECK-FP16-GI-NEXT: fmov d1, x82372; CHECK-FP16-GI-NEXT: smov x8, v0.h[2]2373; CHECK-FP16-GI-NEXT: mov v1.d[1], x92374; CHECK-FP16-GI-NEXT: smov x9, v0.h[3]2375; CHECK-FP16-GI-NEXT: fmov d2, x82376; CHECK-FP16-GI-NEXT: scvtf v0.2d, v1.2d2377; CHECK-FP16-GI-NEXT: mov v2.d[1], x92378; CHECK-FP16-GI-NEXT: mov d1, v0.d[1]2379; CHECK-FP16-GI-NEXT: scvtf v2.2d, v2.2d2380; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q02381; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q22382; CHECK-FP16-GI-NEXT: ret2383entry:2384 %c = sitofp <3 x i8> %a to <3 x double>2385 ret <3 x double> %c2386}2387 2388define <3 x double> @utofp_v3i8_v3f64(<3 x i8> %a) {2389; CHECK-NOFP16-SD-LABEL: utofp_v3i8_v3f64:2390; CHECK-NOFP16-SD: // %bb.0: // %entry2391; CHECK-NOFP16-SD-NEXT: fmov s0, w02392; CHECK-NOFP16-SD-NEXT: movi d1, #0x0000ff000000ff2393; CHECK-NOFP16-SD-NEXT: fmov s2, w22394; CHECK-NOFP16-SD-NEXT: mov v0.s[1], w12395; CHECK-NOFP16-SD-NEXT: and v0.8b, v0.8b, v1.8b2396; CHECK-NOFP16-SD-NEXT: and v1.8b, v2.8b, v1.8b2397; CHECK-NOFP16-SD-NEXT: ushll v0.2d, v0.2s, #02398; CHECK-NOFP16-SD-NEXT: ushll v1.2d, v1.2s, #02399; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v0.2d2400; CHECK-NOFP16-SD-NEXT: ucvtf v2.2d, v1.2d2401; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q22402; CHECK-NOFP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #82403; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q02404; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q12405; CHECK-NOFP16-SD-NEXT: ret2406;2407; CHECK-FP16-SD-LABEL: utofp_v3i8_v3f64:2408; CHECK-FP16-SD: // %bb.0: // %entry2409; CHECK-FP16-SD-NEXT: fmov s0, w02410; CHECK-FP16-SD-NEXT: movi d1, #0x0000ff000000ff2411; CHECK-FP16-SD-NEXT: fmov s2, w22412; CHECK-FP16-SD-NEXT: mov v0.s[1], w12413; CHECK-FP16-SD-NEXT: and v0.8b, v0.8b, v1.8b2414; CHECK-FP16-SD-NEXT: and v1.8b, v2.8b, v1.8b2415; CHECK-FP16-SD-NEXT: ushll v0.2d, v0.2s, #02416; CHECK-FP16-SD-NEXT: ushll v1.2d, v1.2s, #02417; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v0.2d2418; CHECK-FP16-SD-NEXT: ucvtf v2.2d, v1.2d2419; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 killed $q22420; CHECK-FP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #82421; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q02422; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 killed $q12423; CHECK-FP16-SD-NEXT: ret2424;2425; CHECK-NOFP16-GI-LABEL: utofp_v3i8_v3f64:2426; CHECK-NOFP16-GI: // %bb.0: // %entry2427; CHECK-NOFP16-GI-NEXT: fmov s0, w02428; CHECK-NOFP16-GI-NEXT: movi d1, #0xff00ff00ff00ff2429; CHECK-NOFP16-GI-NEXT: mov v0.h[1], w12430; CHECK-NOFP16-GI-NEXT: mov v0.h[2], w22431; CHECK-NOFP16-GI-NEXT: and v0.8b, v0.8b, v1.8b2432; CHECK-NOFP16-GI-NEXT: umov w8, v0.h[0]2433; CHECK-NOFP16-GI-NEXT: umov w9, v0.h[1]2434; CHECK-NOFP16-GI-NEXT: fmov d1, x82435; CHECK-NOFP16-GI-NEXT: umov w8, v0.h[2]2436; CHECK-NOFP16-GI-NEXT: mov v1.d[1], x92437; CHECK-NOFP16-GI-NEXT: umov w9, v0.h[3]2438; CHECK-NOFP16-GI-NEXT: fmov d2, x82439; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v1.2d2440; CHECK-NOFP16-GI-NEXT: mov v2.d[1], x92441; CHECK-NOFP16-GI-NEXT: mov d1, v0.d[1]2442; CHECK-NOFP16-GI-NEXT: ucvtf v2.2d, v2.2d2443; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q02444; CHECK-NOFP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q22445; CHECK-NOFP16-GI-NEXT: ret2446;2447; CHECK-FP16-GI-LABEL: utofp_v3i8_v3f64:2448; CHECK-FP16-GI: // %bb.0: // %entry2449; CHECK-FP16-GI-NEXT: fmov s0, w02450; CHECK-FP16-GI-NEXT: movi d1, #0xff00ff00ff00ff2451; CHECK-FP16-GI-NEXT: mov v0.h[1], w12452; CHECK-FP16-GI-NEXT: mov v0.h[2], w22453; CHECK-FP16-GI-NEXT: and v0.8b, v0.8b, v1.8b2454; CHECK-FP16-GI-NEXT: umov w8, v0.h[0]2455; CHECK-FP16-GI-NEXT: umov w9, v0.h[1]2456; CHECK-FP16-GI-NEXT: fmov d1, x82457; CHECK-FP16-GI-NEXT: umov w8, v0.h[2]2458; CHECK-FP16-GI-NEXT: mov v1.d[1], x92459; CHECK-FP16-GI-NEXT: umov w9, v0.h[3]2460; CHECK-FP16-GI-NEXT: fmov d2, x82461; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v1.2d2462; CHECK-FP16-GI-NEXT: mov v2.d[1], x92463; CHECK-FP16-GI-NEXT: mov d1, v0.d[1]2464; CHECK-FP16-GI-NEXT: ucvtf v2.2d, v2.2d2465; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q02466; CHECK-FP16-GI-NEXT: // kill: def $d2 killed $d2 killed $q22467; CHECK-FP16-GI-NEXT: ret2468entry:2469 %c = uitofp <3 x i8> %a to <3 x double>2470 ret <3 x double> %c2471}2472 2473define <4 x double> @stofp_v4i8_v4f64(<4 x i8> %a) {2474; CHECK-NOFP16-SD-LABEL: stofp_v4i8_v4f64:2475; CHECK-NOFP16-SD: // %bb.0: // %entry2476; CHECK-NOFP16-SD-NEXT: ushll v0.4s, v0.4h, #02477; CHECK-NOFP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #82478; CHECK-NOFP16-SD-NEXT: shl v0.2s, v0.2s, #242479; CHECK-NOFP16-SD-NEXT: sshr v0.2s, v0.2s, #242480; CHECK-NOFP16-SD-NEXT: shl v1.2s, v1.2s, #242481; CHECK-NOFP16-SD-NEXT: sshll v0.2d, v0.2s, #02482; CHECK-NOFP16-SD-NEXT: sshr v1.2s, v1.2s, #242483; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v0.2d2484; CHECK-NOFP16-SD-NEXT: sshll v1.2d, v1.2s, #02485; CHECK-NOFP16-SD-NEXT: scvtf v1.2d, v1.2d2486; CHECK-NOFP16-SD-NEXT: ret2487;2488; CHECK-FP16-SD-LABEL: stofp_v4i8_v4f64:2489; CHECK-FP16-SD: // %bb.0: // %entry2490; CHECK-FP16-SD-NEXT: ushll v0.4s, v0.4h, #02491; CHECK-FP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #82492; CHECK-FP16-SD-NEXT: shl v0.2s, v0.2s, #242493; CHECK-FP16-SD-NEXT: sshr v0.2s, v0.2s, #242494; CHECK-FP16-SD-NEXT: shl v1.2s, v1.2s, #242495; CHECK-FP16-SD-NEXT: sshll v0.2d, v0.2s, #02496; CHECK-FP16-SD-NEXT: sshr v1.2s, v1.2s, #242497; CHECK-FP16-SD-NEXT: scvtf v0.2d, v0.2d2498; CHECK-FP16-SD-NEXT: sshll v1.2d, v1.2s, #02499; CHECK-FP16-SD-NEXT: scvtf v1.2d, v1.2d2500; CHECK-FP16-SD-NEXT: ret2501;2502; CHECK-NOFP16-GI-LABEL: stofp_v4i8_v4f64:2503; CHECK-NOFP16-GI: // %bb.0: // %entry2504; CHECK-NOFP16-GI-NEXT: ushll v0.4s, v0.4h, #02505; CHECK-NOFP16-GI-NEXT: ushll v1.2d, v0.2s, #02506; CHECK-NOFP16-GI-NEXT: ushll2 v0.2d, v0.4s, #02507; CHECK-NOFP16-GI-NEXT: shl v1.2d, v1.2d, #562508; CHECK-NOFP16-GI-NEXT: shl v0.2d, v0.2d, #562509; CHECK-NOFP16-GI-NEXT: sshr v1.2d, v1.2d, #562510; CHECK-NOFP16-GI-NEXT: sshr v2.2d, v0.2d, #562511; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v1.2d2512; CHECK-NOFP16-GI-NEXT: scvtf v1.2d, v2.2d2513; CHECK-NOFP16-GI-NEXT: ret2514;2515; CHECK-FP16-GI-LABEL: stofp_v4i8_v4f64:2516; CHECK-FP16-GI: // %bb.0: // %entry2517; CHECK-FP16-GI-NEXT: ushll v0.4s, v0.4h, #02518; CHECK-FP16-GI-NEXT: ushll v1.2d, v0.2s, #02519; CHECK-FP16-GI-NEXT: ushll2 v0.2d, v0.4s, #02520; CHECK-FP16-GI-NEXT: shl v1.2d, v1.2d, #562521; CHECK-FP16-GI-NEXT: shl v0.2d, v0.2d, #562522; CHECK-FP16-GI-NEXT: sshr v1.2d, v1.2d, #562523; CHECK-FP16-GI-NEXT: sshr v2.2d, v0.2d, #562524; CHECK-FP16-GI-NEXT: scvtf v0.2d, v1.2d2525; CHECK-FP16-GI-NEXT: scvtf v1.2d, v2.2d2526; CHECK-FP16-GI-NEXT: ret2527entry:2528 %c = sitofp <4 x i8> %a to <4 x double>2529 ret <4 x double> %c2530}2531 2532define <4 x double> @utofp_v4i8_v4f64(<4 x i8> %a) {2533; CHECK-NOFP16-SD-LABEL: utofp_v4i8_v4f64:2534; CHECK-NOFP16-SD: // %bb.0: // %entry2535; CHECK-NOFP16-SD-NEXT: ushll v0.4s, v0.4h, #02536; CHECK-NOFP16-SD-NEXT: movi d1, #0x0000ff000000ff2537; CHECK-NOFP16-SD-NEXT: ext v2.16b, v0.16b, v0.16b, #82538; CHECK-NOFP16-SD-NEXT: and v0.8b, v0.8b, v1.8b2539; CHECK-NOFP16-SD-NEXT: and v1.8b, v2.8b, v1.8b2540; CHECK-NOFP16-SD-NEXT: ushll v0.2d, v0.2s, #02541; CHECK-NOFP16-SD-NEXT: ushll v1.2d, v1.2s, #02542; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v0.2d2543; CHECK-NOFP16-SD-NEXT: ucvtf v1.2d, v1.2d2544; CHECK-NOFP16-SD-NEXT: ret2545;2546; CHECK-FP16-SD-LABEL: utofp_v4i8_v4f64:2547; CHECK-FP16-SD: // %bb.0: // %entry2548; CHECK-FP16-SD-NEXT: ushll v0.4s, v0.4h, #02549; CHECK-FP16-SD-NEXT: movi d1, #0x0000ff000000ff2550; CHECK-FP16-SD-NEXT: ext v2.16b, v0.16b, v0.16b, #82551; CHECK-FP16-SD-NEXT: and v0.8b, v0.8b, v1.8b2552; CHECK-FP16-SD-NEXT: and v1.8b, v2.8b, v1.8b2553; CHECK-FP16-SD-NEXT: ushll v0.2d, v0.2s, #02554; CHECK-FP16-SD-NEXT: ushll v1.2d, v1.2s, #02555; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v0.2d2556; CHECK-FP16-SD-NEXT: ucvtf v1.2d, v1.2d2557; CHECK-FP16-SD-NEXT: ret2558;2559; CHECK-NOFP16-GI-LABEL: utofp_v4i8_v4f64:2560; CHECK-NOFP16-GI: // %bb.0: // %entry2561; CHECK-NOFP16-GI-NEXT: ushll v0.4s, v0.4h, #02562; CHECK-NOFP16-GI-NEXT: movi v1.2d, #0x000000000000ff2563; CHECK-NOFP16-GI-NEXT: ushll v2.2d, v0.2s, #02564; CHECK-NOFP16-GI-NEXT: ushll2 v0.2d, v0.4s, #02565; CHECK-NOFP16-GI-NEXT: and v2.16b, v2.16b, v1.16b2566; CHECK-NOFP16-GI-NEXT: and v1.16b, v0.16b, v1.16b2567; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v2.2d2568; CHECK-NOFP16-GI-NEXT: ucvtf v1.2d, v1.2d2569; CHECK-NOFP16-GI-NEXT: ret2570;2571; CHECK-FP16-GI-LABEL: utofp_v4i8_v4f64:2572; CHECK-FP16-GI: // %bb.0: // %entry2573; CHECK-FP16-GI-NEXT: ushll v0.4s, v0.4h, #02574; CHECK-FP16-GI-NEXT: movi v1.2d, #0x000000000000ff2575; CHECK-FP16-GI-NEXT: ushll v2.2d, v0.2s, #02576; CHECK-FP16-GI-NEXT: ushll2 v0.2d, v0.4s, #02577; CHECK-FP16-GI-NEXT: and v2.16b, v2.16b, v1.16b2578; CHECK-FP16-GI-NEXT: and v1.16b, v0.16b, v1.16b2579; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v2.2d2580; CHECK-FP16-GI-NEXT: ucvtf v1.2d, v1.2d2581; CHECK-FP16-GI-NEXT: ret2582entry:2583 %c = uitofp <4 x i8> %a to <4 x double>2584 ret <4 x double> %c2585}2586 2587define <8 x double> @stofp_v8i8_v8f64(<8 x i8> %a) {2588; CHECK-NOFP16-SD-LABEL: stofp_v8i8_v8f64:2589; CHECK-NOFP16-SD: // %bb.0: // %entry2590; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q02591; CHECK-NOFP16-SD-NEXT: mov b1, v0.b[0]2592; CHECK-NOFP16-SD-NEXT: mov b2, v0.b[2]2593; CHECK-NOFP16-SD-NEXT: mov b3, v0.b[4]2594; CHECK-NOFP16-SD-NEXT: mov b4, v0.b[6]2595; CHECK-NOFP16-SD-NEXT: mov v1.b[4], v0.b[1]2596; CHECK-NOFP16-SD-NEXT: mov v2.b[4], v0.b[3]2597; CHECK-NOFP16-SD-NEXT: mov v3.b[4], v0.b[5]2598; CHECK-NOFP16-SD-NEXT: mov v4.b[4], v0.b[7]2599; CHECK-NOFP16-SD-NEXT: shl v0.2s, v1.2s, #242600; CHECK-NOFP16-SD-NEXT: shl v1.2s, v2.2s, #242601; CHECK-NOFP16-SD-NEXT: shl v2.2s, v3.2s, #242602; CHECK-NOFP16-SD-NEXT: shl v3.2s, v4.2s, #242603; CHECK-NOFP16-SD-NEXT: sshr v0.2s, v0.2s, #242604; CHECK-NOFP16-SD-NEXT: sshr v1.2s, v1.2s, #242605; CHECK-NOFP16-SD-NEXT: sshr v2.2s, v2.2s, #242606; CHECK-NOFP16-SD-NEXT: sshr v3.2s, v3.2s, #242607; CHECK-NOFP16-SD-NEXT: sshll v0.2d, v0.2s, #02608; CHECK-NOFP16-SD-NEXT: sshll v1.2d, v1.2s, #02609; CHECK-NOFP16-SD-NEXT: sshll v2.2d, v2.2s, #02610; CHECK-NOFP16-SD-NEXT: sshll v3.2d, v3.2s, #02611; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v0.2d2612; CHECK-NOFP16-SD-NEXT: scvtf v1.2d, v1.2d2613; CHECK-NOFP16-SD-NEXT: scvtf v2.2d, v2.2d2614; CHECK-NOFP16-SD-NEXT: scvtf v3.2d, v3.2d2615; CHECK-NOFP16-SD-NEXT: ret2616;2617; CHECK-FP16-SD-LABEL: stofp_v8i8_v8f64:2618; CHECK-FP16-SD: // %bb.0: // %entry2619; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q02620; CHECK-FP16-SD-NEXT: mov b1, v0.b[0]2621; CHECK-FP16-SD-NEXT: mov b2, v0.b[2]2622; CHECK-FP16-SD-NEXT: mov b3, v0.b[4]2623; CHECK-FP16-SD-NEXT: mov b4, v0.b[6]2624; CHECK-FP16-SD-NEXT: mov v1.b[4], v0.b[1]2625; CHECK-FP16-SD-NEXT: mov v2.b[4], v0.b[3]2626; CHECK-FP16-SD-NEXT: mov v3.b[4], v0.b[5]2627; CHECK-FP16-SD-NEXT: mov v4.b[4], v0.b[7]2628; CHECK-FP16-SD-NEXT: shl v0.2s, v1.2s, #242629; CHECK-FP16-SD-NEXT: shl v1.2s, v2.2s, #242630; CHECK-FP16-SD-NEXT: shl v2.2s, v3.2s, #242631; CHECK-FP16-SD-NEXT: shl v3.2s, v4.2s, #242632; CHECK-FP16-SD-NEXT: sshr v0.2s, v0.2s, #242633; CHECK-FP16-SD-NEXT: sshr v1.2s, v1.2s, #242634; CHECK-FP16-SD-NEXT: sshr v2.2s, v2.2s, #242635; CHECK-FP16-SD-NEXT: sshr v3.2s, v3.2s, #242636; CHECK-FP16-SD-NEXT: sshll v0.2d, v0.2s, #02637; CHECK-FP16-SD-NEXT: sshll v1.2d, v1.2s, #02638; CHECK-FP16-SD-NEXT: sshll v2.2d, v2.2s, #02639; CHECK-FP16-SD-NEXT: sshll v3.2d, v3.2s, #02640; CHECK-FP16-SD-NEXT: scvtf v0.2d, v0.2d2641; CHECK-FP16-SD-NEXT: scvtf v1.2d, v1.2d2642; CHECK-FP16-SD-NEXT: scvtf v2.2d, v2.2d2643; CHECK-FP16-SD-NEXT: scvtf v3.2d, v3.2d2644; CHECK-FP16-SD-NEXT: ret2645;2646; CHECK-NOFP16-GI-LABEL: stofp_v8i8_v8f64:2647; CHECK-NOFP16-GI: // %bb.0: // %entry2648; CHECK-NOFP16-GI-NEXT: sshll v0.8h, v0.8b, #02649; CHECK-NOFP16-GI-NEXT: sshll v1.4s, v0.4h, #02650; CHECK-NOFP16-GI-NEXT: sshll2 v0.4s, v0.8h, #02651; CHECK-NOFP16-GI-NEXT: sshll v2.2d, v1.2s, #02652; CHECK-NOFP16-GI-NEXT: sshll2 v1.2d, v1.4s, #02653; CHECK-NOFP16-GI-NEXT: sshll v3.2d, v0.2s, #02654; CHECK-NOFP16-GI-NEXT: sshll2 v4.2d, v0.4s, #02655; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v2.2d2656; CHECK-NOFP16-GI-NEXT: scvtf v1.2d, v1.2d2657; CHECK-NOFP16-GI-NEXT: scvtf v2.2d, v3.2d2658; CHECK-NOFP16-GI-NEXT: scvtf v3.2d, v4.2d2659; CHECK-NOFP16-GI-NEXT: ret2660;2661; CHECK-FP16-GI-LABEL: stofp_v8i8_v8f64:2662; CHECK-FP16-GI: // %bb.0: // %entry2663; CHECK-FP16-GI-NEXT: sshll v0.8h, v0.8b, #02664; CHECK-FP16-GI-NEXT: sshll v1.4s, v0.4h, #02665; CHECK-FP16-GI-NEXT: sshll2 v0.4s, v0.8h, #02666; CHECK-FP16-GI-NEXT: sshll v2.2d, v1.2s, #02667; CHECK-FP16-GI-NEXT: sshll2 v1.2d, v1.4s, #02668; CHECK-FP16-GI-NEXT: sshll v3.2d, v0.2s, #02669; CHECK-FP16-GI-NEXT: sshll2 v4.2d, v0.4s, #02670; CHECK-FP16-GI-NEXT: scvtf v0.2d, v2.2d2671; CHECK-FP16-GI-NEXT: scvtf v1.2d, v1.2d2672; CHECK-FP16-GI-NEXT: scvtf v2.2d, v3.2d2673; CHECK-FP16-GI-NEXT: scvtf v3.2d, v4.2d2674; CHECK-FP16-GI-NEXT: ret2675entry:2676 %c = sitofp <8 x i8> %a to <8 x double>2677 ret <8 x double> %c2678}2679 2680define <8 x double> @utofp_v8i8_v8f64(<8 x i8> %a) {2681; CHECK-NOFP16-SD-LABEL: utofp_v8i8_v8f64:2682; CHECK-NOFP16-SD: // %bb.0: // %entry2683; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q02684; CHECK-NOFP16-SD-NEXT: mov b2, v0.b[0]2685; CHECK-NOFP16-SD-NEXT: mov b3, v0.b[2]2686; CHECK-NOFP16-SD-NEXT: mov b4, v0.b[4]2687; CHECK-NOFP16-SD-NEXT: mov b5, v0.b[6]2688; CHECK-NOFP16-SD-NEXT: movi d1, #0x0000ff000000ff2689; CHECK-NOFP16-SD-NEXT: mov v2.b[4], v0.b[1]2690; CHECK-NOFP16-SD-NEXT: mov v3.b[4], v0.b[3]2691; CHECK-NOFP16-SD-NEXT: mov v4.b[4], v0.b[5]2692; CHECK-NOFP16-SD-NEXT: mov v5.b[4], v0.b[7]2693; CHECK-NOFP16-SD-NEXT: and v0.8b, v2.8b, v1.8b2694; CHECK-NOFP16-SD-NEXT: and v2.8b, v3.8b, v1.8b2695; CHECK-NOFP16-SD-NEXT: and v3.8b, v4.8b, v1.8b2696; CHECK-NOFP16-SD-NEXT: and v1.8b, v5.8b, v1.8b2697; CHECK-NOFP16-SD-NEXT: ushll v0.2d, v0.2s, #02698; CHECK-NOFP16-SD-NEXT: ushll v2.2d, v2.2s, #02699; CHECK-NOFP16-SD-NEXT: ushll v3.2d, v3.2s, #02700; CHECK-NOFP16-SD-NEXT: ushll v4.2d, v1.2s, #02701; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v0.2d2702; CHECK-NOFP16-SD-NEXT: ucvtf v1.2d, v2.2d2703; CHECK-NOFP16-SD-NEXT: ucvtf v2.2d, v3.2d2704; CHECK-NOFP16-SD-NEXT: ucvtf v3.2d, v4.2d2705; CHECK-NOFP16-SD-NEXT: ret2706;2707; CHECK-FP16-SD-LABEL: utofp_v8i8_v8f64:2708; CHECK-FP16-SD: // %bb.0: // %entry2709; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q02710; CHECK-FP16-SD-NEXT: mov b2, v0.b[0]2711; CHECK-FP16-SD-NEXT: mov b3, v0.b[2]2712; CHECK-FP16-SD-NEXT: mov b4, v0.b[4]2713; CHECK-FP16-SD-NEXT: mov b5, v0.b[6]2714; CHECK-FP16-SD-NEXT: movi d1, #0x0000ff000000ff2715; CHECK-FP16-SD-NEXT: mov v2.b[4], v0.b[1]2716; CHECK-FP16-SD-NEXT: mov v3.b[4], v0.b[3]2717; CHECK-FP16-SD-NEXT: mov v4.b[4], v0.b[5]2718; CHECK-FP16-SD-NEXT: mov v5.b[4], v0.b[7]2719; CHECK-FP16-SD-NEXT: and v0.8b, v2.8b, v1.8b2720; CHECK-FP16-SD-NEXT: and v2.8b, v3.8b, v1.8b2721; CHECK-FP16-SD-NEXT: and v3.8b, v4.8b, v1.8b2722; CHECK-FP16-SD-NEXT: and v1.8b, v5.8b, v1.8b2723; CHECK-FP16-SD-NEXT: ushll v0.2d, v0.2s, #02724; CHECK-FP16-SD-NEXT: ushll v2.2d, v2.2s, #02725; CHECK-FP16-SD-NEXT: ushll v3.2d, v3.2s, #02726; CHECK-FP16-SD-NEXT: ushll v4.2d, v1.2s, #02727; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v0.2d2728; CHECK-FP16-SD-NEXT: ucvtf v1.2d, v2.2d2729; CHECK-FP16-SD-NEXT: ucvtf v2.2d, v3.2d2730; CHECK-FP16-SD-NEXT: ucvtf v3.2d, v4.2d2731; CHECK-FP16-SD-NEXT: ret2732;2733; CHECK-NOFP16-GI-LABEL: utofp_v8i8_v8f64:2734; CHECK-NOFP16-GI: // %bb.0: // %entry2735; CHECK-NOFP16-GI-NEXT: ushll v0.8h, v0.8b, #02736; CHECK-NOFP16-GI-NEXT: ushll v1.4s, v0.4h, #02737; CHECK-NOFP16-GI-NEXT: ushll2 v0.4s, v0.8h, #02738; CHECK-NOFP16-GI-NEXT: ushll v2.2d, v1.2s, #02739; CHECK-NOFP16-GI-NEXT: ushll2 v1.2d, v1.4s, #02740; CHECK-NOFP16-GI-NEXT: ushll v3.2d, v0.2s, #02741; CHECK-NOFP16-GI-NEXT: ushll2 v4.2d, v0.4s, #02742; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v2.2d2743; CHECK-NOFP16-GI-NEXT: ucvtf v1.2d, v1.2d2744; CHECK-NOFP16-GI-NEXT: ucvtf v2.2d, v3.2d2745; CHECK-NOFP16-GI-NEXT: ucvtf v3.2d, v4.2d2746; CHECK-NOFP16-GI-NEXT: ret2747;2748; CHECK-FP16-GI-LABEL: utofp_v8i8_v8f64:2749; CHECK-FP16-GI: // %bb.0: // %entry2750; CHECK-FP16-GI-NEXT: ushll v0.8h, v0.8b, #02751; CHECK-FP16-GI-NEXT: ushll v1.4s, v0.4h, #02752; CHECK-FP16-GI-NEXT: ushll2 v0.4s, v0.8h, #02753; CHECK-FP16-GI-NEXT: ushll v2.2d, v1.2s, #02754; CHECK-FP16-GI-NEXT: ushll2 v1.2d, v1.4s, #02755; CHECK-FP16-GI-NEXT: ushll v3.2d, v0.2s, #02756; CHECK-FP16-GI-NEXT: ushll2 v4.2d, v0.4s, #02757; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v2.2d2758; CHECK-FP16-GI-NEXT: ucvtf v1.2d, v1.2d2759; CHECK-FP16-GI-NEXT: ucvtf v2.2d, v3.2d2760; CHECK-FP16-GI-NEXT: ucvtf v3.2d, v4.2d2761; CHECK-FP16-GI-NEXT: ret2762entry:2763 %c = uitofp <8 x i8> %a to <8 x double>2764 ret <8 x double> %c2765}2766 2767define <16 x double> @stofp_v16i8_v16f64(<16 x i8> %a) {2768; CHECK-NOFP16-SD-LABEL: stofp_v16i8_v16f64:2769; CHECK-NOFP16-SD: // %bb.0: // %entry2770; CHECK-NOFP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #82771; CHECK-NOFP16-SD-NEXT: mov b2, v0.b[0]2772; CHECK-NOFP16-SD-NEXT: mov b3, v0.b[2]2773; CHECK-NOFP16-SD-NEXT: mov b4, v0.b[4]2774; CHECK-NOFP16-SD-NEXT: mov b5, v0.b[6]2775; CHECK-NOFP16-SD-NEXT: mov b6, v1.b[0]2776; CHECK-NOFP16-SD-NEXT: mov b7, v1.b[2]2777; CHECK-NOFP16-SD-NEXT: mov b16, v1.b[4]2778; CHECK-NOFP16-SD-NEXT: mov b17, v1.b[6]2779; CHECK-NOFP16-SD-NEXT: mov v2.b[4], v0.b[1]2780; CHECK-NOFP16-SD-NEXT: mov v3.b[4], v0.b[3]2781; CHECK-NOFP16-SD-NEXT: mov v4.b[4], v0.b[5]2782; CHECK-NOFP16-SD-NEXT: mov v5.b[4], v0.b[7]2783; CHECK-NOFP16-SD-NEXT: mov v6.b[4], v1.b[1]2784; CHECK-NOFP16-SD-NEXT: mov v7.b[4], v1.b[3]2785; CHECK-NOFP16-SD-NEXT: mov v16.b[4], v1.b[5]2786; CHECK-NOFP16-SD-NEXT: mov v17.b[4], v1.b[7]2787; CHECK-NOFP16-SD-NEXT: shl v0.2s, v2.2s, #242788; CHECK-NOFP16-SD-NEXT: shl v1.2s, v3.2s, #242789; CHECK-NOFP16-SD-NEXT: shl v2.2s, v4.2s, #242790; CHECK-NOFP16-SD-NEXT: shl v3.2s, v5.2s, #242791; CHECK-NOFP16-SD-NEXT: shl v4.2s, v6.2s, #242792; CHECK-NOFP16-SD-NEXT: shl v5.2s, v7.2s, #242793; CHECK-NOFP16-SD-NEXT: shl v6.2s, v16.2s, #242794; CHECK-NOFP16-SD-NEXT: shl v7.2s, v17.2s, #242795; CHECK-NOFP16-SD-NEXT: sshr v0.2s, v0.2s, #242796; CHECK-NOFP16-SD-NEXT: sshr v1.2s, v1.2s, #242797; CHECK-NOFP16-SD-NEXT: sshr v2.2s, v2.2s, #242798; CHECK-NOFP16-SD-NEXT: sshr v3.2s, v3.2s, #242799; CHECK-NOFP16-SD-NEXT: sshr v4.2s, v4.2s, #242800; CHECK-NOFP16-SD-NEXT: sshr v5.2s, v5.2s, #242801; CHECK-NOFP16-SD-NEXT: sshr v6.2s, v6.2s, #242802; CHECK-NOFP16-SD-NEXT: sshr v7.2s, v7.2s, #242803; CHECK-NOFP16-SD-NEXT: sshll v0.2d, v0.2s, #02804; CHECK-NOFP16-SD-NEXT: sshll v1.2d, v1.2s, #02805; CHECK-NOFP16-SD-NEXT: sshll v2.2d, v2.2s, #02806; CHECK-NOFP16-SD-NEXT: sshll v3.2d, v3.2s, #02807; CHECK-NOFP16-SD-NEXT: sshll v4.2d, v4.2s, #02808; CHECK-NOFP16-SD-NEXT: sshll v5.2d, v5.2s, #02809; CHECK-NOFP16-SD-NEXT: sshll v6.2d, v6.2s, #02810; CHECK-NOFP16-SD-NEXT: sshll v7.2d, v7.2s, #02811; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v0.2d2812; CHECK-NOFP16-SD-NEXT: scvtf v1.2d, v1.2d2813; CHECK-NOFP16-SD-NEXT: scvtf v2.2d, v2.2d2814; CHECK-NOFP16-SD-NEXT: scvtf v3.2d, v3.2d2815; CHECK-NOFP16-SD-NEXT: scvtf v4.2d, v4.2d2816; CHECK-NOFP16-SD-NEXT: scvtf v5.2d, v5.2d2817; CHECK-NOFP16-SD-NEXT: scvtf v6.2d, v6.2d2818; CHECK-NOFP16-SD-NEXT: scvtf v7.2d, v7.2d2819; CHECK-NOFP16-SD-NEXT: ret2820;2821; CHECK-FP16-SD-LABEL: stofp_v16i8_v16f64:2822; CHECK-FP16-SD: // %bb.0: // %entry2823; CHECK-FP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #82824; CHECK-FP16-SD-NEXT: mov b2, v0.b[0]2825; CHECK-FP16-SD-NEXT: mov b3, v0.b[2]2826; CHECK-FP16-SD-NEXT: mov b4, v0.b[4]2827; CHECK-FP16-SD-NEXT: mov b5, v0.b[6]2828; CHECK-FP16-SD-NEXT: mov b6, v1.b[0]2829; CHECK-FP16-SD-NEXT: mov b7, v1.b[2]2830; CHECK-FP16-SD-NEXT: mov b16, v1.b[4]2831; CHECK-FP16-SD-NEXT: mov b17, v1.b[6]2832; CHECK-FP16-SD-NEXT: mov v2.b[4], v0.b[1]2833; CHECK-FP16-SD-NEXT: mov v3.b[4], v0.b[3]2834; CHECK-FP16-SD-NEXT: mov v4.b[4], v0.b[5]2835; CHECK-FP16-SD-NEXT: mov v5.b[4], v0.b[7]2836; CHECK-FP16-SD-NEXT: mov v6.b[4], v1.b[1]2837; CHECK-FP16-SD-NEXT: mov v7.b[4], v1.b[3]2838; CHECK-FP16-SD-NEXT: mov v16.b[4], v1.b[5]2839; CHECK-FP16-SD-NEXT: mov v17.b[4], v1.b[7]2840; CHECK-FP16-SD-NEXT: shl v0.2s, v2.2s, #242841; CHECK-FP16-SD-NEXT: shl v1.2s, v3.2s, #242842; CHECK-FP16-SD-NEXT: shl v2.2s, v4.2s, #242843; CHECK-FP16-SD-NEXT: shl v3.2s, v5.2s, #242844; CHECK-FP16-SD-NEXT: shl v4.2s, v6.2s, #242845; CHECK-FP16-SD-NEXT: shl v5.2s, v7.2s, #242846; CHECK-FP16-SD-NEXT: shl v6.2s, v16.2s, #242847; CHECK-FP16-SD-NEXT: shl v7.2s, v17.2s, #242848; CHECK-FP16-SD-NEXT: sshr v0.2s, v0.2s, #242849; CHECK-FP16-SD-NEXT: sshr v1.2s, v1.2s, #242850; CHECK-FP16-SD-NEXT: sshr v2.2s, v2.2s, #242851; CHECK-FP16-SD-NEXT: sshr v3.2s, v3.2s, #242852; CHECK-FP16-SD-NEXT: sshr v4.2s, v4.2s, #242853; CHECK-FP16-SD-NEXT: sshr v5.2s, v5.2s, #242854; CHECK-FP16-SD-NEXT: sshr v6.2s, v6.2s, #242855; CHECK-FP16-SD-NEXT: sshr v7.2s, v7.2s, #242856; CHECK-FP16-SD-NEXT: sshll v0.2d, v0.2s, #02857; CHECK-FP16-SD-NEXT: sshll v1.2d, v1.2s, #02858; CHECK-FP16-SD-NEXT: sshll v2.2d, v2.2s, #02859; CHECK-FP16-SD-NEXT: sshll v3.2d, v3.2s, #02860; CHECK-FP16-SD-NEXT: sshll v4.2d, v4.2s, #02861; CHECK-FP16-SD-NEXT: sshll v5.2d, v5.2s, #02862; CHECK-FP16-SD-NEXT: sshll v6.2d, v6.2s, #02863; CHECK-FP16-SD-NEXT: sshll v7.2d, v7.2s, #02864; CHECK-FP16-SD-NEXT: scvtf v0.2d, v0.2d2865; CHECK-FP16-SD-NEXT: scvtf v1.2d, v1.2d2866; CHECK-FP16-SD-NEXT: scvtf v2.2d, v2.2d2867; CHECK-FP16-SD-NEXT: scvtf v3.2d, v3.2d2868; CHECK-FP16-SD-NEXT: scvtf v4.2d, v4.2d2869; CHECK-FP16-SD-NEXT: scvtf v5.2d, v5.2d2870; CHECK-FP16-SD-NEXT: scvtf v6.2d, v6.2d2871; CHECK-FP16-SD-NEXT: scvtf v7.2d, v7.2d2872; CHECK-FP16-SD-NEXT: ret2873;2874; CHECK-NOFP16-GI-LABEL: stofp_v16i8_v16f64:2875; CHECK-NOFP16-GI: // %bb.0: // %entry2876; CHECK-NOFP16-GI-NEXT: sshll v1.8h, v0.8b, #02877; CHECK-NOFP16-GI-NEXT: sshll2 v0.8h, v0.16b, #02878; CHECK-NOFP16-GI-NEXT: sshll v2.4s, v1.4h, #02879; CHECK-NOFP16-GI-NEXT: sshll2 v1.4s, v1.8h, #02880; CHECK-NOFP16-GI-NEXT: sshll v3.4s, v0.4h, #02881; CHECK-NOFP16-GI-NEXT: sshll2 v0.4s, v0.8h, #02882; CHECK-NOFP16-GI-NEXT: sshll v4.2d, v2.2s, #02883; CHECK-NOFP16-GI-NEXT: sshll2 v2.2d, v2.4s, #02884; CHECK-NOFP16-GI-NEXT: sshll v5.2d, v1.2s, #02885; CHECK-NOFP16-GI-NEXT: sshll2 v6.2d, v1.4s, #02886; CHECK-NOFP16-GI-NEXT: sshll v7.2d, v3.2s, #02887; CHECK-NOFP16-GI-NEXT: sshll2 v16.2d, v3.4s, #02888; CHECK-NOFP16-GI-NEXT: sshll v17.2d, v0.2s, #02889; CHECK-NOFP16-GI-NEXT: sshll2 v18.2d, v0.4s, #02890; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v4.2d2891; CHECK-NOFP16-GI-NEXT: scvtf v1.2d, v2.2d2892; CHECK-NOFP16-GI-NEXT: scvtf v2.2d, v5.2d2893; CHECK-NOFP16-GI-NEXT: scvtf v3.2d, v6.2d2894; CHECK-NOFP16-GI-NEXT: scvtf v4.2d, v7.2d2895; CHECK-NOFP16-GI-NEXT: scvtf v5.2d, v16.2d2896; CHECK-NOFP16-GI-NEXT: scvtf v6.2d, v17.2d2897; CHECK-NOFP16-GI-NEXT: scvtf v7.2d, v18.2d2898; CHECK-NOFP16-GI-NEXT: ret2899;2900; CHECK-FP16-GI-LABEL: stofp_v16i8_v16f64:2901; CHECK-FP16-GI: // %bb.0: // %entry2902; CHECK-FP16-GI-NEXT: sshll v1.8h, v0.8b, #02903; CHECK-FP16-GI-NEXT: sshll2 v0.8h, v0.16b, #02904; CHECK-FP16-GI-NEXT: sshll v2.4s, v1.4h, #02905; CHECK-FP16-GI-NEXT: sshll2 v1.4s, v1.8h, #02906; CHECK-FP16-GI-NEXT: sshll v3.4s, v0.4h, #02907; CHECK-FP16-GI-NEXT: sshll2 v0.4s, v0.8h, #02908; CHECK-FP16-GI-NEXT: sshll v4.2d, v2.2s, #02909; CHECK-FP16-GI-NEXT: sshll2 v2.2d, v2.4s, #02910; CHECK-FP16-GI-NEXT: sshll v5.2d, v1.2s, #02911; CHECK-FP16-GI-NEXT: sshll2 v6.2d, v1.4s, #02912; CHECK-FP16-GI-NEXT: sshll v7.2d, v3.2s, #02913; CHECK-FP16-GI-NEXT: sshll2 v16.2d, v3.4s, #02914; CHECK-FP16-GI-NEXT: sshll v17.2d, v0.2s, #02915; CHECK-FP16-GI-NEXT: sshll2 v18.2d, v0.4s, #02916; CHECK-FP16-GI-NEXT: scvtf v0.2d, v4.2d2917; CHECK-FP16-GI-NEXT: scvtf v1.2d, v2.2d2918; CHECK-FP16-GI-NEXT: scvtf v2.2d, v5.2d2919; CHECK-FP16-GI-NEXT: scvtf v3.2d, v6.2d2920; CHECK-FP16-GI-NEXT: scvtf v4.2d, v7.2d2921; CHECK-FP16-GI-NEXT: scvtf v5.2d, v16.2d2922; CHECK-FP16-GI-NEXT: scvtf v6.2d, v17.2d2923; CHECK-FP16-GI-NEXT: scvtf v7.2d, v18.2d2924; CHECK-FP16-GI-NEXT: ret2925entry:2926 %c = sitofp <16 x i8> %a to <16 x double>2927 ret <16 x double> %c2928}2929 2930define <16 x double> @utofp_v16i8_v16f64(<16 x i8> %a) {2931; CHECK-NOFP16-SD-LABEL: utofp_v16i8_v16f64:2932; CHECK-NOFP16-SD: // %bb.0: // %entry2933; CHECK-NOFP16-SD-NEXT: ext v2.16b, v0.16b, v0.16b, #82934; CHECK-NOFP16-SD-NEXT: mov b3, v0.b[0]2935; CHECK-NOFP16-SD-NEXT: mov b4, v0.b[2]2936; CHECK-NOFP16-SD-NEXT: mov b5, v0.b[4]2937; CHECK-NOFP16-SD-NEXT: mov b6, v0.b[6]2938; CHECK-NOFP16-SD-NEXT: movi d1, #0x0000ff000000ff2939; CHECK-NOFP16-SD-NEXT: mov b7, v2.b[0]2940; CHECK-NOFP16-SD-NEXT: mov b16, v2.b[2]2941; CHECK-NOFP16-SD-NEXT: mov b17, v2.b[4]2942; CHECK-NOFP16-SD-NEXT: mov b18, v2.b[6]2943; CHECK-NOFP16-SD-NEXT: mov v3.b[4], v0.b[1]2944; CHECK-NOFP16-SD-NEXT: mov v4.b[4], v0.b[3]2945; CHECK-NOFP16-SD-NEXT: mov v5.b[4], v0.b[5]2946; CHECK-NOFP16-SD-NEXT: mov v6.b[4], v0.b[7]2947; CHECK-NOFP16-SD-NEXT: mov v7.b[4], v2.b[1]2948; CHECK-NOFP16-SD-NEXT: mov v16.b[4], v2.b[3]2949; CHECK-NOFP16-SD-NEXT: mov v17.b[4], v2.b[5]2950; CHECK-NOFP16-SD-NEXT: mov v18.b[4], v2.b[7]2951; CHECK-NOFP16-SD-NEXT: and v0.8b, v3.8b, v1.8b2952; CHECK-NOFP16-SD-NEXT: and v2.8b, v4.8b, v1.8b2953; CHECK-NOFP16-SD-NEXT: and v3.8b, v5.8b, v1.8b2954; CHECK-NOFP16-SD-NEXT: and v4.8b, v6.8b, v1.8b2955; CHECK-NOFP16-SD-NEXT: and v5.8b, v7.8b, v1.8b2956; CHECK-NOFP16-SD-NEXT: and v6.8b, v16.8b, v1.8b2957; CHECK-NOFP16-SD-NEXT: and v7.8b, v17.8b, v1.8b2958; CHECK-NOFP16-SD-NEXT: and v1.8b, v18.8b, v1.8b2959; CHECK-NOFP16-SD-NEXT: ushll v0.2d, v0.2s, #02960; CHECK-NOFP16-SD-NEXT: ushll v2.2d, v2.2s, #02961; CHECK-NOFP16-SD-NEXT: ushll v3.2d, v3.2s, #02962; CHECK-NOFP16-SD-NEXT: ushll v4.2d, v4.2s, #02963; CHECK-NOFP16-SD-NEXT: ushll v5.2d, v5.2s, #02964; CHECK-NOFP16-SD-NEXT: ushll v6.2d, v6.2s, #02965; CHECK-NOFP16-SD-NEXT: ushll v7.2d, v7.2s, #02966; CHECK-NOFP16-SD-NEXT: ushll v16.2d, v1.2s, #02967; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v0.2d2968; CHECK-NOFP16-SD-NEXT: ucvtf v1.2d, v2.2d2969; CHECK-NOFP16-SD-NEXT: ucvtf v2.2d, v3.2d2970; CHECK-NOFP16-SD-NEXT: ucvtf v3.2d, v4.2d2971; CHECK-NOFP16-SD-NEXT: ucvtf v4.2d, v5.2d2972; CHECK-NOFP16-SD-NEXT: ucvtf v5.2d, v6.2d2973; CHECK-NOFP16-SD-NEXT: ucvtf v6.2d, v7.2d2974; CHECK-NOFP16-SD-NEXT: ucvtf v7.2d, v16.2d2975; CHECK-NOFP16-SD-NEXT: ret2976;2977; CHECK-FP16-SD-LABEL: utofp_v16i8_v16f64:2978; CHECK-FP16-SD: // %bb.0: // %entry2979; CHECK-FP16-SD-NEXT: ext v2.16b, v0.16b, v0.16b, #82980; CHECK-FP16-SD-NEXT: mov b3, v0.b[0]2981; CHECK-FP16-SD-NEXT: mov b4, v0.b[2]2982; CHECK-FP16-SD-NEXT: mov b5, v0.b[4]2983; CHECK-FP16-SD-NEXT: mov b6, v0.b[6]2984; CHECK-FP16-SD-NEXT: movi d1, #0x0000ff000000ff2985; CHECK-FP16-SD-NEXT: mov b7, v2.b[0]2986; CHECK-FP16-SD-NEXT: mov b16, v2.b[2]2987; CHECK-FP16-SD-NEXT: mov b17, v2.b[4]2988; CHECK-FP16-SD-NEXT: mov b18, v2.b[6]2989; CHECK-FP16-SD-NEXT: mov v3.b[4], v0.b[1]2990; CHECK-FP16-SD-NEXT: mov v4.b[4], v0.b[3]2991; CHECK-FP16-SD-NEXT: mov v5.b[4], v0.b[5]2992; CHECK-FP16-SD-NEXT: mov v6.b[4], v0.b[7]2993; CHECK-FP16-SD-NEXT: mov v7.b[4], v2.b[1]2994; CHECK-FP16-SD-NEXT: mov v16.b[4], v2.b[3]2995; CHECK-FP16-SD-NEXT: mov v17.b[4], v2.b[5]2996; CHECK-FP16-SD-NEXT: mov v18.b[4], v2.b[7]2997; CHECK-FP16-SD-NEXT: and v0.8b, v3.8b, v1.8b2998; CHECK-FP16-SD-NEXT: and v2.8b, v4.8b, v1.8b2999; CHECK-FP16-SD-NEXT: and v3.8b, v5.8b, v1.8b3000; CHECK-FP16-SD-NEXT: and v4.8b, v6.8b, v1.8b3001; CHECK-FP16-SD-NEXT: and v5.8b, v7.8b, v1.8b3002; CHECK-FP16-SD-NEXT: and v6.8b, v16.8b, v1.8b3003; CHECK-FP16-SD-NEXT: and v7.8b, v17.8b, v1.8b3004; CHECK-FP16-SD-NEXT: and v1.8b, v18.8b, v1.8b3005; CHECK-FP16-SD-NEXT: ushll v0.2d, v0.2s, #03006; CHECK-FP16-SD-NEXT: ushll v2.2d, v2.2s, #03007; CHECK-FP16-SD-NEXT: ushll v3.2d, v3.2s, #03008; CHECK-FP16-SD-NEXT: ushll v4.2d, v4.2s, #03009; CHECK-FP16-SD-NEXT: ushll v5.2d, v5.2s, #03010; CHECK-FP16-SD-NEXT: ushll v6.2d, v6.2s, #03011; CHECK-FP16-SD-NEXT: ushll v7.2d, v7.2s, #03012; CHECK-FP16-SD-NEXT: ushll v16.2d, v1.2s, #03013; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v0.2d3014; CHECK-FP16-SD-NEXT: ucvtf v1.2d, v2.2d3015; CHECK-FP16-SD-NEXT: ucvtf v2.2d, v3.2d3016; CHECK-FP16-SD-NEXT: ucvtf v3.2d, v4.2d3017; CHECK-FP16-SD-NEXT: ucvtf v4.2d, v5.2d3018; CHECK-FP16-SD-NEXT: ucvtf v5.2d, v6.2d3019; CHECK-FP16-SD-NEXT: ucvtf v6.2d, v7.2d3020; CHECK-FP16-SD-NEXT: ucvtf v7.2d, v16.2d3021; CHECK-FP16-SD-NEXT: ret3022;3023; CHECK-NOFP16-GI-LABEL: utofp_v16i8_v16f64:3024; CHECK-NOFP16-GI: // %bb.0: // %entry3025; CHECK-NOFP16-GI-NEXT: ushll v1.8h, v0.8b, #03026; CHECK-NOFP16-GI-NEXT: ushll2 v0.8h, v0.16b, #03027; CHECK-NOFP16-GI-NEXT: ushll v2.4s, v1.4h, #03028; CHECK-NOFP16-GI-NEXT: ushll2 v1.4s, v1.8h, #03029; CHECK-NOFP16-GI-NEXT: ushll v3.4s, v0.4h, #03030; CHECK-NOFP16-GI-NEXT: ushll2 v0.4s, v0.8h, #03031; CHECK-NOFP16-GI-NEXT: ushll v4.2d, v2.2s, #03032; CHECK-NOFP16-GI-NEXT: ushll2 v2.2d, v2.4s, #03033; CHECK-NOFP16-GI-NEXT: ushll v5.2d, v1.2s, #03034; CHECK-NOFP16-GI-NEXT: ushll2 v6.2d, v1.4s, #03035; CHECK-NOFP16-GI-NEXT: ushll v7.2d, v3.2s, #03036; CHECK-NOFP16-GI-NEXT: ushll2 v16.2d, v3.4s, #03037; CHECK-NOFP16-GI-NEXT: ushll v17.2d, v0.2s, #03038; CHECK-NOFP16-GI-NEXT: ushll2 v18.2d, v0.4s, #03039; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v4.2d3040; CHECK-NOFP16-GI-NEXT: ucvtf v1.2d, v2.2d3041; CHECK-NOFP16-GI-NEXT: ucvtf v2.2d, v5.2d3042; CHECK-NOFP16-GI-NEXT: ucvtf v3.2d, v6.2d3043; CHECK-NOFP16-GI-NEXT: ucvtf v4.2d, v7.2d3044; CHECK-NOFP16-GI-NEXT: ucvtf v5.2d, v16.2d3045; CHECK-NOFP16-GI-NEXT: ucvtf v6.2d, v17.2d3046; CHECK-NOFP16-GI-NEXT: ucvtf v7.2d, v18.2d3047; CHECK-NOFP16-GI-NEXT: ret3048;3049; CHECK-FP16-GI-LABEL: utofp_v16i8_v16f64:3050; CHECK-FP16-GI: // %bb.0: // %entry3051; CHECK-FP16-GI-NEXT: ushll v1.8h, v0.8b, #03052; CHECK-FP16-GI-NEXT: ushll2 v0.8h, v0.16b, #03053; CHECK-FP16-GI-NEXT: ushll v2.4s, v1.4h, #03054; CHECK-FP16-GI-NEXT: ushll2 v1.4s, v1.8h, #03055; CHECK-FP16-GI-NEXT: ushll v3.4s, v0.4h, #03056; CHECK-FP16-GI-NEXT: ushll2 v0.4s, v0.8h, #03057; CHECK-FP16-GI-NEXT: ushll v4.2d, v2.2s, #03058; CHECK-FP16-GI-NEXT: ushll2 v2.2d, v2.4s, #03059; CHECK-FP16-GI-NEXT: ushll v5.2d, v1.2s, #03060; CHECK-FP16-GI-NEXT: ushll2 v6.2d, v1.4s, #03061; CHECK-FP16-GI-NEXT: ushll v7.2d, v3.2s, #03062; CHECK-FP16-GI-NEXT: ushll2 v16.2d, v3.4s, #03063; CHECK-FP16-GI-NEXT: ushll v17.2d, v0.2s, #03064; CHECK-FP16-GI-NEXT: ushll2 v18.2d, v0.4s, #03065; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v4.2d3066; CHECK-FP16-GI-NEXT: ucvtf v1.2d, v2.2d3067; CHECK-FP16-GI-NEXT: ucvtf v2.2d, v5.2d3068; CHECK-FP16-GI-NEXT: ucvtf v3.2d, v6.2d3069; CHECK-FP16-GI-NEXT: ucvtf v4.2d, v7.2d3070; CHECK-FP16-GI-NEXT: ucvtf v5.2d, v16.2d3071; CHECK-FP16-GI-NEXT: ucvtf v6.2d, v17.2d3072; CHECK-FP16-GI-NEXT: ucvtf v7.2d, v18.2d3073; CHECK-FP16-GI-NEXT: ret3074entry:3075 %c = uitofp <16 x i8> %a to <16 x double>3076 ret <16 x double> %c3077}3078 3079define <32 x double> @stofp_v32i8_v32f64(<32 x i8> %a) {3080; CHECK-NOFP16-SD-LABEL: stofp_v32i8_v32f64:3081; CHECK-NOFP16-SD: // %bb.0: // %entry3082; CHECK-NOFP16-SD-NEXT: ext v3.16b, v0.16b, v0.16b, #83083; CHECK-NOFP16-SD-NEXT: mov b5, v1.b[6]3084; CHECK-NOFP16-SD-NEXT: mov b17, v1.b[4]3085; CHECK-NOFP16-SD-NEXT: mov b20, v1.b[2]3086; CHECK-NOFP16-SD-NEXT: mov b21, v1.b[0]3087; CHECK-NOFP16-SD-NEXT: mov b18, v0.b[0]3088; CHECK-NOFP16-SD-NEXT: mov b19, v0.b[6]3089; CHECK-NOFP16-SD-NEXT: mov b22, v0.b[4]3090; CHECK-NOFP16-SD-NEXT: ext v16.16b, v1.16b, v1.16b, #83091; CHECK-NOFP16-SD-NEXT: mov b2, v3.b[0]3092; CHECK-NOFP16-SD-NEXT: mov b4, v3.b[2]3093; CHECK-NOFP16-SD-NEXT: mov b6, v3.b[4]3094; CHECK-NOFP16-SD-NEXT: mov b7, v3.b[6]3095; CHECK-NOFP16-SD-NEXT: mov v5.b[4], v1.b[7]3096; CHECK-NOFP16-SD-NEXT: mov v17.b[4], v1.b[5]3097; CHECK-NOFP16-SD-NEXT: mov v20.b[4], v1.b[3]3098; CHECK-NOFP16-SD-NEXT: mov v21.b[4], v1.b[1]3099; CHECK-NOFP16-SD-NEXT: mov v19.b[4], v0.b[7]3100; CHECK-NOFP16-SD-NEXT: mov v22.b[4], v0.b[5]3101; CHECK-NOFP16-SD-NEXT: mov v18.b[4], v0.b[1]3102; CHECK-NOFP16-SD-NEXT: mov b23, v16.b[0]3103; CHECK-NOFP16-SD-NEXT: mov v2.b[4], v3.b[1]3104; CHECK-NOFP16-SD-NEXT: mov v4.b[4], v3.b[3]3105; CHECK-NOFP16-SD-NEXT: mov v6.b[4], v3.b[5]3106; CHECK-NOFP16-SD-NEXT: mov v7.b[4], v3.b[7]3107; CHECK-NOFP16-SD-NEXT: mov b3, v0.b[2]3108; CHECK-NOFP16-SD-NEXT: shl v5.2s, v5.2s, #243109; CHECK-NOFP16-SD-NEXT: shl v17.2s, v17.2s, #243110; CHECK-NOFP16-SD-NEXT: shl v20.2s, v20.2s, #243111; CHECK-NOFP16-SD-NEXT: mov b24, v16.b[4]3112; CHECK-NOFP16-SD-NEXT: mov v23.b[4], v16.b[1]3113; CHECK-NOFP16-SD-NEXT: shl v18.2s, v18.2s, #243114; CHECK-NOFP16-SD-NEXT: shl v19.2s, v19.2s, #243115; CHECK-NOFP16-SD-NEXT: sshr v5.2s, v5.2s, #243116; CHECK-NOFP16-SD-NEXT: shl v1.2s, v2.2s, #243117; CHECK-NOFP16-SD-NEXT: shl v2.2s, v4.2s, #243118; CHECK-NOFP16-SD-NEXT: sshr v17.2s, v17.2s, #243119; CHECK-NOFP16-SD-NEXT: mov v3.b[4], v0.b[3]3120; CHECK-NOFP16-SD-NEXT: shl v0.2s, v21.2s, #243121; CHECK-NOFP16-SD-NEXT: shl v4.2s, v6.2s, #243122; CHECK-NOFP16-SD-NEXT: shl v6.2s, v7.2s, #243123; CHECK-NOFP16-SD-NEXT: mov b7, v16.b[2]3124; CHECK-NOFP16-SD-NEXT: sshll v5.2d, v5.2s, #03125; CHECK-NOFP16-SD-NEXT: sshr v20.2s, v20.2s, #243126; CHECK-NOFP16-SD-NEXT: mov b21, v16.b[6]3127; CHECK-NOFP16-SD-NEXT: sshll v17.2d, v17.2s, #03128; CHECK-NOFP16-SD-NEXT: sshr v0.2s, v0.2s, #243129; CHECK-NOFP16-SD-NEXT: shl v22.2s, v22.2s, #243130; CHECK-NOFP16-SD-NEXT: shl v3.2s, v3.2s, #243131; CHECK-NOFP16-SD-NEXT: mov v24.b[4], v16.b[5]3132; CHECK-NOFP16-SD-NEXT: sshr v19.2s, v19.2s, #243133; CHECK-NOFP16-SD-NEXT: scvtf v5.2d, v5.2d3134; CHECK-NOFP16-SD-NEXT: mov v7.b[4], v16.b[3]3135; CHECK-NOFP16-SD-NEXT: sshll v20.2d, v20.2s, #03136; CHECK-NOFP16-SD-NEXT: scvtf v17.2d, v17.2d3137; CHECK-NOFP16-SD-NEXT: sshll v0.2d, v0.2s, #03138; CHECK-NOFP16-SD-NEXT: mov v21.b[4], v16.b[7]3139; CHECK-NOFP16-SD-NEXT: sshr v3.2s, v3.2s, #243140; CHECK-NOFP16-SD-NEXT: sshr v16.2s, v22.2s, #243141; CHECK-NOFP16-SD-NEXT: sshll v19.2d, v19.2s, #03142; CHECK-NOFP16-SD-NEXT: scvtf v20.2d, v20.2d3143; CHECK-NOFP16-SD-NEXT: shl v22.2s, v24.2s, #243144; CHECK-NOFP16-SD-NEXT: sshr v6.2s, v6.2s, #243145; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v0.2d3146; CHECK-NOFP16-SD-NEXT: shl v7.2s, v7.2s, #243147; CHECK-NOFP16-SD-NEXT: sshr v4.2s, v4.2s, #243148; CHECK-NOFP16-SD-NEXT: stp q17, q5, [x8, #160]3149; CHECK-NOFP16-SD-NEXT: sshr v5.2s, v18.2s, #243150; CHECK-NOFP16-SD-NEXT: shl v17.2s, v23.2s, #243151; CHECK-NOFP16-SD-NEXT: sshll v3.2d, v3.2s, #03152; CHECK-NOFP16-SD-NEXT: sshll v16.2d, v16.2s, #03153; CHECK-NOFP16-SD-NEXT: shl v21.2s, v21.2s, #243154; CHECK-NOFP16-SD-NEXT: scvtf v19.2d, v19.2d3155; CHECK-NOFP16-SD-NEXT: sshr v2.2s, v2.2s, #243156; CHECK-NOFP16-SD-NEXT: sshr v1.2s, v1.2s, #243157; CHECK-NOFP16-SD-NEXT: stp q0, q20, [x8, #128]3158; CHECK-NOFP16-SD-NEXT: sshll v5.2d, v5.2s, #03159; CHECK-NOFP16-SD-NEXT: sshr v0.2s, v7.2s, #243160; CHECK-NOFP16-SD-NEXT: sshr v7.2s, v17.2s, #243161; CHECK-NOFP16-SD-NEXT: scvtf v3.2d, v3.2d3162; CHECK-NOFP16-SD-NEXT: scvtf v16.2d, v16.2d3163; CHECK-NOFP16-SD-NEXT: sshr v18.2s, v21.2s, #243164; CHECK-NOFP16-SD-NEXT: sshr v20.2s, v22.2s, #243165; CHECK-NOFP16-SD-NEXT: sshll v6.2d, v6.2s, #03166; CHECK-NOFP16-SD-NEXT: scvtf v5.2d, v5.2d3167; CHECK-NOFP16-SD-NEXT: sshll v0.2d, v0.2s, #03168; CHECK-NOFP16-SD-NEXT: sshll v4.2d, v4.2s, #03169; CHECK-NOFP16-SD-NEXT: sshll v7.2d, v7.2s, #03170; CHECK-NOFP16-SD-NEXT: sshll v2.2d, v2.2s, #03171; CHECK-NOFP16-SD-NEXT: sshll v1.2d, v1.2s, #03172; CHECK-NOFP16-SD-NEXT: stp q16, q19, [x8, #32]3173; CHECK-NOFP16-SD-NEXT: sshll v17.2d, v18.2s, #03174; CHECK-NOFP16-SD-NEXT: sshll v16.2d, v20.2s, #03175; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v0.2d3176; CHECK-NOFP16-SD-NEXT: scvtf v4.2d, v4.2d3177; CHECK-NOFP16-SD-NEXT: stp q5, q3, [x8]3178; CHECK-NOFP16-SD-NEXT: scvtf v3.2d, v7.2d3179; CHECK-NOFP16-SD-NEXT: scvtf v5.2d, v6.2d3180; CHECK-NOFP16-SD-NEXT: scvtf v17.2d, v17.2d3181; CHECK-NOFP16-SD-NEXT: scvtf v16.2d, v16.2d3182; CHECK-NOFP16-SD-NEXT: scvtf v2.2d, v2.2d3183; CHECK-NOFP16-SD-NEXT: stp q4, q5, [x8, #96]3184; CHECK-NOFP16-SD-NEXT: stp q3, q0, [x8, #192]3185; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v1.2d3186; CHECK-NOFP16-SD-NEXT: stp q16, q17, [x8, #224]3187; CHECK-NOFP16-SD-NEXT: stp q0, q2, [x8, #64]3188; CHECK-NOFP16-SD-NEXT: ret3189;3190; CHECK-FP16-SD-LABEL: stofp_v32i8_v32f64:3191; CHECK-FP16-SD: // %bb.0: // %entry3192; CHECK-FP16-SD-NEXT: ext v3.16b, v0.16b, v0.16b, #83193; CHECK-FP16-SD-NEXT: mov b5, v1.b[6]3194; CHECK-FP16-SD-NEXT: mov b17, v1.b[4]3195; CHECK-FP16-SD-NEXT: mov b20, v1.b[2]3196; CHECK-FP16-SD-NEXT: mov b21, v1.b[0]3197; CHECK-FP16-SD-NEXT: mov b18, v0.b[0]3198; CHECK-FP16-SD-NEXT: mov b19, v0.b[6]3199; CHECK-FP16-SD-NEXT: mov b22, v0.b[4]3200; CHECK-FP16-SD-NEXT: ext v16.16b, v1.16b, v1.16b, #83201; CHECK-FP16-SD-NEXT: mov b2, v3.b[0]3202; CHECK-FP16-SD-NEXT: mov b4, v3.b[2]3203; CHECK-FP16-SD-NEXT: mov b6, v3.b[4]3204; CHECK-FP16-SD-NEXT: mov b7, v3.b[6]3205; CHECK-FP16-SD-NEXT: mov v5.b[4], v1.b[7]3206; CHECK-FP16-SD-NEXT: mov v17.b[4], v1.b[5]3207; CHECK-FP16-SD-NEXT: mov v20.b[4], v1.b[3]3208; CHECK-FP16-SD-NEXT: mov v21.b[4], v1.b[1]3209; CHECK-FP16-SD-NEXT: mov v19.b[4], v0.b[7]3210; CHECK-FP16-SD-NEXT: mov v22.b[4], v0.b[5]3211; CHECK-FP16-SD-NEXT: mov v18.b[4], v0.b[1]3212; CHECK-FP16-SD-NEXT: mov b23, v16.b[0]3213; CHECK-FP16-SD-NEXT: mov v2.b[4], v3.b[1]3214; CHECK-FP16-SD-NEXT: mov v4.b[4], v3.b[3]3215; CHECK-FP16-SD-NEXT: mov v6.b[4], v3.b[5]3216; CHECK-FP16-SD-NEXT: mov v7.b[4], v3.b[7]3217; CHECK-FP16-SD-NEXT: mov b3, v0.b[2]3218; CHECK-FP16-SD-NEXT: shl v5.2s, v5.2s, #243219; CHECK-FP16-SD-NEXT: shl v17.2s, v17.2s, #243220; CHECK-FP16-SD-NEXT: shl v20.2s, v20.2s, #243221; CHECK-FP16-SD-NEXT: mov b24, v16.b[4]3222; CHECK-FP16-SD-NEXT: mov v23.b[4], v16.b[1]3223; CHECK-FP16-SD-NEXT: shl v18.2s, v18.2s, #243224; CHECK-FP16-SD-NEXT: shl v19.2s, v19.2s, #243225; CHECK-FP16-SD-NEXT: sshr v5.2s, v5.2s, #243226; CHECK-FP16-SD-NEXT: shl v1.2s, v2.2s, #243227; CHECK-FP16-SD-NEXT: shl v2.2s, v4.2s, #243228; CHECK-FP16-SD-NEXT: sshr v17.2s, v17.2s, #243229; CHECK-FP16-SD-NEXT: mov v3.b[4], v0.b[3]3230; CHECK-FP16-SD-NEXT: shl v0.2s, v21.2s, #243231; CHECK-FP16-SD-NEXT: shl v4.2s, v6.2s, #243232; CHECK-FP16-SD-NEXT: shl v6.2s, v7.2s, #243233; CHECK-FP16-SD-NEXT: mov b7, v16.b[2]3234; CHECK-FP16-SD-NEXT: sshll v5.2d, v5.2s, #03235; CHECK-FP16-SD-NEXT: sshr v20.2s, v20.2s, #243236; CHECK-FP16-SD-NEXT: mov b21, v16.b[6]3237; CHECK-FP16-SD-NEXT: sshll v17.2d, v17.2s, #03238; CHECK-FP16-SD-NEXT: sshr v0.2s, v0.2s, #243239; CHECK-FP16-SD-NEXT: shl v22.2s, v22.2s, #243240; CHECK-FP16-SD-NEXT: shl v3.2s, v3.2s, #243241; CHECK-FP16-SD-NEXT: mov v24.b[4], v16.b[5]3242; CHECK-FP16-SD-NEXT: sshr v19.2s, v19.2s, #243243; CHECK-FP16-SD-NEXT: scvtf v5.2d, v5.2d3244; CHECK-FP16-SD-NEXT: mov v7.b[4], v16.b[3]3245; CHECK-FP16-SD-NEXT: sshll v20.2d, v20.2s, #03246; CHECK-FP16-SD-NEXT: scvtf v17.2d, v17.2d3247; CHECK-FP16-SD-NEXT: sshll v0.2d, v0.2s, #03248; CHECK-FP16-SD-NEXT: mov v21.b[4], v16.b[7]3249; CHECK-FP16-SD-NEXT: sshr v3.2s, v3.2s, #243250; CHECK-FP16-SD-NEXT: sshr v16.2s, v22.2s, #243251; CHECK-FP16-SD-NEXT: sshll v19.2d, v19.2s, #03252; CHECK-FP16-SD-NEXT: scvtf v20.2d, v20.2d3253; CHECK-FP16-SD-NEXT: shl v22.2s, v24.2s, #243254; CHECK-FP16-SD-NEXT: sshr v6.2s, v6.2s, #243255; CHECK-FP16-SD-NEXT: scvtf v0.2d, v0.2d3256; CHECK-FP16-SD-NEXT: shl v7.2s, v7.2s, #243257; CHECK-FP16-SD-NEXT: sshr v4.2s, v4.2s, #243258; CHECK-FP16-SD-NEXT: stp q17, q5, [x8, #160]3259; CHECK-FP16-SD-NEXT: sshr v5.2s, v18.2s, #243260; CHECK-FP16-SD-NEXT: shl v17.2s, v23.2s, #243261; CHECK-FP16-SD-NEXT: sshll v3.2d, v3.2s, #03262; CHECK-FP16-SD-NEXT: sshll v16.2d, v16.2s, #03263; CHECK-FP16-SD-NEXT: shl v21.2s, v21.2s, #243264; CHECK-FP16-SD-NEXT: scvtf v19.2d, v19.2d3265; CHECK-FP16-SD-NEXT: sshr v2.2s, v2.2s, #243266; CHECK-FP16-SD-NEXT: sshr v1.2s, v1.2s, #243267; CHECK-FP16-SD-NEXT: stp q0, q20, [x8, #128]3268; CHECK-FP16-SD-NEXT: sshll v5.2d, v5.2s, #03269; CHECK-FP16-SD-NEXT: sshr v0.2s, v7.2s, #243270; CHECK-FP16-SD-NEXT: sshr v7.2s, v17.2s, #243271; CHECK-FP16-SD-NEXT: scvtf v3.2d, v3.2d3272; CHECK-FP16-SD-NEXT: scvtf v16.2d, v16.2d3273; CHECK-FP16-SD-NEXT: sshr v18.2s, v21.2s, #243274; CHECK-FP16-SD-NEXT: sshr v20.2s, v22.2s, #243275; CHECK-FP16-SD-NEXT: sshll v6.2d, v6.2s, #03276; CHECK-FP16-SD-NEXT: scvtf v5.2d, v5.2d3277; CHECK-FP16-SD-NEXT: sshll v0.2d, v0.2s, #03278; CHECK-FP16-SD-NEXT: sshll v4.2d, v4.2s, #03279; CHECK-FP16-SD-NEXT: sshll v7.2d, v7.2s, #03280; CHECK-FP16-SD-NEXT: sshll v2.2d, v2.2s, #03281; CHECK-FP16-SD-NEXT: sshll v1.2d, v1.2s, #03282; CHECK-FP16-SD-NEXT: stp q16, q19, [x8, #32]3283; CHECK-FP16-SD-NEXT: sshll v17.2d, v18.2s, #03284; CHECK-FP16-SD-NEXT: sshll v16.2d, v20.2s, #03285; CHECK-FP16-SD-NEXT: scvtf v0.2d, v0.2d3286; CHECK-FP16-SD-NEXT: scvtf v4.2d, v4.2d3287; CHECK-FP16-SD-NEXT: stp q5, q3, [x8]3288; CHECK-FP16-SD-NEXT: scvtf v3.2d, v7.2d3289; CHECK-FP16-SD-NEXT: scvtf v5.2d, v6.2d3290; CHECK-FP16-SD-NEXT: scvtf v17.2d, v17.2d3291; CHECK-FP16-SD-NEXT: scvtf v16.2d, v16.2d3292; CHECK-FP16-SD-NEXT: scvtf v2.2d, v2.2d3293; CHECK-FP16-SD-NEXT: stp q4, q5, [x8, #96]3294; CHECK-FP16-SD-NEXT: stp q3, q0, [x8, #192]3295; CHECK-FP16-SD-NEXT: scvtf v0.2d, v1.2d3296; CHECK-FP16-SD-NEXT: stp q16, q17, [x8, #224]3297; CHECK-FP16-SD-NEXT: stp q0, q2, [x8, #64]3298; CHECK-FP16-SD-NEXT: ret3299;3300; CHECK-NOFP16-GI-LABEL: stofp_v32i8_v32f64:3301; CHECK-NOFP16-GI: // %bb.0: // %entry3302; CHECK-NOFP16-GI-NEXT: sshll v2.8h, v0.8b, #03303; CHECK-NOFP16-GI-NEXT: sshll2 v0.8h, v0.16b, #03304; CHECK-NOFP16-GI-NEXT: sshll v4.8h, v1.8b, #03305; CHECK-NOFP16-GI-NEXT: sshll2 v1.8h, v1.16b, #03306; CHECK-NOFP16-GI-NEXT: sshll v3.4s, v2.4h, #03307; CHECK-NOFP16-GI-NEXT: sshll2 v2.4s, v2.8h, #03308; CHECK-NOFP16-GI-NEXT: sshll v6.4s, v0.4h, #03309; CHECK-NOFP16-GI-NEXT: sshll2 v0.4s, v0.8h, #03310; CHECK-NOFP16-GI-NEXT: sshll v16.4s, v4.4h, #03311; CHECK-NOFP16-GI-NEXT: sshll2 v4.4s, v4.8h, #03312; CHECK-NOFP16-GI-NEXT: sshll v18.4s, v1.4h, #03313; CHECK-NOFP16-GI-NEXT: sshll2 v1.4s, v1.8h, #03314; CHECK-NOFP16-GI-NEXT: sshll v5.2d, v3.2s, #03315; CHECK-NOFP16-GI-NEXT: sshll2 v3.2d, v3.4s, #03316; CHECK-NOFP16-GI-NEXT: sshll v7.2d, v2.2s, #03317; CHECK-NOFP16-GI-NEXT: sshll2 v2.2d, v2.4s, #03318; CHECK-NOFP16-GI-NEXT: sshll v17.2d, v6.2s, #03319; CHECK-NOFP16-GI-NEXT: sshll2 v6.2d, v6.4s, #03320; CHECK-NOFP16-GI-NEXT: sshll v19.2d, v0.2s, #03321; CHECK-NOFP16-GI-NEXT: sshll2 v0.2d, v0.4s, #03322; CHECK-NOFP16-GI-NEXT: sshll v20.2d, v16.2s, #03323; CHECK-NOFP16-GI-NEXT: scvtf v5.2d, v5.2d3324; CHECK-NOFP16-GI-NEXT: scvtf v3.2d, v3.2d3325; CHECK-NOFP16-GI-NEXT: scvtf v7.2d, v7.2d3326; CHECK-NOFP16-GI-NEXT: scvtf v2.2d, v2.2d3327; CHECK-NOFP16-GI-NEXT: scvtf v17.2d, v17.2d3328; CHECK-NOFP16-GI-NEXT: scvtf v6.2d, v6.2d3329; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v0.2d3330; CHECK-NOFP16-GI-NEXT: stp q5, q3, [x8]3331; CHECK-NOFP16-GI-NEXT: sshll2 v5.2d, v16.4s, #03332; CHECK-NOFP16-GI-NEXT: scvtf v16.2d, v19.2d3333; CHECK-NOFP16-GI-NEXT: stp q7, q2, [x8, #32]3334; CHECK-NOFP16-GI-NEXT: scvtf v2.2d, v20.2d3335; CHECK-NOFP16-GI-NEXT: sshll v3.2d, v4.2s, #03336; CHECK-NOFP16-GI-NEXT: stp q17, q6, [x8, #64]3337; CHECK-NOFP16-GI-NEXT: sshll2 v4.2d, v4.4s, #03338; CHECK-NOFP16-GI-NEXT: sshll v6.2d, v18.2s, #03339; CHECK-NOFP16-GI-NEXT: scvtf v5.2d, v5.2d3340; CHECK-NOFP16-GI-NEXT: sshll2 v7.2d, v18.4s, #03341; CHECK-NOFP16-GI-NEXT: stp q16, q0, [x8, #96]3342; CHECK-NOFP16-GI-NEXT: sshll v0.2d, v1.2s, #03343; CHECK-NOFP16-GI-NEXT: sshll2 v1.2d, v1.4s, #03344; CHECK-NOFP16-GI-NEXT: scvtf v3.2d, v3.2d3345; CHECK-NOFP16-GI-NEXT: scvtf v4.2d, v4.2d3346; CHECK-NOFP16-GI-NEXT: scvtf v6.2d, v6.2d3347; CHECK-NOFP16-GI-NEXT: stp q2, q5, [x8, #128]3348; CHECK-NOFP16-GI-NEXT: scvtf v2.2d, v7.2d3349; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v0.2d3350; CHECK-NOFP16-GI-NEXT: scvtf v1.2d, v1.2d3351; CHECK-NOFP16-GI-NEXT: stp q3, q4, [x8, #160]3352; CHECK-NOFP16-GI-NEXT: stp q6, q2, [x8, #192]3353; CHECK-NOFP16-GI-NEXT: stp q0, q1, [x8, #224]3354; CHECK-NOFP16-GI-NEXT: ret3355;3356; CHECK-FP16-GI-LABEL: stofp_v32i8_v32f64:3357; CHECK-FP16-GI: // %bb.0: // %entry3358; CHECK-FP16-GI-NEXT: sshll v2.8h, v0.8b, #03359; CHECK-FP16-GI-NEXT: sshll2 v0.8h, v0.16b, #03360; CHECK-FP16-GI-NEXT: sshll v4.8h, v1.8b, #03361; CHECK-FP16-GI-NEXT: sshll2 v1.8h, v1.16b, #03362; CHECK-FP16-GI-NEXT: sshll v3.4s, v2.4h, #03363; CHECK-FP16-GI-NEXT: sshll2 v2.4s, v2.8h, #03364; CHECK-FP16-GI-NEXT: sshll v6.4s, v0.4h, #03365; CHECK-FP16-GI-NEXT: sshll2 v0.4s, v0.8h, #03366; CHECK-FP16-GI-NEXT: sshll v16.4s, v4.4h, #03367; CHECK-FP16-GI-NEXT: sshll2 v4.4s, v4.8h, #03368; CHECK-FP16-GI-NEXT: sshll v18.4s, v1.4h, #03369; CHECK-FP16-GI-NEXT: sshll2 v1.4s, v1.8h, #03370; CHECK-FP16-GI-NEXT: sshll v5.2d, v3.2s, #03371; CHECK-FP16-GI-NEXT: sshll2 v3.2d, v3.4s, #03372; CHECK-FP16-GI-NEXT: sshll v7.2d, v2.2s, #03373; CHECK-FP16-GI-NEXT: sshll2 v2.2d, v2.4s, #03374; CHECK-FP16-GI-NEXT: sshll v17.2d, v6.2s, #03375; CHECK-FP16-GI-NEXT: sshll2 v6.2d, v6.4s, #03376; CHECK-FP16-GI-NEXT: sshll v19.2d, v0.2s, #03377; CHECK-FP16-GI-NEXT: sshll2 v0.2d, v0.4s, #03378; CHECK-FP16-GI-NEXT: sshll v20.2d, v16.2s, #03379; CHECK-FP16-GI-NEXT: scvtf v5.2d, v5.2d3380; CHECK-FP16-GI-NEXT: scvtf v3.2d, v3.2d3381; CHECK-FP16-GI-NEXT: scvtf v7.2d, v7.2d3382; CHECK-FP16-GI-NEXT: scvtf v2.2d, v2.2d3383; CHECK-FP16-GI-NEXT: scvtf v17.2d, v17.2d3384; CHECK-FP16-GI-NEXT: scvtf v6.2d, v6.2d3385; CHECK-FP16-GI-NEXT: scvtf v0.2d, v0.2d3386; CHECK-FP16-GI-NEXT: stp q5, q3, [x8]3387; CHECK-FP16-GI-NEXT: sshll2 v5.2d, v16.4s, #03388; CHECK-FP16-GI-NEXT: scvtf v16.2d, v19.2d3389; CHECK-FP16-GI-NEXT: stp q7, q2, [x8, #32]3390; CHECK-FP16-GI-NEXT: scvtf v2.2d, v20.2d3391; CHECK-FP16-GI-NEXT: sshll v3.2d, v4.2s, #03392; CHECK-FP16-GI-NEXT: stp q17, q6, [x8, #64]3393; CHECK-FP16-GI-NEXT: sshll2 v4.2d, v4.4s, #03394; CHECK-FP16-GI-NEXT: sshll v6.2d, v18.2s, #03395; CHECK-FP16-GI-NEXT: scvtf v5.2d, v5.2d3396; CHECK-FP16-GI-NEXT: sshll2 v7.2d, v18.4s, #03397; CHECK-FP16-GI-NEXT: stp q16, q0, [x8, #96]3398; CHECK-FP16-GI-NEXT: sshll v0.2d, v1.2s, #03399; CHECK-FP16-GI-NEXT: sshll2 v1.2d, v1.4s, #03400; CHECK-FP16-GI-NEXT: scvtf v3.2d, v3.2d3401; CHECK-FP16-GI-NEXT: scvtf v4.2d, v4.2d3402; CHECK-FP16-GI-NEXT: scvtf v6.2d, v6.2d3403; CHECK-FP16-GI-NEXT: stp q2, q5, [x8, #128]3404; CHECK-FP16-GI-NEXT: scvtf v2.2d, v7.2d3405; CHECK-FP16-GI-NEXT: scvtf v0.2d, v0.2d3406; CHECK-FP16-GI-NEXT: scvtf v1.2d, v1.2d3407; CHECK-FP16-GI-NEXT: stp q3, q4, [x8, #160]3408; CHECK-FP16-GI-NEXT: stp q6, q2, [x8, #192]3409; CHECK-FP16-GI-NEXT: stp q0, q1, [x8, #224]3410; CHECK-FP16-GI-NEXT: ret3411entry:3412 %c = sitofp <32 x i8> %a to <32 x double>3413 ret <32 x double> %c3414}3415 3416define <32 x double> @utofp_v32i8_v32f64(<32 x i8> %a) {3417; CHECK-NOFP16-SD-LABEL: utofp_v32i8_v32f64:3418; CHECK-NOFP16-SD: // %bb.0: // %entry3419; CHECK-NOFP16-SD-NEXT: mov b6, v1.b[6]3420; CHECK-NOFP16-SD-NEXT: mov b7, v1.b[4]3421; CHECK-NOFP16-SD-NEXT: ext v3.16b, v1.16b, v1.16b, #83422; CHECK-NOFP16-SD-NEXT: mov b16, v1.b[2]3423; CHECK-NOFP16-SD-NEXT: mov b17, v1.b[0]3424; CHECK-NOFP16-SD-NEXT: mov b19, v0.b[6]3425; CHECK-NOFP16-SD-NEXT: mov b20, v0.b[4]3426; CHECK-NOFP16-SD-NEXT: movi d5, #0x0000ff000000ff3427; CHECK-NOFP16-SD-NEXT: mov b24, v0.b[2]3428; CHECK-NOFP16-SD-NEXT: mov b25, v0.b[0]3429; CHECK-NOFP16-SD-NEXT: ext v2.16b, v0.16b, v0.16b, #83430; CHECK-NOFP16-SD-NEXT: mov v6.b[4], v1.b[7]3431; CHECK-NOFP16-SD-NEXT: mov v7.b[4], v1.b[5]3432; CHECK-NOFP16-SD-NEXT: mov b18, v3.b[0]3433; CHECK-NOFP16-SD-NEXT: mov b21, v3.b[2]3434; CHECK-NOFP16-SD-NEXT: mov b23, v3.b[4]3435; CHECK-NOFP16-SD-NEXT: mov v16.b[4], v1.b[3]3436; CHECK-NOFP16-SD-NEXT: mov v17.b[4], v1.b[1]3437; CHECK-NOFP16-SD-NEXT: mov b1, v3.b[6]3438; CHECK-NOFP16-SD-NEXT: mov v19.b[4], v0.b[7]3439; CHECK-NOFP16-SD-NEXT: mov v20.b[4], v0.b[5]3440; CHECK-NOFP16-SD-NEXT: mov v24.b[4], v0.b[3]3441; CHECK-NOFP16-SD-NEXT: mov v25.b[4], v0.b[1]3442; CHECK-NOFP16-SD-NEXT: and v6.8b, v6.8b, v5.8b3443; CHECK-NOFP16-SD-NEXT: and v7.8b, v7.8b, v5.8b3444; CHECK-NOFP16-SD-NEXT: mov v18.b[4], v3.b[1]3445; CHECK-NOFP16-SD-NEXT: mov v21.b[4], v3.b[3]3446; CHECK-NOFP16-SD-NEXT: mov v23.b[4], v3.b[5]3447; CHECK-NOFP16-SD-NEXT: and v16.8b, v16.8b, v5.8b3448; CHECK-NOFP16-SD-NEXT: and v17.8b, v17.8b, v5.8b3449; CHECK-NOFP16-SD-NEXT: mov v1.b[4], v3.b[7]3450; CHECK-NOFP16-SD-NEXT: and v3.8b, v19.8b, v5.8b3451; CHECK-NOFP16-SD-NEXT: ushll v6.2d, v6.2s, #03452; CHECK-NOFP16-SD-NEXT: ushll v7.2d, v7.2s, #03453; CHECK-NOFP16-SD-NEXT: and v20.8b, v20.8b, v5.8b3454; CHECK-NOFP16-SD-NEXT: ushll v16.2d, v16.2s, #03455; CHECK-NOFP16-SD-NEXT: mov b4, v2.b[0]3456; CHECK-NOFP16-SD-NEXT: mov b22, v2.b[2]3457; CHECK-NOFP16-SD-NEXT: ushll v17.2d, v17.2s, #03458; CHECK-NOFP16-SD-NEXT: ushll v0.2d, v3.2s, #03459; CHECK-NOFP16-SD-NEXT: mov b19, v2.b[4]3460; CHECK-NOFP16-SD-NEXT: ucvtf v6.2d, v6.2d3461; CHECK-NOFP16-SD-NEXT: ucvtf v3.2d, v7.2d3462; CHECK-NOFP16-SD-NEXT: ushll v20.2d, v20.2s, #03463; CHECK-NOFP16-SD-NEXT: mov b7, v2.b[6]3464; CHECK-NOFP16-SD-NEXT: ucvtf v16.2d, v16.2d3465; CHECK-NOFP16-SD-NEXT: and v24.8b, v24.8b, v5.8b3466; CHECK-NOFP16-SD-NEXT: ucvtf v17.2d, v17.2d3467; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v0.2d3468; CHECK-NOFP16-SD-NEXT: mov v4.b[4], v2.b[1]3469; CHECK-NOFP16-SD-NEXT: ucvtf v20.2d, v20.2d3470; CHECK-NOFP16-SD-NEXT: mov v22.b[4], v2.b[3]3471; CHECK-NOFP16-SD-NEXT: mov v19.b[4], v2.b[5]3472; CHECK-NOFP16-SD-NEXT: stp q3, q6, [x8, #160]3473; CHECK-NOFP16-SD-NEXT: and v6.8b, v25.8b, v5.8b3474; CHECK-NOFP16-SD-NEXT: and v1.8b, v1.8b, v5.8b3475; CHECK-NOFP16-SD-NEXT: mov v7.b[4], v2.b[7]3476; CHECK-NOFP16-SD-NEXT: and v2.8b, v23.8b, v5.8b3477; CHECK-NOFP16-SD-NEXT: ushll v3.2d, v24.2s, #03478; CHECK-NOFP16-SD-NEXT: stp q17, q16, [x8, #128]3479; CHECK-NOFP16-SD-NEXT: and v16.8b, v21.8b, v5.8b3480; CHECK-NOFP16-SD-NEXT: and v4.8b, v4.8b, v5.8b3481; CHECK-NOFP16-SD-NEXT: stp q20, q0, [x8, #32]3482; CHECK-NOFP16-SD-NEXT: ushll v6.2d, v6.2s, #03483; CHECK-NOFP16-SD-NEXT: and v0.8b, v18.8b, v5.8b3484; CHECK-NOFP16-SD-NEXT: ushll v1.2d, v1.2s, #03485; CHECK-NOFP16-SD-NEXT: ushll v2.2d, v2.2s, #03486; CHECK-NOFP16-SD-NEXT: ucvtf v3.2d, v3.2d3487; CHECK-NOFP16-SD-NEXT: ushll v16.2d, v16.2s, #03488; CHECK-NOFP16-SD-NEXT: and v7.8b, v7.8b, v5.8b3489; CHECK-NOFP16-SD-NEXT: and v17.8b, v19.8b, v5.8b3490; CHECK-NOFP16-SD-NEXT: ucvtf v6.2d, v6.2d3491; CHECK-NOFP16-SD-NEXT: ushll v0.2d, v0.2s, #03492; CHECK-NOFP16-SD-NEXT: and v18.8b, v22.8b, v5.8b3493; CHECK-NOFP16-SD-NEXT: ucvtf v1.2d, v1.2d3494; CHECK-NOFP16-SD-NEXT: ucvtf v2.2d, v2.2d3495; CHECK-NOFP16-SD-NEXT: ushll v4.2d, v4.2s, #03496; CHECK-NOFP16-SD-NEXT: ucvtf v16.2d, v16.2d3497; CHECK-NOFP16-SD-NEXT: ushll v5.2d, v7.2s, #03498; CHECK-NOFP16-SD-NEXT: ushll v7.2d, v17.2s, #03499; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v0.2d3500; CHECK-NOFP16-SD-NEXT: stp q6, q3, [x8]3501; CHECK-NOFP16-SD-NEXT: ushll v3.2d, v18.2s, #03502; CHECK-NOFP16-SD-NEXT: stp q2, q1, [x8, #224]3503; CHECK-NOFP16-SD-NEXT: ucvtf v5.2d, v5.2d3504; CHECK-NOFP16-SD-NEXT: ucvtf v1.2d, v7.2d3505; CHECK-NOFP16-SD-NEXT: stp q0, q16, [x8, #192]3506; CHECK-NOFP16-SD-NEXT: ucvtf v2.2d, v3.2d3507; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v4.2d3508; CHECK-NOFP16-SD-NEXT: stp q1, q5, [x8, #96]3509; CHECK-NOFP16-SD-NEXT: stp q0, q2, [x8, #64]3510; CHECK-NOFP16-SD-NEXT: ret3511;3512; CHECK-FP16-SD-LABEL: utofp_v32i8_v32f64:3513; CHECK-FP16-SD: // %bb.0: // %entry3514; CHECK-FP16-SD-NEXT: mov b6, v1.b[6]3515; CHECK-FP16-SD-NEXT: mov b7, v1.b[4]3516; CHECK-FP16-SD-NEXT: ext v3.16b, v1.16b, v1.16b, #83517; CHECK-FP16-SD-NEXT: mov b16, v1.b[2]3518; CHECK-FP16-SD-NEXT: mov b17, v1.b[0]3519; CHECK-FP16-SD-NEXT: mov b19, v0.b[6]3520; CHECK-FP16-SD-NEXT: mov b20, v0.b[4]3521; CHECK-FP16-SD-NEXT: movi d5, #0x0000ff000000ff3522; CHECK-FP16-SD-NEXT: mov b24, v0.b[2]3523; CHECK-FP16-SD-NEXT: mov b25, v0.b[0]3524; CHECK-FP16-SD-NEXT: ext v2.16b, v0.16b, v0.16b, #83525; CHECK-FP16-SD-NEXT: mov v6.b[4], v1.b[7]3526; CHECK-FP16-SD-NEXT: mov v7.b[4], v1.b[5]3527; CHECK-FP16-SD-NEXT: mov b18, v3.b[0]3528; CHECK-FP16-SD-NEXT: mov b21, v3.b[2]3529; CHECK-FP16-SD-NEXT: mov b23, v3.b[4]3530; CHECK-FP16-SD-NEXT: mov v16.b[4], v1.b[3]3531; CHECK-FP16-SD-NEXT: mov v17.b[4], v1.b[1]3532; CHECK-FP16-SD-NEXT: mov b1, v3.b[6]3533; CHECK-FP16-SD-NEXT: mov v19.b[4], v0.b[7]3534; CHECK-FP16-SD-NEXT: mov v20.b[4], v0.b[5]3535; CHECK-FP16-SD-NEXT: mov v24.b[4], v0.b[3]3536; CHECK-FP16-SD-NEXT: mov v25.b[4], v0.b[1]3537; CHECK-FP16-SD-NEXT: and v6.8b, v6.8b, v5.8b3538; CHECK-FP16-SD-NEXT: and v7.8b, v7.8b, v5.8b3539; CHECK-FP16-SD-NEXT: mov v18.b[4], v3.b[1]3540; CHECK-FP16-SD-NEXT: mov v21.b[4], v3.b[3]3541; CHECK-FP16-SD-NEXT: mov v23.b[4], v3.b[5]3542; CHECK-FP16-SD-NEXT: and v16.8b, v16.8b, v5.8b3543; CHECK-FP16-SD-NEXT: and v17.8b, v17.8b, v5.8b3544; CHECK-FP16-SD-NEXT: mov v1.b[4], v3.b[7]3545; CHECK-FP16-SD-NEXT: and v3.8b, v19.8b, v5.8b3546; CHECK-FP16-SD-NEXT: ushll v6.2d, v6.2s, #03547; CHECK-FP16-SD-NEXT: ushll v7.2d, v7.2s, #03548; CHECK-FP16-SD-NEXT: and v20.8b, v20.8b, v5.8b3549; CHECK-FP16-SD-NEXT: ushll v16.2d, v16.2s, #03550; CHECK-FP16-SD-NEXT: mov b4, v2.b[0]3551; CHECK-FP16-SD-NEXT: mov b22, v2.b[2]3552; CHECK-FP16-SD-NEXT: ushll v17.2d, v17.2s, #03553; CHECK-FP16-SD-NEXT: ushll v0.2d, v3.2s, #03554; CHECK-FP16-SD-NEXT: mov b19, v2.b[4]3555; CHECK-FP16-SD-NEXT: ucvtf v6.2d, v6.2d3556; CHECK-FP16-SD-NEXT: ucvtf v3.2d, v7.2d3557; CHECK-FP16-SD-NEXT: ushll v20.2d, v20.2s, #03558; CHECK-FP16-SD-NEXT: mov b7, v2.b[6]3559; CHECK-FP16-SD-NEXT: ucvtf v16.2d, v16.2d3560; CHECK-FP16-SD-NEXT: and v24.8b, v24.8b, v5.8b3561; CHECK-FP16-SD-NEXT: ucvtf v17.2d, v17.2d3562; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v0.2d3563; CHECK-FP16-SD-NEXT: mov v4.b[4], v2.b[1]3564; CHECK-FP16-SD-NEXT: ucvtf v20.2d, v20.2d3565; CHECK-FP16-SD-NEXT: mov v22.b[4], v2.b[3]3566; CHECK-FP16-SD-NEXT: mov v19.b[4], v2.b[5]3567; CHECK-FP16-SD-NEXT: stp q3, q6, [x8, #160]3568; CHECK-FP16-SD-NEXT: and v6.8b, v25.8b, v5.8b3569; CHECK-FP16-SD-NEXT: and v1.8b, v1.8b, v5.8b3570; CHECK-FP16-SD-NEXT: mov v7.b[4], v2.b[7]3571; CHECK-FP16-SD-NEXT: and v2.8b, v23.8b, v5.8b3572; CHECK-FP16-SD-NEXT: ushll v3.2d, v24.2s, #03573; CHECK-FP16-SD-NEXT: stp q17, q16, [x8, #128]3574; CHECK-FP16-SD-NEXT: and v16.8b, v21.8b, v5.8b3575; CHECK-FP16-SD-NEXT: and v4.8b, v4.8b, v5.8b3576; CHECK-FP16-SD-NEXT: stp q20, q0, [x8, #32]3577; CHECK-FP16-SD-NEXT: ushll v6.2d, v6.2s, #03578; CHECK-FP16-SD-NEXT: and v0.8b, v18.8b, v5.8b3579; CHECK-FP16-SD-NEXT: ushll v1.2d, v1.2s, #03580; CHECK-FP16-SD-NEXT: ushll v2.2d, v2.2s, #03581; CHECK-FP16-SD-NEXT: ucvtf v3.2d, v3.2d3582; CHECK-FP16-SD-NEXT: ushll v16.2d, v16.2s, #03583; CHECK-FP16-SD-NEXT: and v7.8b, v7.8b, v5.8b3584; CHECK-FP16-SD-NEXT: and v17.8b, v19.8b, v5.8b3585; CHECK-FP16-SD-NEXT: ucvtf v6.2d, v6.2d3586; CHECK-FP16-SD-NEXT: ushll v0.2d, v0.2s, #03587; CHECK-FP16-SD-NEXT: and v18.8b, v22.8b, v5.8b3588; CHECK-FP16-SD-NEXT: ucvtf v1.2d, v1.2d3589; CHECK-FP16-SD-NEXT: ucvtf v2.2d, v2.2d3590; CHECK-FP16-SD-NEXT: ushll v4.2d, v4.2s, #03591; CHECK-FP16-SD-NEXT: ucvtf v16.2d, v16.2d3592; CHECK-FP16-SD-NEXT: ushll v5.2d, v7.2s, #03593; CHECK-FP16-SD-NEXT: ushll v7.2d, v17.2s, #03594; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v0.2d3595; CHECK-FP16-SD-NEXT: stp q6, q3, [x8]3596; CHECK-FP16-SD-NEXT: ushll v3.2d, v18.2s, #03597; CHECK-FP16-SD-NEXT: stp q2, q1, [x8, #224]3598; CHECK-FP16-SD-NEXT: ucvtf v5.2d, v5.2d3599; CHECK-FP16-SD-NEXT: ucvtf v1.2d, v7.2d3600; CHECK-FP16-SD-NEXT: stp q0, q16, [x8, #192]3601; CHECK-FP16-SD-NEXT: ucvtf v2.2d, v3.2d3602; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v4.2d3603; CHECK-FP16-SD-NEXT: stp q1, q5, [x8, #96]3604; CHECK-FP16-SD-NEXT: stp q0, q2, [x8, #64]3605; CHECK-FP16-SD-NEXT: ret3606;3607; CHECK-NOFP16-GI-LABEL: utofp_v32i8_v32f64:3608; CHECK-NOFP16-GI: // %bb.0: // %entry3609; CHECK-NOFP16-GI-NEXT: ushll v2.8h, v0.8b, #03610; CHECK-NOFP16-GI-NEXT: ushll2 v0.8h, v0.16b, #03611; CHECK-NOFP16-GI-NEXT: ushll v4.8h, v1.8b, #03612; CHECK-NOFP16-GI-NEXT: ushll2 v1.8h, v1.16b, #03613; CHECK-NOFP16-GI-NEXT: ushll v3.4s, v2.4h, #03614; CHECK-NOFP16-GI-NEXT: ushll2 v2.4s, v2.8h, #03615; CHECK-NOFP16-GI-NEXT: ushll v6.4s, v0.4h, #03616; CHECK-NOFP16-GI-NEXT: ushll2 v0.4s, v0.8h, #03617; CHECK-NOFP16-GI-NEXT: ushll v16.4s, v4.4h, #03618; CHECK-NOFP16-GI-NEXT: ushll2 v4.4s, v4.8h, #03619; CHECK-NOFP16-GI-NEXT: ushll v18.4s, v1.4h, #03620; CHECK-NOFP16-GI-NEXT: ushll2 v1.4s, v1.8h, #03621; CHECK-NOFP16-GI-NEXT: ushll v5.2d, v3.2s, #03622; CHECK-NOFP16-GI-NEXT: ushll2 v3.2d, v3.4s, #03623; CHECK-NOFP16-GI-NEXT: ushll v7.2d, v2.2s, #03624; CHECK-NOFP16-GI-NEXT: ushll2 v2.2d, v2.4s, #03625; CHECK-NOFP16-GI-NEXT: ushll v17.2d, v6.2s, #03626; CHECK-NOFP16-GI-NEXT: ushll2 v6.2d, v6.4s, #03627; CHECK-NOFP16-GI-NEXT: ushll v19.2d, v0.2s, #03628; CHECK-NOFP16-GI-NEXT: ushll2 v0.2d, v0.4s, #03629; CHECK-NOFP16-GI-NEXT: ushll v20.2d, v16.2s, #03630; CHECK-NOFP16-GI-NEXT: ucvtf v5.2d, v5.2d3631; CHECK-NOFP16-GI-NEXT: ucvtf v3.2d, v3.2d3632; CHECK-NOFP16-GI-NEXT: ucvtf v7.2d, v7.2d3633; CHECK-NOFP16-GI-NEXT: ucvtf v2.2d, v2.2d3634; CHECK-NOFP16-GI-NEXT: ucvtf v17.2d, v17.2d3635; CHECK-NOFP16-GI-NEXT: ucvtf v6.2d, v6.2d3636; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v0.2d3637; CHECK-NOFP16-GI-NEXT: stp q5, q3, [x8]3638; CHECK-NOFP16-GI-NEXT: ushll2 v5.2d, v16.4s, #03639; CHECK-NOFP16-GI-NEXT: ucvtf v16.2d, v19.2d3640; CHECK-NOFP16-GI-NEXT: stp q7, q2, [x8, #32]3641; CHECK-NOFP16-GI-NEXT: ucvtf v2.2d, v20.2d3642; CHECK-NOFP16-GI-NEXT: ushll v3.2d, v4.2s, #03643; CHECK-NOFP16-GI-NEXT: stp q17, q6, [x8, #64]3644; CHECK-NOFP16-GI-NEXT: ushll2 v4.2d, v4.4s, #03645; CHECK-NOFP16-GI-NEXT: ushll v6.2d, v18.2s, #03646; CHECK-NOFP16-GI-NEXT: ucvtf v5.2d, v5.2d3647; CHECK-NOFP16-GI-NEXT: ushll2 v7.2d, v18.4s, #03648; CHECK-NOFP16-GI-NEXT: stp q16, q0, [x8, #96]3649; CHECK-NOFP16-GI-NEXT: ushll v0.2d, v1.2s, #03650; CHECK-NOFP16-GI-NEXT: ushll2 v1.2d, v1.4s, #03651; CHECK-NOFP16-GI-NEXT: ucvtf v3.2d, v3.2d3652; CHECK-NOFP16-GI-NEXT: ucvtf v4.2d, v4.2d3653; CHECK-NOFP16-GI-NEXT: ucvtf v6.2d, v6.2d3654; CHECK-NOFP16-GI-NEXT: stp q2, q5, [x8, #128]3655; CHECK-NOFP16-GI-NEXT: ucvtf v2.2d, v7.2d3656; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v0.2d3657; CHECK-NOFP16-GI-NEXT: ucvtf v1.2d, v1.2d3658; CHECK-NOFP16-GI-NEXT: stp q3, q4, [x8, #160]3659; CHECK-NOFP16-GI-NEXT: stp q6, q2, [x8, #192]3660; CHECK-NOFP16-GI-NEXT: stp q0, q1, [x8, #224]3661; CHECK-NOFP16-GI-NEXT: ret3662;3663; CHECK-FP16-GI-LABEL: utofp_v32i8_v32f64:3664; CHECK-FP16-GI: // %bb.0: // %entry3665; CHECK-FP16-GI-NEXT: ushll v2.8h, v0.8b, #03666; CHECK-FP16-GI-NEXT: ushll2 v0.8h, v0.16b, #03667; CHECK-FP16-GI-NEXT: ushll v4.8h, v1.8b, #03668; CHECK-FP16-GI-NEXT: ushll2 v1.8h, v1.16b, #03669; CHECK-FP16-GI-NEXT: ushll v3.4s, v2.4h, #03670; CHECK-FP16-GI-NEXT: ushll2 v2.4s, v2.8h, #03671; CHECK-FP16-GI-NEXT: ushll v6.4s, v0.4h, #03672; CHECK-FP16-GI-NEXT: ushll2 v0.4s, v0.8h, #03673; CHECK-FP16-GI-NEXT: ushll v16.4s, v4.4h, #03674; CHECK-FP16-GI-NEXT: ushll2 v4.4s, v4.8h, #03675; CHECK-FP16-GI-NEXT: ushll v18.4s, v1.4h, #03676; CHECK-FP16-GI-NEXT: ushll2 v1.4s, v1.8h, #03677; CHECK-FP16-GI-NEXT: ushll v5.2d, v3.2s, #03678; CHECK-FP16-GI-NEXT: ushll2 v3.2d, v3.4s, #03679; CHECK-FP16-GI-NEXT: ushll v7.2d, v2.2s, #03680; CHECK-FP16-GI-NEXT: ushll2 v2.2d, v2.4s, #03681; CHECK-FP16-GI-NEXT: ushll v17.2d, v6.2s, #03682; CHECK-FP16-GI-NEXT: ushll2 v6.2d, v6.4s, #03683; CHECK-FP16-GI-NEXT: ushll v19.2d, v0.2s, #03684; CHECK-FP16-GI-NEXT: ushll2 v0.2d, v0.4s, #03685; CHECK-FP16-GI-NEXT: ushll v20.2d, v16.2s, #03686; CHECK-FP16-GI-NEXT: ucvtf v5.2d, v5.2d3687; CHECK-FP16-GI-NEXT: ucvtf v3.2d, v3.2d3688; CHECK-FP16-GI-NEXT: ucvtf v7.2d, v7.2d3689; CHECK-FP16-GI-NEXT: ucvtf v2.2d, v2.2d3690; CHECK-FP16-GI-NEXT: ucvtf v17.2d, v17.2d3691; CHECK-FP16-GI-NEXT: ucvtf v6.2d, v6.2d3692; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v0.2d3693; CHECK-FP16-GI-NEXT: stp q5, q3, [x8]3694; CHECK-FP16-GI-NEXT: ushll2 v5.2d, v16.4s, #03695; CHECK-FP16-GI-NEXT: ucvtf v16.2d, v19.2d3696; CHECK-FP16-GI-NEXT: stp q7, q2, [x8, #32]3697; CHECK-FP16-GI-NEXT: ucvtf v2.2d, v20.2d3698; CHECK-FP16-GI-NEXT: ushll v3.2d, v4.2s, #03699; CHECK-FP16-GI-NEXT: stp q17, q6, [x8, #64]3700; CHECK-FP16-GI-NEXT: ushll2 v4.2d, v4.4s, #03701; CHECK-FP16-GI-NEXT: ushll v6.2d, v18.2s, #03702; CHECK-FP16-GI-NEXT: ucvtf v5.2d, v5.2d3703; CHECK-FP16-GI-NEXT: ushll2 v7.2d, v18.4s, #03704; CHECK-FP16-GI-NEXT: stp q16, q0, [x8, #96]3705; CHECK-FP16-GI-NEXT: ushll v0.2d, v1.2s, #03706; CHECK-FP16-GI-NEXT: ushll2 v1.2d, v1.4s, #03707; CHECK-FP16-GI-NEXT: ucvtf v3.2d, v3.2d3708; CHECK-FP16-GI-NEXT: ucvtf v4.2d, v4.2d3709; CHECK-FP16-GI-NEXT: ucvtf v6.2d, v6.2d3710; CHECK-FP16-GI-NEXT: stp q2, q5, [x8, #128]3711; CHECK-FP16-GI-NEXT: ucvtf v2.2d, v7.2d3712; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v0.2d3713; CHECK-FP16-GI-NEXT: ucvtf v1.2d, v1.2d3714; CHECK-FP16-GI-NEXT: stp q3, q4, [x8, #160]3715; CHECK-FP16-GI-NEXT: stp q6, q2, [x8, #192]3716; CHECK-FP16-GI-NEXT: stp q0, q1, [x8, #224]3717; CHECK-FP16-GI-NEXT: ret3718entry:3719 %c = uitofp <32 x i8> %a to <32 x double>3720 ret <32 x double> %c3721}3722 3723define <2 x double> @stofp_v2i128_v2f64(<2 x i128> %a) {3724; CHECK-NOFP16-SD-LABEL: stofp_v2i128_v2f64:3725; CHECK-NOFP16-SD: // %bb.0: // %entry3726; CHECK-NOFP16-SD-NEXT: sub sp, sp, #483727; CHECK-NOFP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill3728; CHECK-NOFP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill3729; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 483730; CHECK-NOFP16-SD-NEXT: .cfi_offset w19, -83731; CHECK-NOFP16-SD-NEXT: .cfi_offset w20, -163732; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -323733; CHECK-NOFP16-SD-NEXT: mov x19, x13734; CHECK-NOFP16-SD-NEXT: mov x20, x03735; CHECK-NOFP16-SD-NEXT: mov x0, x23736; CHECK-NOFP16-SD-NEXT: mov x1, x33737; CHECK-NOFP16-SD-NEXT: bl __floattidf3738; CHECK-NOFP16-SD-NEXT: mov x0, x203739; CHECK-NOFP16-SD-NEXT: mov x1, x193740; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q03741; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill3742; CHECK-NOFP16-SD-NEXT: bl __floattidf3743; CHECK-NOFP16-SD-NEXT: ldr q1, [sp] // 16-byte Reload3744; CHECK-NOFP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload3745; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q03746; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload3747; CHECK-NOFP16-SD-NEXT: mov v0.d[1], v1.d[0]3748; CHECK-NOFP16-SD-NEXT: add sp, sp, #483749; CHECK-NOFP16-SD-NEXT: ret3750;3751; CHECK-FP16-SD-LABEL: stofp_v2i128_v2f64:3752; CHECK-FP16-SD: // %bb.0: // %entry3753; CHECK-FP16-SD-NEXT: sub sp, sp, #483754; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill3755; CHECK-FP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill3756; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 483757; CHECK-FP16-SD-NEXT: .cfi_offset w19, -83758; CHECK-FP16-SD-NEXT: .cfi_offset w20, -163759; CHECK-FP16-SD-NEXT: .cfi_offset w30, -323760; CHECK-FP16-SD-NEXT: mov x19, x13761; CHECK-FP16-SD-NEXT: mov x20, x03762; CHECK-FP16-SD-NEXT: mov x0, x23763; CHECK-FP16-SD-NEXT: mov x1, x33764; CHECK-FP16-SD-NEXT: bl __floattidf3765; CHECK-FP16-SD-NEXT: mov x0, x203766; CHECK-FP16-SD-NEXT: mov x1, x193767; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q03768; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill3769; CHECK-FP16-SD-NEXT: bl __floattidf3770; CHECK-FP16-SD-NEXT: ldr q1, [sp] // 16-byte Reload3771; CHECK-FP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload3772; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q03773; CHECK-FP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload3774; CHECK-FP16-SD-NEXT: mov v0.d[1], v1.d[0]3775; CHECK-FP16-SD-NEXT: add sp, sp, #483776; CHECK-FP16-SD-NEXT: ret3777;3778; CHECK-NOFP16-GI-LABEL: stofp_v2i128_v2f64:3779; CHECK-NOFP16-GI: // %bb.0: // %entry3780; CHECK-NOFP16-GI-NEXT: sub sp, sp, #483781; CHECK-NOFP16-GI-NEXT: str x30, [sp, #16] // 8-byte Spill3782; CHECK-NOFP16-GI-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill3783; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 483784; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -83785; CHECK-NOFP16-GI-NEXT: .cfi_offset w20, -163786; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -323787; CHECK-NOFP16-GI-NEXT: mov x19, x23788; CHECK-NOFP16-GI-NEXT: mov x20, x33789; CHECK-NOFP16-GI-NEXT: bl __floattidf3790; CHECK-NOFP16-GI-NEXT: mov x0, x193791; CHECK-NOFP16-GI-NEXT: mov x1, x203792; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q03793; CHECK-NOFP16-GI-NEXT: str q0, [sp] // 16-byte Spill3794; CHECK-NOFP16-GI-NEXT: bl __floattidf3795; CHECK-NOFP16-GI-NEXT: ldr q1, [sp] // 16-byte Reload3796; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q03797; CHECK-NOFP16-GI-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload3798; CHECK-NOFP16-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload3799; CHECK-NOFP16-GI-NEXT: mov v1.d[1], v0.d[0]3800; CHECK-NOFP16-GI-NEXT: mov v0.16b, v1.16b3801; CHECK-NOFP16-GI-NEXT: add sp, sp, #483802; CHECK-NOFP16-GI-NEXT: ret3803;3804; CHECK-FP16-GI-LABEL: stofp_v2i128_v2f64:3805; CHECK-FP16-GI: // %bb.0: // %entry3806; CHECK-FP16-GI-NEXT: sub sp, sp, #483807; CHECK-FP16-GI-NEXT: str x30, [sp, #16] // 8-byte Spill3808; CHECK-FP16-GI-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill3809; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 483810; CHECK-FP16-GI-NEXT: .cfi_offset w19, -83811; CHECK-FP16-GI-NEXT: .cfi_offset w20, -163812; CHECK-FP16-GI-NEXT: .cfi_offset w30, -323813; CHECK-FP16-GI-NEXT: mov x19, x23814; CHECK-FP16-GI-NEXT: mov x20, x33815; CHECK-FP16-GI-NEXT: bl __floattidf3816; CHECK-FP16-GI-NEXT: mov x0, x193817; CHECK-FP16-GI-NEXT: mov x1, x203818; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q03819; CHECK-FP16-GI-NEXT: str q0, [sp] // 16-byte Spill3820; CHECK-FP16-GI-NEXT: bl __floattidf3821; CHECK-FP16-GI-NEXT: ldr q1, [sp] // 16-byte Reload3822; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q03823; CHECK-FP16-GI-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload3824; CHECK-FP16-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload3825; CHECK-FP16-GI-NEXT: mov v1.d[1], v0.d[0]3826; CHECK-FP16-GI-NEXT: mov v0.16b, v1.16b3827; CHECK-FP16-GI-NEXT: add sp, sp, #483828; CHECK-FP16-GI-NEXT: ret3829entry:3830 %c = sitofp <2 x i128> %a to <2 x double>3831 ret <2 x double> %c3832}3833 3834define <2 x double> @utofp_v2i128_v2f64(<2 x i128> %a) {3835; CHECK-NOFP16-SD-LABEL: utofp_v2i128_v2f64:3836; CHECK-NOFP16-SD: // %bb.0: // %entry3837; CHECK-NOFP16-SD-NEXT: sub sp, sp, #483838; CHECK-NOFP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill3839; CHECK-NOFP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill3840; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 483841; CHECK-NOFP16-SD-NEXT: .cfi_offset w19, -83842; CHECK-NOFP16-SD-NEXT: .cfi_offset w20, -163843; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -323844; CHECK-NOFP16-SD-NEXT: mov x19, x13845; CHECK-NOFP16-SD-NEXT: mov x20, x03846; CHECK-NOFP16-SD-NEXT: mov x0, x23847; CHECK-NOFP16-SD-NEXT: mov x1, x33848; CHECK-NOFP16-SD-NEXT: bl __floatuntidf3849; CHECK-NOFP16-SD-NEXT: mov x0, x203850; CHECK-NOFP16-SD-NEXT: mov x1, x193851; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q03852; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill3853; CHECK-NOFP16-SD-NEXT: bl __floatuntidf3854; CHECK-NOFP16-SD-NEXT: ldr q1, [sp] // 16-byte Reload3855; CHECK-NOFP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload3856; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q03857; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload3858; CHECK-NOFP16-SD-NEXT: mov v0.d[1], v1.d[0]3859; CHECK-NOFP16-SD-NEXT: add sp, sp, #483860; CHECK-NOFP16-SD-NEXT: ret3861;3862; CHECK-FP16-SD-LABEL: utofp_v2i128_v2f64:3863; CHECK-FP16-SD: // %bb.0: // %entry3864; CHECK-FP16-SD-NEXT: sub sp, sp, #483865; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill3866; CHECK-FP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill3867; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 483868; CHECK-FP16-SD-NEXT: .cfi_offset w19, -83869; CHECK-FP16-SD-NEXT: .cfi_offset w20, -163870; CHECK-FP16-SD-NEXT: .cfi_offset w30, -323871; CHECK-FP16-SD-NEXT: mov x19, x13872; CHECK-FP16-SD-NEXT: mov x20, x03873; CHECK-FP16-SD-NEXT: mov x0, x23874; CHECK-FP16-SD-NEXT: mov x1, x33875; CHECK-FP16-SD-NEXT: bl __floatuntidf3876; CHECK-FP16-SD-NEXT: mov x0, x203877; CHECK-FP16-SD-NEXT: mov x1, x193878; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q03879; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill3880; CHECK-FP16-SD-NEXT: bl __floatuntidf3881; CHECK-FP16-SD-NEXT: ldr q1, [sp] // 16-byte Reload3882; CHECK-FP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload3883; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q03884; CHECK-FP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload3885; CHECK-FP16-SD-NEXT: mov v0.d[1], v1.d[0]3886; CHECK-FP16-SD-NEXT: add sp, sp, #483887; CHECK-FP16-SD-NEXT: ret3888;3889; CHECK-NOFP16-GI-LABEL: utofp_v2i128_v2f64:3890; CHECK-NOFP16-GI: // %bb.0: // %entry3891; CHECK-NOFP16-GI-NEXT: sub sp, sp, #483892; CHECK-NOFP16-GI-NEXT: str x30, [sp, #16] // 8-byte Spill3893; CHECK-NOFP16-GI-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill3894; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 483895; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -83896; CHECK-NOFP16-GI-NEXT: .cfi_offset w20, -163897; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -323898; CHECK-NOFP16-GI-NEXT: mov x19, x23899; CHECK-NOFP16-GI-NEXT: mov x20, x33900; CHECK-NOFP16-GI-NEXT: bl __floatuntidf3901; CHECK-NOFP16-GI-NEXT: mov x0, x193902; CHECK-NOFP16-GI-NEXT: mov x1, x203903; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q03904; CHECK-NOFP16-GI-NEXT: str q0, [sp] // 16-byte Spill3905; CHECK-NOFP16-GI-NEXT: bl __floatuntidf3906; CHECK-NOFP16-GI-NEXT: ldr q1, [sp] // 16-byte Reload3907; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q03908; CHECK-NOFP16-GI-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload3909; CHECK-NOFP16-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload3910; CHECK-NOFP16-GI-NEXT: mov v1.d[1], v0.d[0]3911; CHECK-NOFP16-GI-NEXT: mov v0.16b, v1.16b3912; CHECK-NOFP16-GI-NEXT: add sp, sp, #483913; CHECK-NOFP16-GI-NEXT: ret3914;3915; CHECK-FP16-GI-LABEL: utofp_v2i128_v2f64:3916; CHECK-FP16-GI: // %bb.0: // %entry3917; CHECK-FP16-GI-NEXT: sub sp, sp, #483918; CHECK-FP16-GI-NEXT: str x30, [sp, #16] // 8-byte Spill3919; CHECK-FP16-GI-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill3920; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 483921; CHECK-FP16-GI-NEXT: .cfi_offset w19, -83922; CHECK-FP16-GI-NEXT: .cfi_offset w20, -163923; CHECK-FP16-GI-NEXT: .cfi_offset w30, -323924; CHECK-FP16-GI-NEXT: mov x19, x23925; CHECK-FP16-GI-NEXT: mov x20, x33926; CHECK-FP16-GI-NEXT: bl __floatuntidf3927; CHECK-FP16-GI-NEXT: mov x0, x193928; CHECK-FP16-GI-NEXT: mov x1, x203929; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q03930; CHECK-FP16-GI-NEXT: str q0, [sp] // 16-byte Spill3931; CHECK-FP16-GI-NEXT: bl __floatuntidf3932; CHECK-FP16-GI-NEXT: ldr q1, [sp] // 16-byte Reload3933; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q03934; CHECK-FP16-GI-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload3935; CHECK-FP16-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload3936; CHECK-FP16-GI-NEXT: mov v1.d[1], v0.d[0]3937; CHECK-FP16-GI-NEXT: mov v0.16b, v1.16b3938; CHECK-FP16-GI-NEXT: add sp, sp, #483939; CHECK-FP16-GI-NEXT: ret3940entry:3941 %c = uitofp <2 x i128> %a to <2 x double>3942 ret <2 x double> %c3943}3944 3945define <2 x float> @stofp_v2i64_v2f32(<2 x i64> %a) {3946; CHECK-LABEL: stofp_v2i64_v2f32:3947; CHECK: // %bb.0: // %entry3948; CHECK-NEXT: mov x8, v0.d[1]3949; CHECK-NEXT: fmov x9, d03950; CHECK-NEXT: scvtf s0, x93951; CHECK-NEXT: scvtf s1, x83952; CHECK-NEXT: mov v0.s[1], v1.s[0]3953; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q03954; CHECK-NEXT: ret3955entry:3956 %c = sitofp <2 x i64> %a to <2 x float>3957 ret <2 x float> %c3958}3959 3960define <2 x float> @utofp_v2i64_v2f32(<2 x i64> %a) {3961; CHECK-LABEL: utofp_v2i64_v2f32:3962; CHECK: // %bb.0: // %entry3963; CHECK-NEXT: mov x8, v0.d[1]3964; CHECK-NEXT: fmov x9, d03965; CHECK-NEXT: ucvtf s0, x93966; CHECK-NEXT: ucvtf s1, x83967; CHECK-NEXT: mov v0.s[1], v1.s[0]3968; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q03969; CHECK-NEXT: ret3970entry:3971 %c = uitofp <2 x i64> %a to <2 x float>3972 ret <2 x float> %c3973}3974 3975define <3 x float> @stofp_v3i64_v3f32(<3 x i64> %a) {3976; CHECK-NOFP16-SD-LABEL: stofp_v3i64_v3f32:3977; CHECK-NOFP16-SD: // %bb.0: // %entry3978; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q03979; CHECK-NOFP16-SD-NEXT: fmov x8, d03980; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 def $q13981; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 def $q23982; CHECK-NOFP16-SD-NEXT: movi v0.2d, #00000000000000003983; CHECK-NOFP16-SD-NEXT: scvtf s3, x83984; CHECK-NOFP16-SD-NEXT: fmov x8, d13985; CHECK-NOFP16-SD-NEXT: scvtf s1, x83986; CHECK-NOFP16-SD-NEXT: fmov x8, d23987; CHECK-NOFP16-SD-NEXT: mov v0.s[0], v3.s[0]3988; CHECK-NOFP16-SD-NEXT: mov v0.s[1], v1.s[0]3989; CHECK-NOFP16-SD-NEXT: scvtf s1, x83990; CHECK-NOFP16-SD-NEXT: mov v0.s[2], v1.s[0]3991; CHECK-NOFP16-SD-NEXT: ret3992;3993; CHECK-FP16-SD-LABEL: stofp_v3i64_v3f32:3994; CHECK-FP16-SD: // %bb.0: // %entry3995; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q03996; CHECK-FP16-SD-NEXT: fmov x8, d03997; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 def $q13998; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 def $q23999; CHECK-FP16-SD-NEXT: movi v0.2d, #00000000000000004000; CHECK-FP16-SD-NEXT: scvtf s3, x84001; CHECK-FP16-SD-NEXT: fmov x8, d14002; CHECK-FP16-SD-NEXT: scvtf s1, x84003; CHECK-FP16-SD-NEXT: fmov x8, d24004; CHECK-FP16-SD-NEXT: mov v0.s[0], v3.s[0]4005; CHECK-FP16-SD-NEXT: mov v0.s[1], v1.s[0]4006; CHECK-FP16-SD-NEXT: scvtf s1, x84007; CHECK-FP16-SD-NEXT: mov v0.s[2], v1.s[0]4008; CHECK-FP16-SD-NEXT: ret4009;4010; CHECK-NOFP16-GI-LABEL: stofp_v3i64_v3f32:4011; CHECK-NOFP16-GI: // %bb.0: // %entry4012; CHECK-NOFP16-GI-NEXT: fmov x8, d04013; CHECK-NOFP16-GI-NEXT: fmov x9, d14014; CHECK-NOFP16-GI-NEXT: scvtf s0, x84015; CHECK-NOFP16-GI-NEXT: scvtf s1, x94016; CHECK-NOFP16-GI-NEXT: fmov x8, d24017; CHECK-NOFP16-GI-NEXT: scvtf s2, x84018; CHECK-NOFP16-GI-NEXT: mov v0.s[1], v1.s[0]4019; CHECK-NOFP16-GI-NEXT: mov v0.s[2], v2.s[0]4020; CHECK-NOFP16-GI-NEXT: ret4021;4022; CHECK-FP16-GI-LABEL: stofp_v3i64_v3f32:4023; CHECK-FP16-GI: // %bb.0: // %entry4024; CHECK-FP16-GI-NEXT: fmov x8, d04025; CHECK-FP16-GI-NEXT: fmov x9, d14026; CHECK-FP16-GI-NEXT: scvtf s0, x84027; CHECK-FP16-GI-NEXT: scvtf s1, x94028; CHECK-FP16-GI-NEXT: fmov x8, d24029; CHECK-FP16-GI-NEXT: scvtf s2, x84030; CHECK-FP16-GI-NEXT: mov v0.s[1], v1.s[0]4031; CHECK-FP16-GI-NEXT: mov v0.s[2], v2.s[0]4032; CHECK-FP16-GI-NEXT: ret4033entry:4034 %c = sitofp <3 x i64> %a to <3 x float>4035 ret <3 x float> %c4036}4037 4038define <3 x float> @utofp_v3i64_v3f32(<3 x i64> %a) {4039; CHECK-NOFP16-SD-LABEL: utofp_v3i64_v3f32:4040; CHECK-NOFP16-SD: // %bb.0: // %entry4041; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04042; CHECK-NOFP16-SD-NEXT: fmov x8, d04043; CHECK-NOFP16-SD-NEXT: // kill: def $d1 killed $d1 def $q14044; CHECK-NOFP16-SD-NEXT: // kill: def $d2 killed $d2 def $q24045; CHECK-NOFP16-SD-NEXT: movi v0.2d, #00000000000000004046; CHECK-NOFP16-SD-NEXT: ucvtf s3, x84047; CHECK-NOFP16-SD-NEXT: fmov x8, d14048; CHECK-NOFP16-SD-NEXT: ucvtf s1, x84049; CHECK-NOFP16-SD-NEXT: fmov x8, d24050; CHECK-NOFP16-SD-NEXT: mov v0.s[0], v3.s[0]4051; CHECK-NOFP16-SD-NEXT: mov v0.s[1], v1.s[0]4052; CHECK-NOFP16-SD-NEXT: ucvtf s1, x84053; CHECK-NOFP16-SD-NEXT: mov v0.s[2], v1.s[0]4054; CHECK-NOFP16-SD-NEXT: ret4055;4056; CHECK-FP16-SD-LABEL: utofp_v3i64_v3f32:4057; CHECK-FP16-SD: // %bb.0: // %entry4058; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q04059; CHECK-FP16-SD-NEXT: fmov x8, d04060; CHECK-FP16-SD-NEXT: // kill: def $d1 killed $d1 def $q14061; CHECK-FP16-SD-NEXT: // kill: def $d2 killed $d2 def $q24062; CHECK-FP16-SD-NEXT: movi v0.2d, #00000000000000004063; CHECK-FP16-SD-NEXT: ucvtf s3, x84064; CHECK-FP16-SD-NEXT: fmov x8, d14065; CHECK-FP16-SD-NEXT: ucvtf s1, x84066; CHECK-FP16-SD-NEXT: fmov x8, d24067; CHECK-FP16-SD-NEXT: mov v0.s[0], v3.s[0]4068; CHECK-FP16-SD-NEXT: mov v0.s[1], v1.s[0]4069; CHECK-FP16-SD-NEXT: ucvtf s1, x84070; CHECK-FP16-SD-NEXT: mov v0.s[2], v1.s[0]4071; CHECK-FP16-SD-NEXT: ret4072;4073; CHECK-NOFP16-GI-LABEL: utofp_v3i64_v3f32:4074; CHECK-NOFP16-GI: // %bb.0: // %entry4075; CHECK-NOFP16-GI-NEXT: fmov x8, d04076; CHECK-NOFP16-GI-NEXT: fmov x9, d14077; CHECK-NOFP16-GI-NEXT: ucvtf s0, x84078; CHECK-NOFP16-GI-NEXT: ucvtf s1, x94079; CHECK-NOFP16-GI-NEXT: fmov x8, d24080; CHECK-NOFP16-GI-NEXT: ucvtf s2, x84081; CHECK-NOFP16-GI-NEXT: mov v0.s[1], v1.s[0]4082; CHECK-NOFP16-GI-NEXT: mov v0.s[2], v2.s[0]4083; CHECK-NOFP16-GI-NEXT: ret4084;4085; CHECK-FP16-GI-LABEL: utofp_v3i64_v3f32:4086; CHECK-FP16-GI: // %bb.0: // %entry4087; CHECK-FP16-GI-NEXT: fmov x8, d04088; CHECK-FP16-GI-NEXT: fmov x9, d14089; CHECK-FP16-GI-NEXT: ucvtf s0, x84090; CHECK-FP16-GI-NEXT: ucvtf s1, x94091; CHECK-FP16-GI-NEXT: fmov x8, d24092; CHECK-FP16-GI-NEXT: ucvtf s2, x84093; CHECK-FP16-GI-NEXT: mov v0.s[1], v1.s[0]4094; CHECK-FP16-GI-NEXT: mov v0.s[2], v2.s[0]4095; CHECK-FP16-GI-NEXT: ret4096entry:4097 %c = uitofp <3 x i64> %a to <3 x float>4098 ret <3 x float> %c4099}4100 4101define <4 x float> @stofp_v4i64_v4f32(<4 x i64> %a) {4102; CHECK-NOFP16-SD-LABEL: stofp_v4i64_v4f32:4103; CHECK-NOFP16-SD: // %bb.0: // %entry4104; CHECK-NOFP16-SD-NEXT: mov x8, v0.d[1]4105; CHECK-NOFP16-SD-NEXT: fmov x9, d04106; CHECK-NOFP16-SD-NEXT: scvtf s0, x94107; CHECK-NOFP16-SD-NEXT: mov x9, v1.d[1]4108; CHECK-NOFP16-SD-NEXT: scvtf s2, x84109; CHECK-NOFP16-SD-NEXT: fmov x8, d14110; CHECK-NOFP16-SD-NEXT: scvtf s1, x84111; CHECK-NOFP16-SD-NEXT: mov v0.s[1], v2.s[0]4112; CHECK-NOFP16-SD-NEXT: mov v0.s[2], v1.s[0]4113; CHECK-NOFP16-SD-NEXT: scvtf s1, x94114; CHECK-NOFP16-SD-NEXT: mov v0.s[3], v1.s[0]4115; CHECK-NOFP16-SD-NEXT: ret4116;4117; CHECK-FP16-SD-LABEL: stofp_v4i64_v4f32:4118; CHECK-FP16-SD: // %bb.0: // %entry4119; CHECK-FP16-SD-NEXT: mov x8, v0.d[1]4120; CHECK-FP16-SD-NEXT: fmov x9, d04121; CHECK-FP16-SD-NEXT: scvtf s0, x94122; CHECK-FP16-SD-NEXT: mov x9, v1.d[1]4123; CHECK-FP16-SD-NEXT: scvtf s2, x84124; CHECK-FP16-SD-NEXT: fmov x8, d14125; CHECK-FP16-SD-NEXT: scvtf s1, x84126; CHECK-FP16-SD-NEXT: mov v0.s[1], v2.s[0]4127; CHECK-FP16-SD-NEXT: mov v0.s[2], v1.s[0]4128; CHECK-FP16-SD-NEXT: scvtf s1, x94129; CHECK-FP16-SD-NEXT: mov v0.s[3], v1.s[0]4130; CHECK-FP16-SD-NEXT: ret4131;4132; CHECK-NOFP16-GI-LABEL: stofp_v4i64_v4f32:4133; CHECK-NOFP16-GI: // %bb.0: // %entry4134; CHECK-NOFP16-GI-NEXT: mov x8, v0.d[1]4135; CHECK-NOFP16-GI-NEXT: fmov x9, d04136; CHECK-NOFP16-GI-NEXT: scvtf s0, x94137; CHECK-NOFP16-GI-NEXT: mov x9, v1.d[1]4138; CHECK-NOFP16-GI-NEXT: scvtf s2, x84139; CHECK-NOFP16-GI-NEXT: fmov x8, d14140; CHECK-NOFP16-GI-NEXT: scvtf s1, x84141; CHECK-NOFP16-GI-NEXT: mov v0.s[1], v2.s[0]4142; CHECK-NOFP16-GI-NEXT: scvtf s2, x94143; CHECK-NOFP16-GI-NEXT: mov v0.s[2], v1.s[0]4144; CHECK-NOFP16-GI-NEXT: mov v0.s[3], v2.s[0]4145; CHECK-NOFP16-GI-NEXT: ret4146;4147; CHECK-FP16-GI-LABEL: stofp_v4i64_v4f32:4148; CHECK-FP16-GI: // %bb.0: // %entry4149; CHECK-FP16-GI-NEXT: mov x8, v0.d[1]4150; CHECK-FP16-GI-NEXT: fmov x9, d04151; CHECK-FP16-GI-NEXT: scvtf s0, x94152; CHECK-FP16-GI-NEXT: mov x9, v1.d[1]4153; CHECK-FP16-GI-NEXT: scvtf s2, x84154; CHECK-FP16-GI-NEXT: fmov x8, d14155; CHECK-FP16-GI-NEXT: scvtf s1, x84156; CHECK-FP16-GI-NEXT: mov v0.s[1], v2.s[0]4157; CHECK-FP16-GI-NEXT: scvtf s2, x94158; CHECK-FP16-GI-NEXT: mov v0.s[2], v1.s[0]4159; CHECK-FP16-GI-NEXT: mov v0.s[3], v2.s[0]4160; CHECK-FP16-GI-NEXT: ret4161entry:4162 %c = sitofp <4 x i64> %a to <4 x float>4163 ret <4 x float> %c4164}4165 4166define <4 x float> @utofp_v4i64_v4f32(<4 x i64> %a) {4167; CHECK-NOFP16-SD-LABEL: utofp_v4i64_v4f32:4168; CHECK-NOFP16-SD: // %bb.0: // %entry4169; CHECK-NOFP16-SD-NEXT: mov x8, v0.d[1]4170; CHECK-NOFP16-SD-NEXT: fmov x9, d04171; CHECK-NOFP16-SD-NEXT: ucvtf s0, x94172; CHECK-NOFP16-SD-NEXT: mov x9, v1.d[1]4173; CHECK-NOFP16-SD-NEXT: ucvtf s2, x84174; CHECK-NOFP16-SD-NEXT: fmov x8, d14175; CHECK-NOFP16-SD-NEXT: ucvtf s1, x84176; CHECK-NOFP16-SD-NEXT: mov v0.s[1], v2.s[0]4177; CHECK-NOFP16-SD-NEXT: mov v0.s[2], v1.s[0]4178; CHECK-NOFP16-SD-NEXT: ucvtf s1, x94179; CHECK-NOFP16-SD-NEXT: mov v0.s[3], v1.s[0]4180; CHECK-NOFP16-SD-NEXT: ret4181;4182; CHECK-FP16-SD-LABEL: utofp_v4i64_v4f32:4183; CHECK-FP16-SD: // %bb.0: // %entry4184; CHECK-FP16-SD-NEXT: mov x8, v0.d[1]4185; CHECK-FP16-SD-NEXT: fmov x9, d04186; CHECK-FP16-SD-NEXT: ucvtf s0, x94187; CHECK-FP16-SD-NEXT: mov x9, v1.d[1]4188; CHECK-FP16-SD-NEXT: ucvtf s2, x84189; CHECK-FP16-SD-NEXT: fmov x8, d14190; CHECK-FP16-SD-NEXT: ucvtf s1, x84191; CHECK-FP16-SD-NEXT: mov v0.s[1], v2.s[0]4192; CHECK-FP16-SD-NEXT: mov v0.s[2], v1.s[0]4193; CHECK-FP16-SD-NEXT: ucvtf s1, x94194; CHECK-FP16-SD-NEXT: mov v0.s[3], v1.s[0]4195; CHECK-FP16-SD-NEXT: ret4196;4197; CHECK-NOFP16-GI-LABEL: utofp_v4i64_v4f32:4198; CHECK-NOFP16-GI: // %bb.0: // %entry4199; CHECK-NOFP16-GI-NEXT: mov x8, v0.d[1]4200; CHECK-NOFP16-GI-NEXT: fmov x9, d04201; CHECK-NOFP16-GI-NEXT: ucvtf s0, x94202; CHECK-NOFP16-GI-NEXT: mov x9, v1.d[1]4203; CHECK-NOFP16-GI-NEXT: ucvtf s2, x84204; CHECK-NOFP16-GI-NEXT: fmov x8, d14205; CHECK-NOFP16-GI-NEXT: ucvtf s1, x84206; CHECK-NOFP16-GI-NEXT: mov v0.s[1], v2.s[0]4207; CHECK-NOFP16-GI-NEXT: ucvtf s2, x94208; CHECK-NOFP16-GI-NEXT: mov v0.s[2], v1.s[0]4209; CHECK-NOFP16-GI-NEXT: mov v0.s[3], v2.s[0]4210; CHECK-NOFP16-GI-NEXT: ret4211;4212; CHECK-FP16-GI-LABEL: utofp_v4i64_v4f32:4213; CHECK-FP16-GI: // %bb.0: // %entry4214; CHECK-FP16-GI-NEXT: mov x8, v0.d[1]4215; CHECK-FP16-GI-NEXT: fmov x9, d04216; CHECK-FP16-GI-NEXT: ucvtf s0, x94217; CHECK-FP16-GI-NEXT: mov x9, v1.d[1]4218; CHECK-FP16-GI-NEXT: ucvtf s2, x84219; CHECK-FP16-GI-NEXT: fmov x8, d14220; CHECK-FP16-GI-NEXT: ucvtf s1, x84221; CHECK-FP16-GI-NEXT: mov v0.s[1], v2.s[0]4222; CHECK-FP16-GI-NEXT: ucvtf s2, x94223; CHECK-FP16-GI-NEXT: mov v0.s[2], v1.s[0]4224; CHECK-FP16-GI-NEXT: mov v0.s[3], v2.s[0]4225; CHECK-FP16-GI-NEXT: ret4226entry:4227 %c = uitofp <4 x i64> %a to <4 x float>4228 ret <4 x float> %c4229}4230 4231define <8 x float> @stofp_v8i64_v8f32(<8 x i64> %a) {4232; CHECK-NOFP16-SD-LABEL: stofp_v8i64_v8f32:4233; CHECK-NOFP16-SD: // %bb.0: // %entry4234; CHECK-NOFP16-SD-NEXT: mov x8, v0.d[1]4235; CHECK-NOFP16-SD-NEXT: mov x9, v2.d[1]4236; CHECK-NOFP16-SD-NEXT: fmov x10, d04237; CHECK-NOFP16-SD-NEXT: fmov x11, d24238; CHECK-NOFP16-SD-NEXT: scvtf s0, x104239; CHECK-NOFP16-SD-NEXT: mov x10, v3.d[1]4240; CHECK-NOFP16-SD-NEXT: scvtf s4, x84241; CHECK-NOFP16-SD-NEXT: scvtf s5, x94242; CHECK-NOFP16-SD-NEXT: scvtf s2, x114243; CHECK-NOFP16-SD-NEXT: fmov x9, d14244; CHECK-NOFP16-SD-NEXT: fmov x11, d34245; CHECK-NOFP16-SD-NEXT: mov x8, v1.d[1]4246; CHECK-NOFP16-SD-NEXT: scvtf s1, x94247; CHECK-NOFP16-SD-NEXT: mov v0.s[1], v4.s[0]4248; CHECK-NOFP16-SD-NEXT: scvtf s3, x114249; CHECK-NOFP16-SD-NEXT: mov v2.s[1], v5.s[0]4250; CHECK-NOFP16-SD-NEXT: scvtf s4, x84251; CHECK-NOFP16-SD-NEXT: mov v0.s[2], v1.s[0]4252; CHECK-NOFP16-SD-NEXT: scvtf s1, x104253; CHECK-NOFP16-SD-NEXT: mov v2.s[2], v3.s[0]4254; CHECK-NOFP16-SD-NEXT: mov v0.s[3], v4.s[0]4255; CHECK-NOFP16-SD-NEXT: mov v2.s[3], v1.s[0]4256; CHECK-NOFP16-SD-NEXT: mov v1.16b, v2.16b4257; CHECK-NOFP16-SD-NEXT: ret4258;4259; CHECK-FP16-SD-LABEL: stofp_v8i64_v8f32:4260; CHECK-FP16-SD: // %bb.0: // %entry4261; CHECK-FP16-SD-NEXT: mov x8, v0.d[1]4262; CHECK-FP16-SD-NEXT: mov x9, v2.d[1]4263; CHECK-FP16-SD-NEXT: fmov x10, d04264; CHECK-FP16-SD-NEXT: fmov x11, d24265; CHECK-FP16-SD-NEXT: scvtf s0, x104266; CHECK-FP16-SD-NEXT: mov x10, v3.d[1]4267; CHECK-FP16-SD-NEXT: scvtf s4, x84268; CHECK-FP16-SD-NEXT: scvtf s5, x94269; CHECK-FP16-SD-NEXT: scvtf s2, x114270; CHECK-FP16-SD-NEXT: fmov x9, d14271; CHECK-FP16-SD-NEXT: fmov x11, d34272; CHECK-FP16-SD-NEXT: mov x8, v1.d[1]4273; CHECK-FP16-SD-NEXT: scvtf s1, x94274; CHECK-FP16-SD-NEXT: mov v0.s[1], v4.s[0]4275; CHECK-FP16-SD-NEXT: scvtf s3, x114276; CHECK-FP16-SD-NEXT: mov v2.s[1], v5.s[0]4277; CHECK-FP16-SD-NEXT: scvtf s4, x84278; CHECK-FP16-SD-NEXT: mov v0.s[2], v1.s[0]4279; CHECK-FP16-SD-NEXT: scvtf s1, x104280; CHECK-FP16-SD-NEXT: mov v2.s[2], v3.s[0]4281; CHECK-FP16-SD-NEXT: mov v0.s[3], v4.s[0]4282; CHECK-FP16-SD-NEXT: mov v2.s[3], v1.s[0]4283; CHECK-FP16-SD-NEXT: mov v1.16b, v2.16b4284; CHECK-FP16-SD-NEXT: ret4285;4286; CHECK-NOFP16-GI-LABEL: stofp_v8i64_v8f32:4287; CHECK-NOFP16-GI: // %bb.0: // %entry4288; CHECK-NOFP16-GI-NEXT: fmov x10, d04289; CHECK-NOFP16-GI-NEXT: mov x9, v2.d[1]4290; CHECK-NOFP16-GI-NEXT: mov x8, v0.d[1]4291; CHECK-NOFP16-GI-NEXT: scvtf s0, x104292; CHECK-NOFP16-GI-NEXT: fmov x10, d24293; CHECK-NOFP16-GI-NEXT: scvtf s5, x94294; CHECK-NOFP16-GI-NEXT: fmov x9, d14295; CHECK-NOFP16-GI-NEXT: scvtf s4, x84296; CHECK-NOFP16-GI-NEXT: mov x8, v1.d[1]4297; CHECK-NOFP16-GI-NEXT: scvtf s2, x104298; CHECK-NOFP16-GI-NEXT: fmov x10, d34299; CHECK-NOFP16-GI-NEXT: scvtf s1, x94300; CHECK-NOFP16-GI-NEXT: mov x9, v3.d[1]4301; CHECK-NOFP16-GI-NEXT: mov v0.s[1], v4.s[0]4302; CHECK-NOFP16-GI-NEXT: scvtf s3, x104303; CHECK-NOFP16-GI-NEXT: scvtf s4, x84304; CHECK-NOFP16-GI-NEXT: mov v2.s[1], v5.s[0]4305; CHECK-NOFP16-GI-NEXT: scvtf s5, x94306; CHECK-NOFP16-GI-NEXT: mov v0.s[2], v1.s[0]4307; CHECK-NOFP16-GI-NEXT: mov v2.s[2], v3.s[0]4308; CHECK-NOFP16-GI-NEXT: mov v0.s[3], v4.s[0]4309; CHECK-NOFP16-GI-NEXT: mov v2.s[3], v5.s[0]4310; CHECK-NOFP16-GI-NEXT: mov v1.16b, v2.16b4311; CHECK-NOFP16-GI-NEXT: ret4312;4313; CHECK-FP16-GI-LABEL: stofp_v8i64_v8f32:4314; CHECK-FP16-GI: // %bb.0: // %entry4315; CHECK-FP16-GI-NEXT: fmov x10, d04316; CHECK-FP16-GI-NEXT: mov x9, v2.d[1]4317; CHECK-FP16-GI-NEXT: mov x8, v0.d[1]4318; CHECK-FP16-GI-NEXT: scvtf s0, x104319; CHECK-FP16-GI-NEXT: fmov x10, d24320; CHECK-FP16-GI-NEXT: scvtf s5, x94321; CHECK-FP16-GI-NEXT: fmov x9, d14322; CHECK-FP16-GI-NEXT: scvtf s4, x84323; CHECK-FP16-GI-NEXT: mov x8, v1.d[1]4324; CHECK-FP16-GI-NEXT: scvtf s2, x104325; CHECK-FP16-GI-NEXT: fmov x10, d34326; CHECK-FP16-GI-NEXT: scvtf s1, x94327; CHECK-FP16-GI-NEXT: mov x9, v3.d[1]4328; CHECK-FP16-GI-NEXT: mov v0.s[1], v4.s[0]4329; CHECK-FP16-GI-NEXT: scvtf s3, x104330; CHECK-FP16-GI-NEXT: scvtf s4, x84331; CHECK-FP16-GI-NEXT: mov v2.s[1], v5.s[0]4332; CHECK-FP16-GI-NEXT: scvtf s5, x94333; CHECK-FP16-GI-NEXT: mov v0.s[2], v1.s[0]4334; CHECK-FP16-GI-NEXT: mov v2.s[2], v3.s[0]4335; CHECK-FP16-GI-NEXT: mov v0.s[3], v4.s[0]4336; CHECK-FP16-GI-NEXT: mov v2.s[3], v5.s[0]4337; CHECK-FP16-GI-NEXT: mov v1.16b, v2.16b4338; CHECK-FP16-GI-NEXT: ret4339entry:4340 %c = sitofp <8 x i64> %a to <8 x float>4341 ret <8 x float> %c4342}4343 4344define <8 x float> @utofp_v8i64_v8f32(<8 x i64> %a) {4345; CHECK-NOFP16-SD-LABEL: utofp_v8i64_v8f32:4346; CHECK-NOFP16-SD: // %bb.0: // %entry4347; CHECK-NOFP16-SD-NEXT: mov x8, v0.d[1]4348; CHECK-NOFP16-SD-NEXT: mov x9, v2.d[1]4349; CHECK-NOFP16-SD-NEXT: fmov x10, d04350; CHECK-NOFP16-SD-NEXT: fmov x11, d24351; CHECK-NOFP16-SD-NEXT: ucvtf s0, x104352; CHECK-NOFP16-SD-NEXT: mov x10, v3.d[1]4353; CHECK-NOFP16-SD-NEXT: ucvtf s4, x84354; CHECK-NOFP16-SD-NEXT: ucvtf s5, x94355; CHECK-NOFP16-SD-NEXT: ucvtf s2, x114356; CHECK-NOFP16-SD-NEXT: fmov x9, d14357; CHECK-NOFP16-SD-NEXT: fmov x11, d34358; CHECK-NOFP16-SD-NEXT: mov x8, v1.d[1]4359; CHECK-NOFP16-SD-NEXT: ucvtf s1, x94360; CHECK-NOFP16-SD-NEXT: mov v0.s[1], v4.s[0]4361; CHECK-NOFP16-SD-NEXT: ucvtf s3, x114362; CHECK-NOFP16-SD-NEXT: mov v2.s[1], v5.s[0]4363; CHECK-NOFP16-SD-NEXT: ucvtf s4, x84364; CHECK-NOFP16-SD-NEXT: mov v0.s[2], v1.s[0]4365; CHECK-NOFP16-SD-NEXT: ucvtf s1, x104366; CHECK-NOFP16-SD-NEXT: mov v2.s[2], v3.s[0]4367; CHECK-NOFP16-SD-NEXT: mov v0.s[3], v4.s[0]4368; CHECK-NOFP16-SD-NEXT: mov v2.s[3], v1.s[0]4369; CHECK-NOFP16-SD-NEXT: mov v1.16b, v2.16b4370; CHECK-NOFP16-SD-NEXT: ret4371;4372; CHECK-FP16-SD-LABEL: utofp_v8i64_v8f32:4373; CHECK-FP16-SD: // %bb.0: // %entry4374; CHECK-FP16-SD-NEXT: mov x8, v0.d[1]4375; CHECK-FP16-SD-NEXT: mov x9, v2.d[1]4376; CHECK-FP16-SD-NEXT: fmov x10, d04377; CHECK-FP16-SD-NEXT: fmov x11, d24378; CHECK-FP16-SD-NEXT: ucvtf s0, x104379; CHECK-FP16-SD-NEXT: mov x10, v3.d[1]4380; CHECK-FP16-SD-NEXT: ucvtf s4, x84381; CHECK-FP16-SD-NEXT: ucvtf s5, x94382; CHECK-FP16-SD-NEXT: ucvtf s2, x114383; CHECK-FP16-SD-NEXT: fmov x9, d14384; CHECK-FP16-SD-NEXT: fmov x11, d34385; CHECK-FP16-SD-NEXT: mov x8, v1.d[1]4386; CHECK-FP16-SD-NEXT: ucvtf s1, x94387; CHECK-FP16-SD-NEXT: mov v0.s[1], v4.s[0]4388; CHECK-FP16-SD-NEXT: ucvtf s3, x114389; CHECK-FP16-SD-NEXT: mov v2.s[1], v5.s[0]4390; CHECK-FP16-SD-NEXT: ucvtf s4, x84391; CHECK-FP16-SD-NEXT: mov v0.s[2], v1.s[0]4392; CHECK-FP16-SD-NEXT: ucvtf s1, x104393; CHECK-FP16-SD-NEXT: mov v2.s[2], v3.s[0]4394; CHECK-FP16-SD-NEXT: mov v0.s[3], v4.s[0]4395; CHECK-FP16-SD-NEXT: mov v2.s[3], v1.s[0]4396; CHECK-FP16-SD-NEXT: mov v1.16b, v2.16b4397; CHECK-FP16-SD-NEXT: ret4398;4399; CHECK-NOFP16-GI-LABEL: utofp_v8i64_v8f32:4400; CHECK-NOFP16-GI: // %bb.0: // %entry4401; CHECK-NOFP16-GI-NEXT: fmov x10, d04402; CHECK-NOFP16-GI-NEXT: mov x9, v2.d[1]4403; CHECK-NOFP16-GI-NEXT: mov x8, v0.d[1]4404; CHECK-NOFP16-GI-NEXT: ucvtf s0, x104405; CHECK-NOFP16-GI-NEXT: fmov x10, d24406; CHECK-NOFP16-GI-NEXT: ucvtf s5, x94407; CHECK-NOFP16-GI-NEXT: fmov x9, d14408; CHECK-NOFP16-GI-NEXT: ucvtf s4, x84409; CHECK-NOFP16-GI-NEXT: mov x8, v1.d[1]4410; CHECK-NOFP16-GI-NEXT: ucvtf s2, x104411; CHECK-NOFP16-GI-NEXT: fmov x10, d34412; CHECK-NOFP16-GI-NEXT: ucvtf s1, x94413; CHECK-NOFP16-GI-NEXT: mov x9, v3.d[1]4414; CHECK-NOFP16-GI-NEXT: mov v0.s[1], v4.s[0]4415; CHECK-NOFP16-GI-NEXT: ucvtf s3, x104416; CHECK-NOFP16-GI-NEXT: ucvtf s4, x84417; CHECK-NOFP16-GI-NEXT: mov v2.s[1], v5.s[0]4418; CHECK-NOFP16-GI-NEXT: ucvtf s5, x94419; CHECK-NOFP16-GI-NEXT: mov v0.s[2], v1.s[0]4420; CHECK-NOFP16-GI-NEXT: mov v2.s[2], v3.s[0]4421; CHECK-NOFP16-GI-NEXT: mov v0.s[3], v4.s[0]4422; CHECK-NOFP16-GI-NEXT: mov v2.s[3], v5.s[0]4423; CHECK-NOFP16-GI-NEXT: mov v1.16b, v2.16b4424; CHECK-NOFP16-GI-NEXT: ret4425;4426; CHECK-FP16-GI-LABEL: utofp_v8i64_v8f32:4427; CHECK-FP16-GI: // %bb.0: // %entry4428; CHECK-FP16-GI-NEXT: fmov x10, d04429; CHECK-FP16-GI-NEXT: mov x9, v2.d[1]4430; CHECK-FP16-GI-NEXT: mov x8, v0.d[1]4431; CHECK-FP16-GI-NEXT: ucvtf s0, x104432; CHECK-FP16-GI-NEXT: fmov x10, d24433; CHECK-FP16-GI-NEXT: ucvtf s5, x94434; CHECK-FP16-GI-NEXT: fmov x9, d14435; CHECK-FP16-GI-NEXT: ucvtf s4, x84436; CHECK-FP16-GI-NEXT: mov x8, v1.d[1]4437; CHECK-FP16-GI-NEXT: ucvtf s2, x104438; CHECK-FP16-GI-NEXT: fmov x10, d34439; CHECK-FP16-GI-NEXT: ucvtf s1, x94440; CHECK-FP16-GI-NEXT: mov x9, v3.d[1]4441; CHECK-FP16-GI-NEXT: mov v0.s[1], v4.s[0]4442; CHECK-FP16-GI-NEXT: ucvtf s3, x104443; CHECK-FP16-GI-NEXT: ucvtf s4, x84444; CHECK-FP16-GI-NEXT: mov v2.s[1], v5.s[0]4445; CHECK-FP16-GI-NEXT: ucvtf s5, x94446; CHECK-FP16-GI-NEXT: mov v0.s[2], v1.s[0]4447; CHECK-FP16-GI-NEXT: mov v2.s[2], v3.s[0]4448; CHECK-FP16-GI-NEXT: mov v0.s[3], v4.s[0]4449; CHECK-FP16-GI-NEXT: mov v2.s[3], v5.s[0]4450; CHECK-FP16-GI-NEXT: mov v1.16b, v2.16b4451; CHECK-FP16-GI-NEXT: ret4452entry:4453 %c = uitofp <8 x i64> %a to <8 x float>4454 ret <8 x float> %c4455}4456 4457define <2 x float> @stofp_v2i32_v2f32(<2 x i32> %a) {4458; CHECK-LABEL: stofp_v2i32_v2f32:4459; CHECK: // %bb.0: // %entry4460; CHECK-NEXT: scvtf v0.2s, v0.2s4461; CHECK-NEXT: ret4462entry:4463 %c = sitofp <2 x i32> %a to <2 x float>4464 ret <2 x float> %c4465}4466 4467define <2 x float> @utofp_v2i32_v2f32(<2 x i32> %a) {4468; CHECK-LABEL: utofp_v2i32_v2f32:4469; CHECK: // %bb.0: // %entry4470; CHECK-NEXT: ucvtf v0.2s, v0.2s4471; CHECK-NEXT: ret4472entry:4473 %c = uitofp <2 x i32> %a to <2 x float>4474 ret <2 x float> %c4475}4476 4477define <3 x float> @stofp_v3i32_v3f32(<3 x i32> %a) {4478; CHECK-LABEL: stofp_v3i32_v3f32:4479; CHECK: // %bb.0: // %entry4480; CHECK-NEXT: scvtf v0.4s, v0.4s4481; CHECK-NEXT: ret4482entry:4483 %c = sitofp <3 x i32> %a to <3 x float>4484 ret <3 x float> %c4485}4486 4487define <3 x float> @utofp_v3i32_v3f32(<3 x i32> %a) {4488; CHECK-LABEL: utofp_v3i32_v3f32:4489; CHECK: // %bb.0: // %entry4490; CHECK-NEXT: ucvtf v0.4s, v0.4s4491; CHECK-NEXT: ret4492entry:4493 %c = uitofp <3 x i32> %a to <3 x float>4494 ret <3 x float> %c4495}4496 4497define <4 x float> @stofp_v4i32_v4f32(<4 x i32> %a) {4498; CHECK-LABEL: stofp_v4i32_v4f32:4499; CHECK: // %bb.0: // %entry4500; CHECK-NEXT: scvtf v0.4s, v0.4s4501; CHECK-NEXT: ret4502entry:4503 %c = sitofp <4 x i32> %a to <4 x float>4504 ret <4 x float> %c4505}4506 4507define <4 x float> @utofp_v4i32_v4f32(<4 x i32> %a) {4508; CHECK-LABEL: utofp_v4i32_v4f32:4509; CHECK: // %bb.0: // %entry4510; CHECK-NEXT: ucvtf v0.4s, v0.4s4511; CHECK-NEXT: ret4512entry:4513 %c = uitofp <4 x i32> %a to <4 x float>4514 ret <4 x float> %c4515}4516 4517define <8 x float> @stofp_v8i32_v8f32(<8 x i32> %a) {4518; CHECK-LABEL: stofp_v8i32_v8f32:4519; CHECK: // %bb.0: // %entry4520; CHECK-NEXT: scvtf v0.4s, v0.4s4521; CHECK-NEXT: scvtf v1.4s, v1.4s4522; CHECK-NEXT: ret4523entry:4524 %c = sitofp <8 x i32> %a to <8 x float>4525 ret <8 x float> %c4526}4527 4528define <8 x float> @utofp_v8i32_v8f32(<8 x i32> %a) {4529; CHECK-LABEL: utofp_v8i32_v8f32:4530; CHECK: // %bb.0: // %entry4531; CHECK-NEXT: ucvtf v0.4s, v0.4s4532; CHECK-NEXT: ucvtf v1.4s, v1.4s4533; CHECK-NEXT: ret4534entry:4535 %c = uitofp <8 x i32> %a to <8 x float>4536 ret <8 x float> %c4537}4538 4539define <2 x float> @stofp_v2i16_v2f32(<2 x i16> %a) {4540; CHECK-LABEL: stofp_v2i16_v2f32:4541; CHECK: // %bb.0: // %entry4542; CHECK-NEXT: shl v0.2s, v0.2s, #164543; CHECK-NEXT: sshr v0.2s, v0.2s, #164544; CHECK-NEXT: scvtf v0.2s, v0.2s4545; CHECK-NEXT: ret4546entry:4547 %c = sitofp <2 x i16> %a to <2 x float>4548 ret <2 x float> %c4549}4550 4551define <2 x float> @utofp_v2i16_v2f32(<2 x i16> %a) {4552; CHECK-LABEL: utofp_v2i16_v2f32:4553; CHECK: // %bb.0: // %entry4554; CHECK-NEXT: movi d1, #0x00ffff0000ffff4555; CHECK-NEXT: and v0.8b, v0.8b, v1.8b4556; CHECK-NEXT: ucvtf v0.2s, v0.2s4557; CHECK-NEXT: ret4558entry:4559 %c = uitofp <2 x i16> %a to <2 x float>4560 ret <2 x float> %c4561}4562 4563define <3 x float> @stofp_v3i16_v3f32(<3 x i16> %a) {4564; CHECK-LABEL: stofp_v3i16_v3f32:4565; CHECK: // %bb.0: // %entry4566; CHECK-NEXT: sshll v0.4s, v0.4h, #04567; CHECK-NEXT: scvtf v0.4s, v0.4s4568; CHECK-NEXT: ret4569entry:4570 %c = sitofp <3 x i16> %a to <3 x float>4571 ret <3 x float> %c4572}4573 4574define <3 x float> @utofp_v3i16_v3f32(<3 x i16> %a) {4575; CHECK-LABEL: utofp_v3i16_v3f32:4576; CHECK: // %bb.0: // %entry4577; CHECK-NEXT: ushll v0.4s, v0.4h, #04578; CHECK-NEXT: ucvtf v0.4s, v0.4s4579; CHECK-NEXT: ret4580entry:4581 %c = uitofp <3 x i16> %a to <3 x float>4582 ret <3 x float> %c4583}4584 4585define <4 x float> @stofp_v4i16_v4f32(<4 x i16> %a) {4586; CHECK-LABEL: stofp_v4i16_v4f32:4587; CHECK: // %bb.0: // %entry4588; CHECK-NEXT: sshll v0.4s, v0.4h, #04589; CHECK-NEXT: scvtf v0.4s, v0.4s4590; CHECK-NEXT: ret4591entry:4592 %c = sitofp <4 x i16> %a to <4 x float>4593 ret <4 x float> %c4594}4595 4596define <4 x float> @utofp_v4i16_v4f32(<4 x i16> %a) {4597; CHECK-LABEL: utofp_v4i16_v4f32:4598; CHECK: // %bb.0: // %entry4599; CHECK-NEXT: ushll v0.4s, v0.4h, #04600; CHECK-NEXT: ucvtf v0.4s, v0.4s4601; CHECK-NEXT: ret4602entry:4603 %c = uitofp <4 x i16> %a to <4 x float>4604 ret <4 x float> %c4605}4606 4607define <8 x float> @stofp_v8i16_v8f32(<8 x i16> %a) {4608; CHECK-NOFP16-SD-LABEL: stofp_v8i16_v8f32:4609; CHECK-NOFP16-SD: // %bb.0: // %entry4610; CHECK-NOFP16-SD-NEXT: sshll2 v1.4s, v0.8h, #04611; CHECK-NOFP16-SD-NEXT: sshll v0.4s, v0.4h, #04612; CHECK-NOFP16-SD-NEXT: scvtf v1.4s, v1.4s4613; CHECK-NOFP16-SD-NEXT: scvtf v0.4s, v0.4s4614; CHECK-NOFP16-SD-NEXT: ret4615;4616; CHECK-FP16-SD-LABEL: stofp_v8i16_v8f32:4617; CHECK-FP16-SD: // %bb.0: // %entry4618; CHECK-FP16-SD-NEXT: sshll2 v1.4s, v0.8h, #04619; CHECK-FP16-SD-NEXT: sshll v0.4s, v0.4h, #04620; CHECK-FP16-SD-NEXT: scvtf v1.4s, v1.4s4621; CHECK-FP16-SD-NEXT: scvtf v0.4s, v0.4s4622; CHECK-FP16-SD-NEXT: ret4623;4624; CHECK-NOFP16-GI-LABEL: stofp_v8i16_v8f32:4625; CHECK-NOFP16-GI: // %bb.0: // %entry4626; CHECK-NOFP16-GI-NEXT: sshll v1.4s, v0.4h, #04627; CHECK-NOFP16-GI-NEXT: sshll2 v2.4s, v0.8h, #04628; CHECK-NOFP16-GI-NEXT: scvtf v0.4s, v1.4s4629; CHECK-NOFP16-GI-NEXT: scvtf v1.4s, v2.4s4630; CHECK-NOFP16-GI-NEXT: ret4631;4632; CHECK-FP16-GI-LABEL: stofp_v8i16_v8f32:4633; CHECK-FP16-GI: // %bb.0: // %entry4634; CHECK-FP16-GI-NEXT: sshll v1.4s, v0.4h, #04635; CHECK-FP16-GI-NEXT: sshll2 v2.4s, v0.8h, #04636; CHECK-FP16-GI-NEXT: scvtf v0.4s, v1.4s4637; CHECK-FP16-GI-NEXT: scvtf v1.4s, v2.4s4638; CHECK-FP16-GI-NEXT: ret4639entry:4640 %c = sitofp <8 x i16> %a to <8 x float>4641 ret <8 x float> %c4642}4643 4644define <8 x float> @utofp_v8i16_v8f32(<8 x i16> %a) {4645; CHECK-NOFP16-SD-LABEL: utofp_v8i16_v8f32:4646; CHECK-NOFP16-SD: // %bb.0: // %entry4647; CHECK-NOFP16-SD-NEXT: ushll2 v1.4s, v0.8h, #04648; CHECK-NOFP16-SD-NEXT: ushll v0.4s, v0.4h, #04649; CHECK-NOFP16-SD-NEXT: ucvtf v1.4s, v1.4s4650; CHECK-NOFP16-SD-NEXT: ucvtf v0.4s, v0.4s4651; CHECK-NOFP16-SD-NEXT: ret4652;4653; CHECK-FP16-SD-LABEL: utofp_v8i16_v8f32:4654; CHECK-FP16-SD: // %bb.0: // %entry4655; CHECK-FP16-SD-NEXT: ushll2 v1.4s, v0.8h, #04656; CHECK-FP16-SD-NEXT: ushll v0.4s, v0.4h, #04657; CHECK-FP16-SD-NEXT: ucvtf v1.4s, v1.4s4658; CHECK-FP16-SD-NEXT: ucvtf v0.4s, v0.4s4659; CHECK-FP16-SD-NEXT: ret4660;4661; CHECK-NOFP16-GI-LABEL: utofp_v8i16_v8f32:4662; CHECK-NOFP16-GI: // %bb.0: // %entry4663; CHECK-NOFP16-GI-NEXT: ushll v1.4s, v0.4h, #04664; CHECK-NOFP16-GI-NEXT: ushll2 v2.4s, v0.8h, #04665; CHECK-NOFP16-GI-NEXT: ucvtf v0.4s, v1.4s4666; CHECK-NOFP16-GI-NEXT: ucvtf v1.4s, v2.4s4667; CHECK-NOFP16-GI-NEXT: ret4668;4669; CHECK-FP16-GI-LABEL: utofp_v8i16_v8f32:4670; CHECK-FP16-GI: // %bb.0: // %entry4671; CHECK-FP16-GI-NEXT: ushll v1.4s, v0.4h, #04672; CHECK-FP16-GI-NEXT: ushll2 v2.4s, v0.8h, #04673; CHECK-FP16-GI-NEXT: ucvtf v0.4s, v1.4s4674; CHECK-FP16-GI-NEXT: ucvtf v1.4s, v2.4s4675; CHECK-FP16-GI-NEXT: ret4676entry:4677 %c = uitofp <8 x i16> %a to <8 x float>4678 ret <8 x float> %c4679}4680 4681define <16 x float> @stofp_v16i16_v16f32(<16 x i16> %a) {4682; CHECK-NOFP16-SD-LABEL: stofp_v16i16_v16f32:4683; CHECK-NOFP16-SD: // %bb.0: // %entry4684; CHECK-NOFP16-SD-NEXT: sshll v2.4s, v0.4h, #04685; CHECK-NOFP16-SD-NEXT: sshll2 v3.4s, v0.8h, #04686; CHECK-NOFP16-SD-NEXT: sshll2 v4.4s, v1.8h, #04687; CHECK-NOFP16-SD-NEXT: sshll v5.4s, v1.4h, #04688; CHECK-NOFP16-SD-NEXT: scvtf v0.4s, v2.4s4689; CHECK-NOFP16-SD-NEXT: scvtf v1.4s, v3.4s4690; CHECK-NOFP16-SD-NEXT: scvtf v3.4s, v4.4s4691; CHECK-NOFP16-SD-NEXT: scvtf v2.4s, v5.4s4692; CHECK-NOFP16-SD-NEXT: ret4693;4694; CHECK-FP16-SD-LABEL: stofp_v16i16_v16f32:4695; CHECK-FP16-SD: // %bb.0: // %entry4696; CHECK-FP16-SD-NEXT: sshll v2.4s, v0.4h, #04697; CHECK-FP16-SD-NEXT: sshll2 v3.4s, v0.8h, #04698; CHECK-FP16-SD-NEXT: sshll2 v4.4s, v1.8h, #04699; CHECK-FP16-SD-NEXT: sshll v5.4s, v1.4h, #04700; CHECK-FP16-SD-NEXT: scvtf v0.4s, v2.4s4701; CHECK-FP16-SD-NEXT: scvtf v1.4s, v3.4s4702; CHECK-FP16-SD-NEXT: scvtf v3.4s, v4.4s4703; CHECK-FP16-SD-NEXT: scvtf v2.4s, v5.4s4704; CHECK-FP16-SD-NEXT: ret4705;4706; CHECK-NOFP16-GI-LABEL: stofp_v16i16_v16f32:4707; CHECK-NOFP16-GI: // %bb.0: // %entry4708; CHECK-NOFP16-GI-NEXT: sshll v2.4s, v0.4h, #04709; CHECK-NOFP16-GI-NEXT: sshll2 v3.4s, v0.8h, #04710; CHECK-NOFP16-GI-NEXT: sshll v4.4s, v1.4h, #04711; CHECK-NOFP16-GI-NEXT: sshll2 v5.4s, v1.8h, #04712; CHECK-NOFP16-GI-NEXT: scvtf v0.4s, v2.4s4713; CHECK-NOFP16-GI-NEXT: scvtf v1.4s, v3.4s4714; CHECK-NOFP16-GI-NEXT: scvtf v2.4s, v4.4s4715; CHECK-NOFP16-GI-NEXT: scvtf v3.4s, v5.4s4716; CHECK-NOFP16-GI-NEXT: ret4717;4718; CHECK-FP16-GI-LABEL: stofp_v16i16_v16f32:4719; CHECK-FP16-GI: // %bb.0: // %entry4720; CHECK-FP16-GI-NEXT: sshll v2.4s, v0.4h, #04721; CHECK-FP16-GI-NEXT: sshll2 v3.4s, v0.8h, #04722; CHECK-FP16-GI-NEXT: sshll v4.4s, v1.4h, #04723; CHECK-FP16-GI-NEXT: sshll2 v5.4s, v1.8h, #04724; CHECK-FP16-GI-NEXT: scvtf v0.4s, v2.4s4725; CHECK-FP16-GI-NEXT: scvtf v1.4s, v3.4s4726; CHECK-FP16-GI-NEXT: scvtf v2.4s, v4.4s4727; CHECK-FP16-GI-NEXT: scvtf v3.4s, v5.4s4728; CHECK-FP16-GI-NEXT: ret4729entry:4730 %c = sitofp <16 x i16> %a to <16 x float>4731 ret <16 x float> %c4732}4733 4734define <16 x float> @utofp_v16i16_v16f32(<16 x i16> %a) {4735; CHECK-NOFP16-SD-LABEL: utofp_v16i16_v16f32:4736; CHECK-NOFP16-SD: // %bb.0: // %entry4737; CHECK-NOFP16-SD-NEXT: ushll v2.4s, v0.4h, #04738; CHECK-NOFP16-SD-NEXT: ushll2 v3.4s, v0.8h, #04739; CHECK-NOFP16-SD-NEXT: ushll2 v4.4s, v1.8h, #04740; CHECK-NOFP16-SD-NEXT: ushll v5.4s, v1.4h, #04741; CHECK-NOFP16-SD-NEXT: ucvtf v0.4s, v2.4s4742; CHECK-NOFP16-SD-NEXT: ucvtf v1.4s, v3.4s4743; CHECK-NOFP16-SD-NEXT: ucvtf v3.4s, v4.4s4744; CHECK-NOFP16-SD-NEXT: ucvtf v2.4s, v5.4s4745; CHECK-NOFP16-SD-NEXT: ret4746;4747; CHECK-FP16-SD-LABEL: utofp_v16i16_v16f32:4748; CHECK-FP16-SD: // %bb.0: // %entry4749; CHECK-FP16-SD-NEXT: ushll v2.4s, v0.4h, #04750; CHECK-FP16-SD-NEXT: ushll2 v3.4s, v0.8h, #04751; CHECK-FP16-SD-NEXT: ushll2 v4.4s, v1.8h, #04752; CHECK-FP16-SD-NEXT: ushll v5.4s, v1.4h, #04753; CHECK-FP16-SD-NEXT: ucvtf v0.4s, v2.4s4754; CHECK-FP16-SD-NEXT: ucvtf v1.4s, v3.4s4755; CHECK-FP16-SD-NEXT: ucvtf v3.4s, v4.4s4756; CHECK-FP16-SD-NEXT: ucvtf v2.4s, v5.4s4757; CHECK-FP16-SD-NEXT: ret4758;4759; CHECK-NOFP16-GI-LABEL: utofp_v16i16_v16f32:4760; CHECK-NOFP16-GI: // %bb.0: // %entry4761; CHECK-NOFP16-GI-NEXT: ushll v2.4s, v0.4h, #04762; CHECK-NOFP16-GI-NEXT: ushll2 v3.4s, v0.8h, #04763; CHECK-NOFP16-GI-NEXT: ushll v4.4s, v1.4h, #04764; CHECK-NOFP16-GI-NEXT: ushll2 v5.4s, v1.8h, #04765; CHECK-NOFP16-GI-NEXT: ucvtf v0.4s, v2.4s4766; CHECK-NOFP16-GI-NEXT: ucvtf v1.4s, v3.4s4767; CHECK-NOFP16-GI-NEXT: ucvtf v2.4s, v4.4s4768; CHECK-NOFP16-GI-NEXT: ucvtf v3.4s, v5.4s4769; CHECK-NOFP16-GI-NEXT: ret4770;4771; CHECK-FP16-GI-LABEL: utofp_v16i16_v16f32:4772; CHECK-FP16-GI: // %bb.0: // %entry4773; CHECK-FP16-GI-NEXT: ushll v2.4s, v0.4h, #04774; CHECK-FP16-GI-NEXT: ushll2 v3.4s, v0.8h, #04775; CHECK-FP16-GI-NEXT: ushll v4.4s, v1.4h, #04776; CHECK-FP16-GI-NEXT: ushll2 v5.4s, v1.8h, #04777; CHECK-FP16-GI-NEXT: ucvtf v0.4s, v2.4s4778; CHECK-FP16-GI-NEXT: ucvtf v1.4s, v3.4s4779; CHECK-FP16-GI-NEXT: ucvtf v2.4s, v4.4s4780; CHECK-FP16-GI-NEXT: ucvtf v3.4s, v5.4s4781; CHECK-FP16-GI-NEXT: ret4782entry:4783 %c = uitofp <16 x i16> %a to <16 x float>4784 ret <16 x float> %c4785}4786 4787define <2 x float> @stofp_v2i8_v2f32(<2 x i8> %a) {4788; CHECK-LABEL: stofp_v2i8_v2f32:4789; CHECK: // %bb.0: // %entry4790; CHECK-NEXT: shl v0.2s, v0.2s, #244791; CHECK-NEXT: sshr v0.2s, v0.2s, #244792; CHECK-NEXT: scvtf v0.2s, v0.2s4793; CHECK-NEXT: ret4794entry:4795 %c = sitofp <2 x i8> %a to <2 x float>4796 ret <2 x float> %c4797}4798 4799define <2 x float> @utofp_v2i8_v2f32(<2 x i8> %a) {4800; CHECK-LABEL: utofp_v2i8_v2f32:4801; CHECK: // %bb.0: // %entry4802; CHECK-NEXT: movi d1, #0x0000ff000000ff4803; CHECK-NEXT: and v0.8b, v0.8b, v1.8b4804; CHECK-NEXT: ucvtf v0.2s, v0.2s4805; CHECK-NEXT: ret4806entry:4807 %c = uitofp <2 x i8> %a to <2 x float>4808 ret <2 x float> %c4809}4810 4811define <3 x float> @stofp_v3i8_v3f32(<3 x i8> %a) {4812; CHECK-NOFP16-SD-LABEL: stofp_v3i8_v3f32:4813; CHECK-NOFP16-SD: // %bb.0: // %entry4814; CHECK-NOFP16-SD-NEXT: fmov s0, w04815; CHECK-NOFP16-SD-NEXT: mov v0.h[1], w14816; CHECK-NOFP16-SD-NEXT: mov v0.h[2], w24817; CHECK-NOFP16-SD-NEXT: shl v0.4h, v0.4h, #84818; CHECK-NOFP16-SD-NEXT: sshr v0.4h, v0.4h, #84819; CHECK-NOFP16-SD-NEXT: sshll v0.4s, v0.4h, #04820; CHECK-NOFP16-SD-NEXT: scvtf v0.4s, v0.4s4821; CHECK-NOFP16-SD-NEXT: ret4822;4823; CHECK-FP16-SD-LABEL: stofp_v3i8_v3f32:4824; CHECK-FP16-SD: // %bb.0: // %entry4825; CHECK-FP16-SD-NEXT: fmov s0, w04826; CHECK-FP16-SD-NEXT: mov v0.h[1], w14827; CHECK-FP16-SD-NEXT: mov v0.h[2], w24828; CHECK-FP16-SD-NEXT: shl v0.4h, v0.4h, #84829; CHECK-FP16-SD-NEXT: sshr v0.4h, v0.4h, #84830; CHECK-FP16-SD-NEXT: sshll v0.4s, v0.4h, #04831; CHECK-FP16-SD-NEXT: scvtf v0.4s, v0.4s4832; CHECK-FP16-SD-NEXT: ret4833;4834; CHECK-NOFP16-GI-LABEL: stofp_v3i8_v3f32:4835; CHECK-NOFP16-GI: // %bb.0: // %entry4836; CHECK-NOFP16-GI-NEXT: fmov s0, w04837; CHECK-NOFP16-GI-NEXT: mov v0.h[1], w14838; CHECK-NOFP16-GI-NEXT: mov v0.h[2], w24839; CHECK-NOFP16-GI-NEXT: shl v0.4h, v0.4h, #84840; CHECK-NOFP16-GI-NEXT: sshr v0.4h, v0.4h, #84841; CHECK-NOFP16-GI-NEXT: mov v1.h[0], v0.h[2]4842; CHECK-NOFP16-GI-NEXT: mov v1.h[1], v0.h[3]4843; CHECK-NOFP16-GI-NEXT: sshll v0.4s, v0.4h, #04844; CHECK-NOFP16-GI-NEXT: sshll v1.4s, v1.4h, #04845; CHECK-NOFP16-GI-NEXT: mov v0.d[1], v1.d[0]4846; CHECK-NOFP16-GI-NEXT: scvtf v0.4s, v0.4s4847; CHECK-NOFP16-GI-NEXT: ret4848;4849; CHECK-FP16-GI-LABEL: stofp_v3i8_v3f32:4850; CHECK-FP16-GI: // %bb.0: // %entry4851; CHECK-FP16-GI-NEXT: fmov s0, w04852; CHECK-FP16-GI-NEXT: mov v0.h[1], w14853; CHECK-FP16-GI-NEXT: mov v0.h[2], w24854; CHECK-FP16-GI-NEXT: shl v0.4h, v0.4h, #84855; CHECK-FP16-GI-NEXT: sshr v0.4h, v0.4h, #84856; CHECK-FP16-GI-NEXT: mov v1.h[0], v0.h[2]4857; CHECK-FP16-GI-NEXT: mov v1.h[1], v0.h[3]4858; CHECK-FP16-GI-NEXT: sshll v0.4s, v0.4h, #04859; CHECK-FP16-GI-NEXT: sshll v1.4s, v1.4h, #04860; CHECK-FP16-GI-NEXT: mov v0.d[1], v1.d[0]4861; CHECK-FP16-GI-NEXT: scvtf v0.4s, v0.4s4862; CHECK-FP16-GI-NEXT: ret4863entry:4864 %c = sitofp <3 x i8> %a to <3 x float>4865 ret <3 x float> %c4866}4867 4868define <3 x float> @utofp_v3i8_v3f32(<3 x i8> %a) {4869; CHECK-NOFP16-SD-LABEL: utofp_v3i8_v3f32:4870; CHECK-NOFP16-SD: // %bb.0: // %entry4871; CHECK-NOFP16-SD-NEXT: fmov s0, w04872; CHECK-NOFP16-SD-NEXT: mov v0.h[1], w14873; CHECK-NOFP16-SD-NEXT: mov v0.h[2], w24874; CHECK-NOFP16-SD-NEXT: bic v0.4h, #255, lsl #84875; CHECK-NOFP16-SD-NEXT: ushll v0.4s, v0.4h, #04876; CHECK-NOFP16-SD-NEXT: ucvtf v0.4s, v0.4s4877; CHECK-NOFP16-SD-NEXT: ret4878;4879; CHECK-FP16-SD-LABEL: utofp_v3i8_v3f32:4880; CHECK-FP16-SD: // %bb.0: // %entry4881; CHECK-FP16-SD-NEXT: fmov s0, w04882; CHECK-FP16-SD-NEXT: mov v0.h[1], w14883; CHECK-FP16-SD-NEXT: mov v0.h[2], w24884; CHECK-FP16-SD-NEXT: bic v0.4h, #255, lsl #84885; CHECK-FP16-SD-NEXT: ushll v0.4s, v0.4h, #04886; CHECK-FP16-SD-NEXT: ucvtf v0.4s, v0.4s4887; CHECK-FP16-SD-NEXT: ret4888;4889; CHECK-NOFP16-GI-LABEL: utofp_v3i8_v3f32:4890; CHECK-NOFP16-GI: // %bb.0: // %entry4891; CHECK-NOFP16-GI-NEXT: fmov s0, w04892; CHECK-NOFP16-GI-NEXT: movi d1, #0xff00ff00ff00ff4893; CHECK-NOFP16-GI-NEXT: mov v0.h[1], w14894; CHECK-NOFP16-GI-NEXT: mov v0.h[2], w24895; CHECK-NOFP16-GI-NEXT: and v0.8b, v0.8b, v1.8b4896; CHECK-NOFP16-GI-NEXT: mov v1.h[0], v0.h[2]4897; CHECK-NOFP16-GI-NEXT: mov v1.h[1], v0.h[3]4898; CHECK-NOFP16-GI-NEXT: ushll v0.4s, v0.4h, #04899; CHECK-NOFP16-GI-NEXT: ushll v1.4s, v1.4h, #04900; CHECK-NOFP16-GI-NEXT: mov v0.d[1], v1.d[0]4901; CHECK-NOFP16-GI-NEXT: ucvtf v0.4s, v0.4s4902; CHECK-NOFP16-GI-NEXT: ret4903;4904; CHECK-FP16-GI-LABEL: utofp_v3i8_v3f32:4905; CHECK-FP16-GI: // %bb.0: // %entry4906; CHECK-FP16-GI-NEXT: fmov s0, w04907; CHECK-FP16-GI-NEXT: movi d1, #0xff00ff00ff00ff4908; CHECK-FP16-GI-NEXT: mov v0.h[1], w14909; CHECK-FP16-GI-NEXT: mov v0.h[2], w24910; CHECK-FP16-GI-NEXT: and v0.8b, v0.8b, v1.8b4911; CHECK-FP16-GI-NEXT: mov v1.h[0], v0.h[2]4912; CHECK-FP16-GI-NEXT: mov v1.h[1], v0.h[3]4913; CHECK-FP16-GI-NEXT: ushll v0.4s, v0.4h, #04914; CHECK-FP16-GI-NEXT: ushll v1.4s, v1.4h, #04915; CHECK-FP16-GI-NEXT: mov v0.d[1], v1.d[0]4916; CHECK-FP16-GI-NEXT: ucvtf v0.4s, v0.4s4917; CHECK-FP16-GI-NEXT: ret4918entry:4919 %c = uitofp <3 x i8> %a to <3 x float>4920 ret <3 x float> %c4921}4922 4923define <4 x float> @stofp_v4i8_v4f32(<4 x i8> %a) {4924; CHECK-NOFP16-SD-LABEL: stofp_v4i8_v4f32:4925; CHECK-NOFP16-SD: // %bb.0: // %entry4926; CHECK-NOFP16-SD-NEXT: shl v0.4h, v0.4h, #84927; CHECK-NOFP16-SD-NEXT: sshr v0.4h, v0.4h, #84928; CHECK-NOFP16-SD-NEXT: sshll v0.4s, v0.4h, #04929; CHECK-NOFP16-SD-NEXT: scvtf v0.4s, v0.4s4930; CHECK-NOFP16-SD-NEXT: ret4931;4932; CHECK-FP16-SD-LABEL: stofp_v4i8_v4f32:4933; CHECK-FP16-SD: // %bb.0: // %entry4934; CHECK-FP16-SD-NEXT: shl v0.4h, v0.4h, #84935; CHECK-FP16-SD-NEXT: sshr v0.4h, v0.4h, #84936; CHECK-FP16-SD-NEXT: sshll v0.4s, v0.4h, #04937; CHECK-FP16-SD-NEXT: scvtf v0.4s, v0.4s4938; CHECK-FP16-SD-NEXT: ret4939;4940; CHECK-NOFP16-GI-LABEL: stofp_v4i8_v4f32:4941; CHECK-NOFP16-GI: // %bb.0: // %entry4942; CHECK-NOFP16-GI-NEXT: ushll v0.4s, v0.4h, #04943; CHECK-NOFP16-GI-NEXT: shl v0.4s, v0.4s, #244944; CHECK-NOFP16-GI-NEXT: sshr v0.4s, v0.4s, #244945; CHECK-NOFP16-GI-NEXT: scvtf v0.4s, v0.4s4946; CHECK-NOFP16-GI-NEXT: ret4947;4948; CHECK-FP16-GI-LABEL: stofp_v4i8_v4f32:4949; CHECK-FP16-GI: // %bb.0: // %entry4950; CHECK-FP16-GI-NEXT: ushll v0.4s, v0.4h, #04951; CHECK-FP16-GI-NEXT: shl v0.4s, v0.4s, #244952; CHECK-FP16-GI-NEXT: sshr v0.4s, v0.4s, #244953; CHECK-FP16-GI-NEXT: scvtf v0.4s, v0.4s4954; CHECK-FP16-GI-NEXT: ret4955entry:4956 %c = sitofp <4 x i8> %a to <4 x float>4957 ret <4 x float> %c4958}4959 4960define <4 x float> @utofp_v4i8_v4f32(<4 x i8> %a) {4961; CHECK-NOFP16-SD-LABEL: utofp_v4i8_v4f32:4962; CHECK-NOFP16-SD: // %bb.0: // %entry4963; CHECK-NOFP16-SD-NEXT: bic v0.4h, #255, lsl #84964; CHECK-NOFP16-SD-NEXT: ushll v0.4s, v0.4h, #04965; CHECK-NOFP16-SD-NEXT: ucvtf v0.4s, v0.4s4966; CHECK-NOFP16-SD-NEXT: ret4967;4968; CHECK-FP16-SD-LABEL: utofp_v4i8_v4f32:4969; CHECK-FP16-SD: // %bb.0: // %entry4970; CHECK-FP16-SD-NEXT: bic v0.4h, #255, lsl #84971; CHECK-FP16-SD-NEXT: ushll v0.4s, v0.4h, #04972; CHECK-FP16-SD-NEXT: ucvtf v0.4s, v0.4s4973; CHECK-FP16-SD-NEXT: ret4974;4975; CHECK-NOFP16-GI-LABEL: utofp_v4i8_v4f32:4976; CHECK-NOFP16-GI: // %bb.0: // %entry4977; CHECK-NOFP16-GI-NEXT: movi v1.2d, #0x0000ff000000ff4978; CHECK-NOFP16-GI-NEXT: ushll v0.4s, v0.4h, #04979; CHECK-NOFP16-GI-NEXT: and v0.16b, v0.16b, v1.16b4980; CHECK-NOFP16-GI-NEXT: ucvtf v0.4s, v0.4s4981; CHECK-NOFP16-GI-NEXT: ret4982;4983; CHECK-FP16-GI-LABEL: utofp_v4i8_v4f32:4984; CHECK-FP16-GI: // %bb.0: // %entry4985; CHECK-FP16-GI-NEXT: movi v1.2d, #0x0000ff000000ff4986; CHECK-FP16-GI-NEXT: ushll v0.4s, v0.4h, #04987; CHECK-FP16-GI-NEXT: and v0.16b, v0.16b, v1.16b4988; CHECK-FP16-GI-NEXT: ucvtf v0.4s, v0.4s4989; CHECK-FP16-GI-NEXT: ret4990entry:4991 %c = uitofp <4 x i8> %a to <4 x float>4992 ret <4 x float> %c4993}4994 4995define <8 x float> @stofp_v8i8_v8f32(<8 x i8> %a) {4996; CHECK-NOFP16-SD-LABEL: stofp_v8i8_v8f32:4997; CHECK-NOFP16-SD: // %bb.0: // %entry4998; CHECK-NOFP16-SD-NEXT: zip1 v1.8b, v0.8b, v0.8b4999; CHECK-NOFP16-SD-NEXT: zip2 v0.8b, v0.8b, v0.8b5000; CHECK-NOFP16-SD-NEXT: shl v1.4h, v1.4h, #85001; CHECK-NOFP16-SD-NEXT: shl v0.4h, v0.4h, #85002; CHECK-NOFP16-SD-NEXT: sshr v1.4h, v1.4h, #85003; CHECK-NOFP16-SD-NEXT: sshr v0.4h, v0.4h, #85004; CHECK-NOFP16-SD-NEXT: sshll v1.4s, v1.4h, #05005; CHECK-NOFP16-SD-NEXT: sshll v2.4s, v0.4h, #05006; CHECK-NOFP16-SD-NEXT: scvtf v0.4s, v1.4s5007; CHECK-NOFP16-SD-NEXT: scvtf v1.4s, v2.4s5008; CHECK-NOFP16-SD-NEXT: ret5009;5010; CHECK-FP16-SD-LABEL: stofp_v8i8_v8f32:5011; CHECK-FP16-SD: // %bb.0: // %entry5012; CHECK-FP16-SD-NEXT: zip1 v1.8b, v0.8b, v0.8b5013; CHECK-FP16-SD-NEXT: zip2 v0.8b, v0.8b, v0.8b5014; CHECK-FP16-SD-NEXT: shl v1.4h, v1.4h, #85015; CHECK-FP16-SD-NEXT: shl v0.4h, v0.4h, #85016; CHECK-FP16-SD-NEXT: sshr v1.4h, v1.4h, #85017; CHECK-FP16-SD-NEXT: sshr v0.4h, v0.4h, #85018; CHECK-FP16-SD-NEXT: sshll v1.4s, v1.4h, #05019; CHECK-FP16-SD-NEXT: sshll v2.4s, v0.4h, #05020; CHECK-FP16-SD-NEXT: scvtf v0.4s, v1.4s5021; CHECK-FP16-SD-NEXT: scvtf v1.4s, v2.4s5022; CHECK-FP16-SD-NEXT: ret5023;5024; CHECK-NOFP16-GI-LABEL: stofp_v8i8_v8f32:5025; CHECK-NOFP16-GI: // %bb.0: // %entry5026; CHECK-NOFP16-GI-NEXT: sshll v0.8h, v0.8b, #05027; CHECK-NOFP16-GI-NEXT: sshll v1.4s, v0.4h, #05028; CHECK-NOFP16-GI-NEXT: sshll2 v2.4s, v0.8h, #05029; CHECK-NOFP16-GI-NEXT: scvtf v0.4s, v1.4s5030; CHECK-NOFP16-GI-NEXT: scvtf v1.4s, v2.4s5031; CHECK-NOFP16-GI-NEXT: ret5032;5033; CHECK-FP16-GI-LABEL: stofp_v8i8_v8f32:5034; CHECK-FP16-GI: // %bb.0: // %entry5035; CHECK-FP16-GI-NEXT: sshll v0.8h, v0.8b, #05036; CHECK-FP16-GI-NEXT: sshll v1.4s, v0.4h, #05037; CHECK-FP16-GI-NEXT: sshll2 v2.4s, v0.8h, #05038; CHECK-FP16-GI-NEXT: scvtf v0.4s, v1.4s5039; CHECK-FP16-GI-NEXT: scvtf v1.4s, v2.4s5040; CHECK-FP16-GI-NEXT: ret5041entry:5042 %c = sitofp <8 x i8> %a to <8 x float>5043 ret <8 x float> %c5044}5045 5046define <8 x float> @utofp_v8i8_v8f32(<8 x i8> %a) {5047; CHECK-NOFP16-SD-LABEL: utofp_v8i8_v8f32:5048; CHECK-NOFP16-SD: // %bb.0: // %entry5049; CHECK-NOFP16-SD-NEXT: zip1 v1.8b, v0.8b, v0.8b5050; CHECK-NOFP16-SD-NEXT: zip2 v0.8b, v0.8b, v0.8b5051; CHECK-NOFP16-SD-NEXT: bic v1.4h, #255, lsl #85052; CHECK-NOFP16-SD-NEXT: bic v0.4h, #255, lsl #85053; CHECK-NOFP16-SD-NEXT: ushll v1.4s, v1.4h, #05054; CHECK-NOFP16-SD-NEXT: ushll v2.4s, v0.4h, #05055; CHECK-NOFP16-SD-NEXT: ucvtf v0.4s, v1.4s5056; CHECK-NOFP16-SD-NEXT: ucvtf v1.4s, v2.4s5057; CHECK-NOFP16-SD-NEXT: ret5058;5059; CHECK-FP16-SD-LABEL: utofp_v8i8_v8f32:5060; CHECK-FP16-SD: // %bb.0: // %entry5061; CHECK-FP16-SD-NEXT: zip1 v1.8b, v0.8b, v0.8b5062; CHECK-FP16-SD-NEXT: zip2 v0.8b, v0.8b, v0.8b5063; CHECK-FP16-SD-NEXT: bic v1.4h, #255, lsl #85064; CHECK-FP16-SD-NEXT: bic v0.4h, #255, lsl #85065; CHECK-FP16-SD-NEXT: ushll v1.4s, v1.4h, #05066; CHECK-FP16-SD-NEXT: ushll v2.4s, v0.4h, #05067; CHECK-FP16-SD-NEXT: ucvtf v0.4s, v1.4s5068; CHECK-FP16-SD-NEXT: ucvtf v1.4s, v2.4s5069; CHECK-FP16-SD-NEXT: ret5070;5071; CHECK-NOFP16-GI-LABEL: utofp_v8i8_v8f32:5072; CHECK-NOFP16-GI: // %bb.0: // %entry5073; CHECK-NOFP16-GI-NEXT: ushll v0.8h, v0.8b, #05074; CHECK-NOFP16-GI-NEXT: ushll v1.4s, v0.4h, #05075; CHECK-NOFP16-GI-NEXT: ushll2 v2.4s, v0.8h, #05076; CHECK-NOFP16-GI-NEXT: ucvtf v0.4s, v1.4s5077; CHECK-NOFP16-GI-NEXT: ucvtf v1.4s, v2.4s5078; CHECK-NOFP16-GI-NEXT: ret5079;5080; CHECK-FP16-GI-LABEL: utofp_v8i8_v8f32:5081; CHECK-FP16-GI: // %bb.0: // %entry5082; CHECK-FP16-GI-NEXT: ushll v0.8h, v0.8b, #05083; CHECK-FP16-GI-NEXT: ushll v1.4s, v0.4h, #05084; CHECK-FP16-GI-NEXT: ushll2 v2.4s, v0.8h, #05085; CHECK-FP16-GI-NEXT: ucvtf v0.4s, v1.4s5086; CHECK-FP16-GI-NEXT: ucvtf v1.4s, v2.4s5087; CHECK-FP16-GI-NEXT: ret5088entry:5089 %c = uitofp <8 x i8> %a to <8 x float>5090 ret <8 x float> %c5091}5092 5093define <16 x float> @stofp_v16i8_v16f32(<16 x i8> %a) {5094; CHECK-NOFP16-SD-LABEL: stofp_v16i8_v16f32:5095; CHECK-NOFP16-SD: // %bb.0: // %entry5096; CHECK-NOFP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #85097; CHECK-NOFP16-SD-NEXT: zip1 v2.8b, v0.8b, v0.8b5098; CHECK-NOFP16-SD-NEXT: zip2 v0.8b, v0.8b, v0.8b5099; CHECK-NOFP16-SD-NEXT: zip1 v3.8b, v1.8b, v0.8b5100; CHECK-NOFP16-SD-NEXT: zip2 v1.8b, v1.8b, v0.8b5101; CHECK-NOFP16-SD-NEXT: shl v2.4h, v2.4h, #85102; CHECK-NOFP16-SD-NEXT: shl v0.4h, v0.4h, #85103; CHECK-NOFP16-SD-NEXT: sshr v2.4h, v2.4h, #85104; CHECK-NOFP16-SD-NEXT: shl v3.4h, v3.4h, #85105; CHECK-NOFP16-SD-NEXT: shl v1.4h, v1.4h, #85106; CHECK-NOFP16-SD-NEXT: sshr v0.4h, v0.4h, #85107; CHECK-NOFP16-SD-NEXT: sshll v2.4s, v2.4h, #05108; CHECK-NOFP16-SD-NEXT: sshr v3.4h, v3.4h, #85109; CHECK-NOFP16-SD-NEXT: sshr v1.4h, v1.4h, #85110; CHECK-NOFP16-SD-NEXT: sshll v4.4s, v0.4h, #05111; CHECK-NOFP16-SD-NEXT: scvtf v0.4s, v2.4s5112; CHECK-NOFP16-SD-NEXT: sshll v3.4s, v3.4h, #05113; CHECK-NOFP16-SD-NEXT: sshll v5.4s, v1.4h, #05114; CHECK-NOFP16-SD-NEXT: scvtf v1.4s, v4.4s5115; CHECK-NOFP16-SD-NEXT: scvtf v2.4s, v3.4s5116; CHECK-NOFP16-SD-NEXT: scvtf v3.4s, v5.4s5117; CHECK-NOFP16-SD-NEXT: ret5118;5119; CHECK-FP16-SD-LABEL: stofp_v16i8_v16f32:5120; CHECK-FP16-SD: // %bb.0: // %entry5121; CHECK-FP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #85122; CHECK-FP16-SD-NEXT: zip1 v2.8b, v0.8b, v0.8b5123; CHECK-FP16-SD-NEXT: zip2 v0.8b, v0.8b, v0.8b5124; CHECK-FP16-SD-NEXT: zip1 v3.8b, v1.8b, v0.8b5125; CHECK-FP16-SD-NEXT: zip2 v1.8b, v1.8b, v0.8b5126; CHECK-FP16-SD-NEXT: shl v2.4h, v2.4h, #85127; CHECK-FP16-SD-NEXT: shl v0.4h, v0.4h, #85128; CHECK-FP16-SD-NEXT: sshr v2.4h, v2.4h, #85129; CHECK-FP16-SD-NEXT: shl v3.4h, v3.4h, #85130; CHECK-FP16-SD-NEXT: shl v1.4h, v1.4h, #85131; CHECK-FP16-SD-NEXT: sshr v0.4h, v0.4h, #85132; CHECK-FP16-SD-NEXT: sshll v2.4s, v2.4h, #05133; CHECK-FP16-SD-NEXT: sshr v3.4h, v3.4h, #85134; CHECK-FP16-SD-NEXT: sshr v1.4h, v1.4h, #85135; CHECK-FP16-SD-NEXT: sshll v4.4s, v0.4h, #05136; CHECK-FP16-SD-NEXT: scvtf v0.4s, v2.4s5137; CHECK-FP16-SD-NEXT: sshll v3.4s, v3.4h, #05138; CHECK-FP16-SD-NEXT: sshll v5.4s, v1.4h, #05139; CHECK-FP16-SD-NEXT: scvtf v1.4s, v4.4s5140; CHECK-FP16-SD-NEXT: scvtf v2.4s, v3.4s5141; CHECK-FP16-SD-NEXT: scvtf v3.4s, v5.4s5142; CHECK-FP16-SD-NEXT: ret5143;5144; CHECK-NOFP16-GI-LABEL: stofp_v16i8_v16f32:5145; CHECK-NOFP16-GI: // %bb.0: // %entry5146; CHECK-NOFP16-GI-NEXT: sshll v1.8h, v0.8b, #05147; CHECK-NOFP16-GI-NEXT: sshll2 v0.8h, v0.16b, #05148; CHECK-NOFP16-GI-NEXT: sshll v2.4s, v1.4h, #05149; CHECK-NOFP16-GI-NEXT: sshll2 v1.4s, v1.8h, #05150; CHECK-NOFP16-GI-NEXT: sshll v3.4s, v0.4h, #05151; CHECK-NOFP16-GI-NEXT: sshll2 v4.4s, v0.8h, #05152; CHECK-NOFP16-GI-NEXT: scvtf v0.4s, v2.4s5153; CHECK-NOFP16-GI-NEXT: scvtf v1.4s, v1.4s5154; CHECK-NOFP16-GI-NEXT: scvtf v2.4s, v3.4s5155; CHECK-NOFP16-GI-NEXT: scvtf v3.4s, v4.4s5156; CHECK-NOFP16-GI-NEXT: ret5157;5158; CHECK-FP16-GI-LABEL: stofp_v16i8_v16f32:5159; CHECK-FP16-GI: // %bb.0: // %entry5160; CHECK-FP16-GI-NEXT: sshll v1.8h, v0.8b, #05161; CHECK-FP16-GI-NEXT: sshll2 v0.8h, v0.16b, #05162; CHECK-FP16-GI-NEXT: sshll v2.4s, v1.4h, #05163; CHECK-FP16-GI-NEXT: sshll2 v1.4s, v1.8h, #05164; CHECK-FP16-GI-NEXT: sshll v3.4s, v0.4h, #05165; CHECK-FP16-GI-NEXT: sshll2 v4.4s, v0.8h, #05166; CHECK-FP16-GI-NEXT: scvtf v0.4s, v2.4s5167; CHECK-FP16-GI-NEXT: scvtf v1.4s, v1.4s5168; CHECK-FP16-GI-NEXT: scvtf v2.4s, v3.4s5169; CHECK-FP16-GI-NEXT: scvtf v3.4s, v4.4s5170; CHECK-FP16-GI-NEXT: ret5171entry:5172 %c = sitofp <16 x i8> %a to <16 x float>5173 ret <16 x float> %c5174}5175 5176define <16 x float> @utofp_v16i8_v16f32(<16 x i8> %a) {5177; CHECK-NOFP16-SD-LABEL: utofp_v16i8_v16f32:5178; CHECK-NOFP16-SD: // %bb.0: // %entry5179; CHECK-NOFP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #85180; CHECK-NOFP16-SD-NEXT: zip1 v2.8b, v0.8b, v0.8b5181; CHECK-NOFP16-SD-NEXT: zip2 v0.8b, v0.8b, v0.8b5182; CHECK-NOFP16-SD-NEXT: zip1 v3.8b, v1.8b, v0.8b5183; CHECK-NOFP16-SD-NEXT: zip2 v1.8b, v1.8b, v0.8b5184; CHECK-NOFP16-SD-NEXT: bic v2.4h, #255, lsl #85185; CHECK-NOFP16-SD-NEXT: bic v0.4h, #255, lsl #85186; CHECK-NOFP16-SD-NEXT: ushll v2.4s, v2.4h, #05187; CHECK-NOFP16-SD-NEXT: bic v3.4h, #255, lsl #85188; CHECK-NOFP16-SD-NEXT: bic v1.4h, #255, lsl #85189; CHECK-NOFP16-SD-NEXT: ushll v4.4s, v0.4h, #05190; CHECK-NOFP16-SD-NEXT: ucvtf v0.4s, v2.4s5191; CHECK-NOFP16-SD-NEXT: ushll v3.4s, v3.4h, #05192; CHECK-NOFP16-SD-NEXT: ushll v5.4s, v1.4h, #05193; CHECK-NOFP16-SD-NEXT: ucvtf v1.4s, v4.4s5194; CHECK-NOFP16-SD-NEXT: ucvtf v2.4s, v3.4s5195; CHECK-NOFP16-SD-NEXT: ucvtf v3.4s, v5.4s5196; CHECK-NOFP16-SD-NEXT: ret5197;5198; CHECK-FP16-SD-LABEL: utofp_v16i8_v16f32:5199; CHECK-FP16-SD: // %bb.0: // %entry5200; CHECK-FP16-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #85201; CHECK-FP16-SD-NEXT: zip1 v2.8b, v0.8b, v0.8b5202; CHECK-FP16-SD-NEXT: zip2 v0.8b, v0.8b, v0.8b5203; CHECK-FP16-SD-NEXT: zip1 v3.8b, v1.8b, v0.8b5204; CHECK-FP16-SD-NEXT: zip2 v1.8b, v1.8b, v0.8b5205; CHECK-FP16-SD-NEXT: bic v2.4h, #255, lsl #85206; CHECK-FP16-SD-NEXT: bic v0.4h, #255, lsl #85207; CHECK-FP16-SD-NEXT: ushll v2.4s, v2.4h, #05208; CHECK-FP16-SD-NEXT: bic v3.4h, #255, lsl #85209; CHECK-FP16-SD-NEXT: bic v1.4h, #255, lsl #85210; CHECK-FP16-SD-NEXT: ushll v4.4s, v0.4h, #05211; CHECK-FP16-SD-NEXT: ucvtf v0.4s, v2.4s5212; CHECK-FP16-SD-NEXT: ushll v3.4s, v3.4h, #05213; CHECK-FP16-SD-NEXT: ushll v5.4s, v1.4h, #05214; CHECK-FP16-SD-NEXT: ucvtf v1.4s, v4.4s5215; CHECK-FP16-SD-NEXT: ucvtf v2.4s, v3.4s5216; CHECK-FP16-SD-NEXT: ucvtf v3.4s, v5.4s5217; CHECK-FP16-SD-NEXT: ret5218;5219; CHECK-NOFP16-GI-LABEL: utofp_v16i8_v16f32:5220; CHECK-NOFP16-GI: // %bb.0: // %entry5221; CHECK-NOFP16-GI-NEXT: ushll v1.8h, v0.8b, #05222; CHECK-NOFP16-GI-NEXT: ushll2 v0.8h, v0.16b, #05223; CHECK-NOFP16-GI-NEXT: ushll v2.4s, v1.4h, #05224; CHECK-NOFP16-GI-NEXT: ushll2 v1.4s, v1.8h, #05225; CHECK-NOFP16-GI-NEXT: ushll v3.4s, v0.4h, #05226; CHECK-NOFP16-GI-NEXT: ushll2 v4.4s, v0.8h, #05227; CHECK-NOFP16-GI-NEXT: ucvtf v0.4s, v2.4s5228; CHECK-NOFP16-GI-NEXT: ucvtf v1.4s, v1.4s5229; CHECK-NOFP16-GI-NEXT: ucvtf v2.4s, v3.4s5230; CHECK-NOFP16-GI-NEXT: ucvtf v3.4s, v4.4s5231; CHECK-NOFP16-GI-NEXT: ret5232;5233; CHECK-FP16-GI-LABEL: utofp_v16i8_v16f32:5234; CHECK-FP16-GI: // %bb.0: // %entry5235; CHECK-FP16-GI-NEXT: ushll v1.8h, v0.8b, #05236; CHECK-FP16-GI-NEXT: ushll2 v0.8h, v0.16b, #05237; CHECK-FP16-GI-NEXT: ushll v2.4s, v1.4h, #05238; CHECK-FP16-GI-NEXT: ushll2 v1.4s, v1.8h, #05239; CHECK-FP16-GI-NEXT: ushll v3.4s, v0.4h, #05240; CHECK-FP16-GI-NEXT: ushll2 v4.4s, v0.8h, #05241; CHECK-FP16-GI-NEXT: ucvtf v0.4s, v2.4s5242; CHECK-FP16-GI-NEXT: ucvtf v1.4s, v1.4s5243; CHECK-FP16-GI-NEXT: ucvtf v2.4s, v3.4s5244; CHECK-FP16-GI-NEXT: ucvtf v3.4s, v4.4s5245; CHECK-FP16-GI-NEXT: ret5246entry:5247 %c = uitofp <16 x i8> %a to <16 x float>5248 ret <16 x float> %c5249}5250 5251define <32 x float> @stofp_v32i8_v32f32(<32 x i8> %a) {5252; CHECK-NOFP16-SD-LABEL: stofp_v32i8_v32f32:5253; CHECK-NOFP16-SD: // %bb.0: // %entry5254; CHECK-NOFP16-SD-NEXT: ext v2.16b, v0.16b, v0.16b, #85255; CHECK-NOFP16-SD-NEXT: ext v3.16b, v1.16b, v1.16b, #85256; CHECK-NOFP16-SD-NEXT: zip1 v4.8b, v0.8b, v0.8b5257; CHECK-NOFP16-SD-NEXT: zip2 v0.8b, v0.8b, v0.8b5258; CHECK-NOFP16-SD-NEXT: shl v4.4h, v4.4h, #85259; CHECK-NOFP16-SD-NEXT: zip1 v5.8b, v1.8b, v0.8b5260; CHECK-NOFP16-SD-NEXT: zip1 v6.8b, v2.8b, v0.8b5261; CHECK-NOFP16-SD-NEXT: zip2 v2.8b, v2.8b, v0.8b5262; CHECK-NOFP16-SD-NEXT: zip2 v1.8b, v1.8b, v0.8b5263; CHECK-NOFP16-SD-NEXT: zip1 v7.8b, v3.8b, v0.8b5264; CHECK-NOFP16-SD-NEXT: zip2 v3.8b, v3.8b, v0.8b5265; CHECK-NOFP16-SD-NEXT: shl v0.4h, v0.4h, #85266; CHECK-NOFP16-SD-NEXT: sshr v4.4h, v4.4h, #85267; CHECK-NOFP16-SD-NEXT: shl v5.4h, v5.4h, #85268; CHECK-NOFP16-SD-NEXT: shl v6.4h, v6.4h, #85269; CHECK-NOFP16-SD-NEXT: shl v2.4h, v2.4h, #85270; CHECK-NOFP16-SD-NEXT: shl v1.4h, v1.4h, #85271; CHECK-NOFP16-SD-NEXT: shl v7.4h, v7.4h, #85272; CHECK-NOFP16-SD-NEXT: shl v3.4h, v3.4h, #85273; CHECK-NOFP16-SD-NEXT: sshr v0.4h, v0.4h, #85274; CHECK-NOFP16-SD-NEXT: sshll v4.4s, v4.4h, #05275; CHECK-NOFP16-SD-NEXT: sshr v5.4h, v5.4h, #85276; CHECK-NOFP16-SD-NEXT: sshr v6.4h, v6.4h, #85277; CHECK-NOFP16-SD-NEXT: sshr v2.4h, v2.4h, #85278; CHECK-NOFP16-SD-NEXT: sshr v1.4h, v1.4h, #85279; CHECK-NOFP16-SD-NEXT: sshr v7.4h, v7.4h, #85280; CHECK-NOFP16-SD-NEXT: sshr v3.4h, v3.4h, #85281; CHECK-NOFP16-SD-NEXT: sshll v16.4s, v0.4h, #05282; CHECK-NOFP16-SD-NEXT: scvtf v0.4s, v4.4s5283; CHECK-NOFP16-SD-NEXT: sshll v5.4s, v5.4h, #05284; CHECK-NOFP16-SD-NEXT: sshll v6.4s, v6.4h, #05285; CHECK-NOFP16-SD-NEXT: sshll v17.4s, v2.4h, #05286; CHECK-NOFP16-SD-NEXT: sshll v18.4s, v1.4h, #05287; CHECK-NOFP16-SD-NEXT: sshll v7.4s, v7.4h, #05288; CHECK-NOFP16-SD-NEXT: sshll v19.4s, v3.4h, #05289; CHECK-NOFP16-SD-NEXT: scvtf v1.4s, v16.4s5290; CHECK-NOFP16-SD-NEXT: scvtf v4.4s, v5.4s5291; CHECK-NOFP16-SD-NEXT: scvtf v2.4s, v6.4s5292; CHECK-NOFP16-SD-NEXT: scvtf v3.4s, v17.4s5293; CHECK-NOFP16-SD-NEXT: scvtf v5.4s, v18.4s5294; CHECK-NOFP16-SD-NEXT: scvtf v6.4s, v7.4s5295; CHECK-NOFP16-SD-NEXT: scvtf v7.4s, v19.4s5296; CHECK-NOFP16-SD-NEXT: ret5297;5298; CHECK-FP16-SD-LABEL: stofp_v32i8_v32f32:5299; CHECK-FP16-SD: // %bb.0: // %entry5300; CHECK-FP16-SD-NEXT: ext v2.16b, v0.16b, v0.16b, #85301; CHECK-FP16-SD-NEXT: ext v3.16b, v1.16b, v1.16b, #85302; CHECK-FP16-SD-NEXT: zip1 v4.8b, v0.8b, v0.8b5303; CHECK-FP16-SD-NEXT: zip2 v0.8b, v0.8b, v0.8b5304; CHECK-FP16-SD-NEXT: shl v4.4h, v4.4h, #85305; CHECK-FP16-SD-NEXT: zip1 v5.8b, v1.8b, v0.8b5306; CHECK-FP16-SD-NEXT: zip1 v6.8b, v2.8b, v0.8b5307; CHECK-FP16-SD-NEXT: zip2 v2.8b, v2.8b, v0.8b5308; CHECK-FP16-SD-NEXT: zip2 v1.8b, v1.8b, v0.8b5309; CHECK-FP16-SD-NEXT: zip1 v7.8b, v3.8b, v0.8b5310; CHECK-FP16-SD-NEXT: zip2 v3.8b, v3.8b, v0.8b5311; CHECK-FP16-SD-NEXT: shl v0.4h, v0.4h, #85312; CHECK-FP16-SD-NEXT: sshr v4.4h, v4.4h, #85313; CHECK-FP16-SD-NEXT: shl v5.4h, v5.4h, #85314; CHECK-FP16-SD-NEXT: shl v6.4h, v6.4h, #85315; CHECK-FP16-SD-NEXT: shl v2.4h, v2.4h, #85316; CHECK-FP16-SD-NEXT: shl v1.4h, v1.4h, #85317; CHECK-FP16-SD-NEXT: shl v7.4h, v7.4h, #85318; CHECK-FP16-SD-NEXT: shl v3.4h, v3.4h, #85319; CHECK-FP16-SD-NEXT: sshr v0.4h, v0.4h, #85320; CHECK-FP16-SD-NEXT: sshll v4.4s, v4.4h, #05321; CHECK-FP16-SD-NEXT: sshr v5.4h, v5.4h, #85322; CHECK-FP16-SD-NEXT: sshr v6.4h, v6.4h, #85323; CHECK-FP16-SD-NEXT: sshr v2.4h, v2.4h, #85324; CHECK-FP16-SD-NEXT: sshr v1.4h, v1.4h, #85325; CHECK-FP16-SD-NEXT: sshr v7.4h, v7.4h, #85326; CHECK-FP16-SD-NEXT: sshr v3.4h, v3.4h, #85327; CHECK-FP16-SD-NEXT: sshll v16.4s, v0.4h, #05328; CHECK-FP16-SD-NEXT: scvtf v0.4s, v4.4s5329; CHECK-FP16-SD-NEXT: sshll v5.4s, v5.4h, #05330; CHECK-FP16-SD-NEXT: sshll v6.4s, v6.4h, #05331; CHECK-FP16-SD-NEXT: sshll v17.4s, v2.4h, #05332; CHECK-FP16-SD-NEXT: sshll v18.4s, v1.4h, #05333; CHECK-FP16-SD-NEXT: sshll v7.4s, v7.4h, #05334; CHECK-FP16-SD-NEXT: sshll v19.4s, v3.4h, #05335; CHECK-FP16-SD-NEXT: scvtf v1.4s, v16.4s5336; CHECK-FP16-SD-NEXT: scvtf v4.4s, v5.4s5337; CHECK-FP16-SD-NEXT: scvtf v2.4s, v6.4s5338; CHECK-FP16-SD-NEXT: scvtf v3.4s, v17.4s5339; CHECK-FP16-SD-NEXT: scvtf v5.4s, v18.4s5340; CHECK-FP16-SD-NEXT: scvtf v6.4s, v7.4s5341; CHECK-FP16-SD-NEXT: scvtf v7.4s, v19.4s5342; CHECK-FP16-SD-NEXT: ret5343;5344; CHECK-NOFP16-GI-LABEL: stofp_v32i8_v32f32:5345; CHECK-NOFP16-GI: // %bb.0: // %entry5346; CHECK-NOFP16-GI-NEXT: sshll v2.8h, v0.8b, #05347; CHECK-NOFP16-GI-NEXT: sshll2 v0.8h, v0.16b, #05348; CHECK-NOFP16-GI-NEXT: sshll v3.8h, v1.8b, #05349; CHECK-NOFP16-GI-NEXT: sshll2 v1.8h, v1.16b, #05350; CHECK-NOFP16-GI-NEXT: sshll v4.4s, v2.4h, #05351; CHECK-NOFP16-GI-NEXT: sshll2 v2.4s, v2.8h, #05352; CHECK-NOFP16-GI-NEXT: sshll v5.4s, v0.4h, #05353; CHECK-NOFP16-GI-NEXT: sshll2 v6.4s, v0.8h, #05354; CHECK-NOFP16-GI-NEXT: sshll v7.4s, v3.4h, #05355; CHECK-NOFP16-GI-NEXT: sshll2 v16.4s, v3.8h, #05356; CHECK-NOFP16-GI-NEXT: sshll v17.4s, v1.4h, #05357; CHECK-NOFP16-GI-NEXT: sshll2 v18.4s, v1.8h, #05358; CHECK-NOFP16-GI-NEXT: scvtf v0.4s, v4.4s5359; CHECK-NOFP16-GI-NEXT: scvtf v1.4s, v2.4s5360; CHECK-NOFP16-GI-NEXT: scvtf v2.4s, v5.4s5361; CHECK-NOFP16-GI-NEXT: scvtf v3.4s, v6.4s5362; CHECK-NOFP16-GI-NEXT: scvtf v4.4s, v7.4s5363; CHECK-NOFP16-GI-NEXT: scvtf v5.4s, v16.4s5364; CHECK-NOFP16-GI-NEXT: scvtf v6.4s, v17.4s5365; CHECK-NOFP16-GI-NEXT: scvtf v7.4s, v18.4s5366; CHECK-NOFP16-GI-NEXT: ret5367;5368; CHECK-FP16-GI-LABEL: stofp_v32i8_v32f32:5369; CHECK-FP16-GI: // %bb.0: // %entry5370; CHECK-FP16-GI-NEXT: sshll v2.8h, v0.8b, #05371; CHECK-FP16-GI-NEXT: sshll2 v0.8h, v0.16b, #05372; CHECK-FP16-GI-NEXT: sshll v3.8h, v1.8b, #05373; CHECK-FP16-GI-NEXT: sshll2 v1.8h, v1.16b, #05374; CHECK-FP16-GI-NEXT: sshll v4.4s, v2.4h, #05375; CHECK-FP16-GI-NEXT: sshll2 v2.4s, v2.8h, #05376; CHECK-FP16-GI-NEXT: sshll v5.4s, v0.4h, #05377; CHECK-FP16-GI-NEXT: sshll2 v6.4s, v0.8h, #05378; CHECK-FP16-GI-NEXT: sshll v7.4s, v3.4h, #05379; CHECK-FP16-GI-NEXT: sshll2 v16.4s, v3.8h, #05380; CHECK-FP16-GI-NEXT: sshll v17.4s, v1.4h, #05381; CHECK-FP16-GI-NEXT: sshll2 v18.4s, v1.8h, #05382; CHECK-FP16-GI-NEXT: scvtf v0.4s, v4.4s5383; CHECK-FP16-GI-NEXT: scvtf v1.4s, v2.4s5384; CHECK-FP16-GI-NEXT: scvtf v2.4s, v5.4s5385; CHECK-FP16-GI-NEXT: scvtf v3.4s, v6.4s5386; CHECK-FP16-GI-NEXT: scvtf v4.4s, v7.4s5387; CHECK-FP16-GI-NEXT: scvtf v5.4s, v16.4s5388; CHECK-FP16-GI-NEXT: scvtf v6.4s, v17.4s5389; CHECK-FP16-GI-NEXT: scvtf v7.4s, v18.4s5390; CHECK-FP16-GI-NEXT: ret5391entry:5392 %c = sitofp <32 x i8> %a to <32 x float>5393 ret <32 x float> %c5394}5395 5396define <32 x float> @utofp_v32i8_v32f32(<32 x i8> %a) {5397; CHECK-NOFP16-SD-LABEL: utofp_v32i8_v32f32:5398; CHECK-NOFP16-SD: // %bb.0: // %entry5399; CHECK-NOFP16-SD-NEXT: ext v2.16b, v0.16b, v0.16b, #85400; CHECK-NOFP16-SD-NEXT: ext v3.16b, v1.16b, v1.16b, #85401; CHECK-NOFP16-SD-NEXT: zip1 v4.8b, v0.8b, v0.8b5402; CHECK-NOFP16-SD-NEXT: zip2 v0.8b, v0.8b, v0.8b5403; CHECK-NOFP16-SD-NEXT: bic v4.4h, #255, lsl #85404; CHECK-NOFP16-SD-NEXT: zip1 v5.8b, v1.8b, v0.8b5405; CHECK-NOFP16-SD-NEXT: zip1 v6.8b, v2.8b, v0.8b5406; CHECK-NOFP16-SD-NEXT: zip2 v2.8b, v2.8b, v0.8b5407; CHECK-NOFP16-SD-NEXT: zip2 v1.8b, v1.8b, v0.8b5408; CHECK-NOFP16-SD-NEXT: zip1 v7.8b, v3.8b, v0.8b5409; CHECK-NOFP16-SD-NEXT: zip2 v3.8b, v3.8b, v0.8b5410; CHECK-NOFP16-SD-NEXT: bic v0.4h, #255, lsl #85411; CHECK-NOFP16-SD-NEXT: ushll v4.4s, v4.4h, #05412; CHECK-NOFP16-SD-NEXT: bic v5.4h, #255, lsl #85413; CHECK-NOFP16-SD-NEXT: bic v6.4h, #255, lsl #85414; CHECK-NOFP16-SD-NEXT: bic v2.4h, #255, lsl #85415; CHECK-NOFP16-SD-NEXT: bic v1.4h, #255, lsl #85416; CHECK-NOFP16-SD-NEXT: bic v7.4h, #255, lsl #85417; CHECK-NOFP16-SD-NEXT: bic v3.4h, #255, lsl #85418; CHECK-NOFP16-SD-NEXT: ushll v16.4s, v0.4h, #05419; CHECK-NOFP16-SD-NEXT: ucvtf v0.4s, v4.4s5420; CHECK-NOFP16-SD-NEXT: ushll v5.4s, v5.4h, #05421; CHECK-NOFP16-SD-NEXT: ushll v6.4s, v6.4h, #05422; CHECK-NOFP16-SD-NEXT: ushll v17.4s, v2.4h, #05423; CHECK-NOFP16-SD-NEXT: ushll v18.4s, v1.4h, #05424; CHECK-NOFP16-SD-NEXT: ushll v7.4s, v7.4h, #05425; CHECK-NOFP16-SD-NEXT: ushll v19.4s, v3.4h, #05426; CHECK-NOFP16-SD-NEXT: ucvtf v1.4s, v16.4s5427; CHECK-NOFP16-SD-NEXT: ucvtf v4.4s, v5.4s5428; CHECK-NOFP16-SD-NEXT: ucvtf v2.4s, v6.4s5429; CHECK-NOFP16-SD-NEXT: ucvtf v3.4s, v17.4s5430; CHECK-NOFP16-SD-NEXT: ucvtf v5.4s, v18.4s5431; CHECK-NOFP16-SD-NEXT: ucvtf v6.4s, v7.4s5432; CHECK-NOFP16-SD-NEXT: ucvtf v7.4s, v19.4s5433; CHECK-NOFP16-SD-NEXT: ret5434;5435; CHECK-FP16-SD-LABEL: utofp_v32i8_v32f32:5436; CHECK-FP16-SD: // %bb.0: // %entry5437; CHECK-FP16-SD-NEXT: ext v2.16b, v0.16b, v0.16b, #85438; CHECK-FP16-SD-NEXT: ext v3.16b, v1.16b, v1.16b, #85439; CHECK-FP16-SD-NEXT: zip1 v4.8b, v0.8b, v0.8b5440; CHECK-FP16-SD-NEXT: zip2 v0.8b, v0.8b, v0.8b5441; CHECK-FP16-SD-NEXT: bic v4.4h, #255, lsl #85442; CHECK-FP16-SD-NEXT: zip1 v5.8b, v1.8b, v0.8b5443; CHECK-FP16-SD-NEXT: zip1 v6.8b, v2.8b, v0.8b5444; CHECK-FP16-SD-NEXT: zip2 v2.8b, v2.8b, v0.8b5445; CHECK-FP16-SD-NEXT: zip2 v1.8b, v1.8b, v0.8b5446; CHECK-FP16-SD-NEXT: zip1 v7.8b, v3.8b, v0.8b5447; CHECK-FP16-SD-NEXT: zip2 v3.8b, v3.8b, v0.8b5448; CHECK-FP16-SD-NEXT: bic v0.4h, #255, lsl #85449; CHECK-FP16-SD-NEXT: ushll v4.4s, v4.4h, #05450; CHECK-FP16-SD-NEXT: bic v5.4h, #255, lsl #85451; CHECK-FP16-SD-NEXT: bic v6.4h, #255, lsl #85452; CHECK-FP16-SD-NEXT: bic v2.4h, #255, lsl #85453; CHECK-FP16-SD-NEXT: bic v1.4h, #255, lsl #85454; CHECK-FP16-SD-NEXT: bic v7.4h, #255, lsl #85455; CHECK-FP16-SD-NEXT: bic v3.4h, #255, lsl #85456; CHECK-FP16-SD-NEXT: ushll v16.4s, v0.4h, #05457; CHECK-FP16-SD-NEXT: ucvtf v0.4s, v4.4s5458; CHECK-FP16-SD-NEXT: ushll v5.4s, v5.4h, #05459; CHECK-FP16-SD-NEXT: ushll v6.4s, v6.4h, #05460; CHECK-FP16-SD-NEXT: ushll v17.4s, v2.4h, #05461; CHECK-FP16-SD-NEXT: ushll v18.4s, v1.4h, #05462; CHECK-FP16-SD-NEXT: ushll v7.4s, v7.4h, #05463; CHECK-FP16-SD-NEXT: ushll v19.4s, v3.4h, #05464; CHECK-FP16-SD-NEXT: ucvtf v1.4s, v16.4s5465; CHECK-FP16-SD-NEXT: ucvtf v4.4s, v5.4s5466; CHECK-FP16-SD-NEXT: ucvtf v2.4s, v6.4s5467; CHECK-FP16-SD-NEXT: ucvtf v3.4s, v17.4s5468; CHECK-FP16-SD-NEXT: ucvtf v5.4s, v18.4s5469; CHECK-FP16-SD-NEXT: ucvtf v6.4s, v7.4s5470; CHECK-FP16-SD-NEXT: ucvtf v7.4s, v19.4s5471; CHECK-FP16-SD-NEXT: ret5472;5473; CHECK-NOFP16-GI-LABEL: utofp_v32i8_v32f32:5474; CHECK-NOFP16-GI: // %bb.0: // %entry5475; CHECK-NOFP16-GI-NEXT: ushll v2.8h, v0.8b, #05476; CHECK-NOFP16-GI-NEXT: ushll2 v0.8h, v0.16b, #05477; CHECK-NOFP16-GI-NEXT: ushll v3.8h, v1.8b, #05478; CHECK-NOFP16-GI-NEXT: ushll2 v1.8h, v1.16b, #05479; CHECK-NOFP16-GI-NEXT: ushll v4.4s, v2.4h, #05480; CHECK-NOFP16-GI-NEXT: ushll2 v2.4s, v2.8h, #05481; CHECK-NOFP16-GI-NEXT: ushll v5.4s, v0.4h, #05482; CHECK-NOFP16-GI-NEXT: ushll2 v6.4s, v0.8h, #05483; CHECK-NOFP16-GI-NEXT: ushll v7.4s, v3.4h, #05484; CHECK-NOFP16-GI-NEXT: ushll2 v16.4s, v3.8h, #05485; CHECK-NOFP16-GI-NEXT: ushll v17.4s, v1.4h, #05486; CHECK-NOFP16-GI-NEXT: ushll2 v18.4s, v1.8h, #05487; CHECK-NOFP16-GI-NEXT: ucvtf v0.4s, v4.4s5488; CHECK-NOFP16-GI-NEXT: ucvtf v1.4s, v2.4s5489; CHECK-NOFP16-GI-NEXT: ucvtf v2.4s, v5.4s5490; CHECK-NOFP16-GI-NEXT: ucvtf v3.4s, v6.4s5491; CHECK-NOFP16-GI-NEXT: ucvtf v4.4s, v7.4s5492; CHECK-NOFP16-GI-NEXT: ucvtf v5.4s, v16.4s5493; CHECK-NOFP16-GI-NEXT: ucvtf v6.4s, v17.4s5494; CHECK-NOFP16-GI-NEXT: ucvtf v7.4s, v18.4s5495; CHECK-NOFP16-GI-NEXT: ret5496;5497; CHECK-FP16-GI-LABEL: utofp_v32i8_v32f32:5498; CHECK-FP16-GI: // %bb.0: // %entry5499; CHECK-FP16-GI-NEXT: ushll v2.8h, v0.8b, #05500; CHECK-FP16-GI-NEXT: ushll2 v0.8h, v0.16b, #05501; CHECK-FP16-GI-NEXT: ushll v3.8h, v1.8b, #05502; CHECK-FP16-GI-NEXT: ushll2 v1.8h, v1.16b, #05503; CHECK-FP16-GI-NEXT: ushll v4.4s, v2.4h, #05504; CHECK-FP16-GI-NEXT: ushll2 v2.4s, v2.8h, #05505; CHECK-FP16-GI-NEXT: ushll v5.4s, v0.4h, #05506; CHECK-FP16-GI-NEXT: ushll2 v6.4s, v0.8h, #05507; CHECK-FP16-GI-NEXT: ushll v7.4s, v3.4h, #05508; CHECK-FP16-GI-NEXT: ushll2 v16.4s, v3.8h, #05509; CHECK-FP16-GI-NEXT: ushll v17.4s, v1.4h, #05510; CHECK-FP16-GI-NEXT: ushll2 v18.4s, v1.8h, #05511; CHECK-FP16-GI-NEXT: ucvtf v0.4s, v4.4s5512; CHECK-FP16-GI-NEXT: ucvtf v1.4s, v2.4s5513; CHECK-FP16-GI-NEXT: ucvtf v2.4s, v5.4s5514; CHECK-FP16-GI-NEXT: ucvtf v3.4s, v6.4s5515; CHECK-FP16-GI-NEXT: ucvtf v4.4s, v7.4s5516; CHECK-FP16-GI-NEXT: ucvtf v5.4s, v16.4s5517; CHECK-FP16-GI-NEXT: ucvtf v6.4s, v17.4s5518; CHECK-FP16-GI-NEXT: ucvtf v7.4s, v18.4s5519; CHECK-FP16-GI-NEXT: ret5520entry:5521 %c = uitofp <32 x i8> %a to <32 x float>5522 ret <32 x float> %c5523}5524 5525define <2 x float> @stofp_v2i128_v2f32(<2 x i128> %a) {5526; CHECK-NOFP16-SD-LABEL: stofp_v2i128_v2f32:5527; CHECK-NOFP16-SD: // %bb.0: // %entry5528; CHECK-NOFP16-SD-NEXT: sub sp, sp, #485529; CHECK-NOFP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill5530; CHECK-NOFP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill5531; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 485532; CHECK-NOFP16-SD-NEXT: .cfi_offset w19, -85533; CHECK-NOFP16-SD-NEXT: .cfi_offset w20, -165534; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -325535; CHECK-NOFP16-SD-NEXT: mov x19, x15536; CHECK-NOFP16-SD-NEXT: mov x20, x05537; CHECK-NOFP16-SD-NEXT: mov x0, x25538; CHECK-NOFP16-SD-NEXT: mov x1, x35539; CHECK-NOFP16-SD-NEXT: bl __floattisf5540; CHECK-NOFP16-SD-NEXT: mov x0, x205541; CHECK-NOFP16-SD-NEXT: mov x1, x195542; CHECK-NOFP16-SD-NEXT: // kill: def $s0 killed $s0 def $q05543; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill5544; CHECK-NOFP16-SD-NEXT: bl __floattisf5545; CHECK-NOFP16-SD-NEXT: ldr q1, [sp] // 16-byte Reload5546; CHECK-NOFP16-SD-NEXT: // kill: def $s0 killed $s0 def $q05547; CHECK-NOFP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload5548; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload5549; CHECK-NOFP16-SD-NEXT: mov v0.s[1], v1.s[0]5550; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05551; CHECK-NOFP16-SD-NEXT: add sp, sp, #485552; CHECK-NOFP16-SD-NEXT: ret5553;5554; CHECK-FP16-SD-LABEL: stofp_v2i128_v2f32:5555; CHECK-FP16-SD: // %bb.0: // %entry5556; CHECK-FP16-SD-NEXT: sub sp, sp, #485557; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill5558; CHECK-FP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill5559; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 485560; CHECK-FP16-SD-NEXT: .cfi_offset w19, -85561; CHECK-FP16-SD-NEXT: .cfi_offset w20, -165562; CHECK-FP16-SD-NEXT: .cfi_offset w30, -325563; CHECK-FP16-SD-NEXT: mov x19, x15564; CHECK-FP16-SD-NEXT: mov x20, x05565; CHECK-FP16-SD-NEXT: mov x0, x25566; CHECK-FP16-SD-NEXT: mov x1, x35567; CHECK-FP16-SD-NEXT: bl __floattisf5568; CHECK-FP16-SD-NEXT: mov x0, x205569; CHECK-FP16-SD-NEXT: mov x1, x195570; CHECK-FP16-SD-NEXT: // kill: def $s0 killed $s0 def $q05571; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill5572; CHECK-FP16-SD-NEXT: bl __floattisf5573; CHECK-FP16-SD-NEXT: ldr q1, [sp] // 16-byte Reload5574; CHECK-FP16-SD-NEXT: // kill: def $s0 killed $s0 def $q05575; CHECK-FP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload5576; CHECK-FP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload5577; CHECK-FP16-SD-NEXT: mov v0.s[1], v1.s[0]5578; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05579; CHECK-FP16-SD-NEXT: add sp, sp, #485580; CHECK-FP16-SD-NEXT: ret5581;5582; CHECK-NOFP16-GI-LABEL: stofp_v2i128_v2f32:5583; CHECK-NOFP16-GI: // %bb.0: // %entry5584; CHECK-NOFP16-GI-NEXT: sub sp, sp, #485585; CHECK-NOFP16-GI-NEXT: str x30, [sp, #16] // 8-byte Spill5586; CHECK-NOFP16-GI-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill5587; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 485588; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -85589; CHECK-NOFP16-GI-NEXT: .cfi_offset w20, -165590; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -325591; CHECK-NOFP16-GI-NEXT: mov x19, x25592; CHECK-NOFP16-GI-NEXT: mov x20, x35593; CHECK-NOFP16-GI-NEXT: bl __floattisf5594; CHECK-NOFP16-GI-NEXT: mov x0, x195595; CHECK-NOFP16-GI-NEXT: mov x1, x205596; CHECK-NOFP16-GI-NEXT: // kill: def $s0 killed $s0 def $q05597; CHECK-NOFP16-GI-NEXT: str q0, [sp] // 16-byte Spill5598; CHECK-NOFP16-GI-NEXT: bl __floattisf5599; CHECK-NOFP16-GI-NEXT: ldr q1, [sp] // 16-byte Reload5600; CHECK-NOFP16-GI-NEXT: // kill: def $s0 killed $s0 def $q05601; CHECK-NOFP16-GI-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload5602; CHECK-NOFP16-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload5603; CHECK-NOFP16-GI-NEXT: mov v1.s[1], v0.s[0]5604; CHECK-NOFP16-GI-NEXT: fmov d0, d15605; CHECK-NOFP16-GI-NEXT: add sp, sp, #485606; CHECK-NOFP16-GI-NEXT: ret5607;5608; CHECK-FP16-GI-LABEL: stofp_v2i128_v2f32:5609; CHECK-FP16-GI: // %bb.0: // %entry5610; CHECK-FP16-GI-NEXT: sub sp, sp, #485611; CHECK-FP16-GI-NEXT: str x30, [sp, #16] // 8-byte Spill5612; CHECK-FP16-GI-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill5613; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 485614; CHECK-FP16-GI-NEXT: .cfi_offset w19, -85615; CHECK-FP16-GI-NEXT: .cfi_offset w20, -165616; CHECK-FP16-GI-NEXT: .cfi_offset w30, -325617; CHECK-FP16-GI-NEXT: mov x19, x25618; CHECK-FP16-GI-NEXT: mov x20, x35619; CHECK-FP16-GI-NEXT: bl __floattisf5620; CHECK-FP16-GI-NEXT: mov x0, x195621; CHECK-FP16-GI-NEXT: mov x1, x205622; CHECK-FP16-GI-NEXT: // kill: def $s0 killed $s0 def $q05623; CHECK-FP16-GI-NEXT: str q0, [sp] // 16-byte Spill5624; CHECK-FP16-GI-NEXT: bl __floattisf5625; CHECK-FP16-GI-NEXT: ldr q1, [sp] // 16-byte Reload5626; CHECK-FP16-GI-NEXT: // kill: def $s0 killed $s0 def $q05627; CHECK-FP16-GI-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload5628; CHECK-FP16-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload5629; CHECK-FP16-GI-NEXT: mov v1.s[1], v0.s[0]5630; CHECK-FP16-GI-NEXT: fmov d0, d15631; CHECK-FP16-GI-NEXT: add sp, sp, #485632; CHECK-FP16-GI-NEXT: ret5633entry:5634 %c = sitofp <2 x i128> %a to <2 x float>5635 ret <2 x float> %c5636}5637 5638define <2 x float> @utofp_v2i128_v2f32(<2 x i128> %a) {5639; CHECK-NOFP16-SD-LABEL: utofp_v2i128_v2f32:5640; CHECK-NOFP16-SD: // %bb.0: // %entry5641; CHECK-NOFP16-SD-NEXT: sub sp, sp, #485642; CHECK-NOFP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill5643; CHECK-NOFP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill5644; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 485645; CHECK-NOFP16-SD-NEXT: .cfi_offset w19, -85646; CHECK-NOFP16-SD-NEXT: .cfi_offset w20, -165647; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -325648; CHECK-NOFP16-SD-NEXT: mov x19, x15649; CHECK-NOFP16-SD-NEXT: mov x20, x05650; CHECK-NOFP16-SD-NEXT: mov x0, x25651; CHECK-NOFP16-SD-NEXT: mov x1, x35652; CHECK-NOFP16-SD-NEXT: bl __floatuntisf5653; CHECK-NOFP16-SD-NEXT: mov x0, x205654; CHECK-NOFP16-SD-NEXT: mov x1, x195655; CHECK-NOFP16-SD-NEXT: // kill: def $s0 killed $s0 def $q05656; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill5657; CHECK-NOFP16-SD-NEXT: bl __floatuntisf5658; CHECK-NOFP16-SD-NEXT: ldr q1, [sp] // 16-byte Reload5659; CHECK-NOFP16-SD-NEXT: // kill: def $s0 killed $s0 def $q05660; CHECK-NOFP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload5661; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload5662; CHECK-NOFP16-SD-NEXT: mov v0.s[1], v1.s[0]5663; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05664; CHECK-NOFP16-SD-NEXT: add sp, sp, #485665; CHECK-NOFP16-SD-NEXT: ret5666;5667; CHECK-FP16-SD-LABEL: utofp_v2i128_v2f32:5668; CHECK-FP16-SD: // %bb.0: // %entry5669; CHECK-FP16-SD-NEXT: sub sp, sp, #485670; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill5671; CHECK-FP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill5672; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 485673; CHECK-FP16-SD-NEXT: .cfi_offset w19, -85674; CHECK-FP16-SD-NEXT: .cfi_offset w20, -165675; CHECK-FP16-SD-NEXT: .cfi_offset w30, -325676; CHECK-FP16-SD-NEXT: mov x19, x15677; CHECK-FP16-SD-NEXT: mov x20, x05678; CHECK-FP16-SD-NEXT: mov x0, x25679; CHECK-FP16-SD-NEXT: mov x1, x35680; CHECK-FP16-SD-NEXT: bl __floatuntisf5681; CHECK-FP16-SD-NEXT: mov x0, x205682; CHECK-FP16-SD-NEXT: mov x1, x195683; CHECK-FP16-SD-NEXT: // kill: def $s0 killed $s0 def $q05684; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill5685; CHECK-FP16-SD-NEXT: bl __floatuntisf5686; CHECK-FP16-SD-NEXT: ldr q1, [sp] // 16-byte Reload5687; CHECK-FP16-SD-NEXT: // kill: def $s0 killed $s0 def $q05688; CHECK-FP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload5689; CHECK-FP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload5690; CHECK-FP16-SD-NEXT: mov v0.s[1], v1.s[0]5691; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05692; CHECK-FP16-SD-NEXT: add sp, sp, #485693; CHECK-FP16-SD-NEXT: ret5694;5695; CHECK-NOFP16-GI-LABEL: utofp_v2i128_v2f32:5696; CHECK-NOFP16-GI: // %bb.0: // %entry5697; CHECK-NOFP16-GI-NEXT: sub sp, sp, #485698; CHECK-NOFP16-GI-NEXT: str x30, [sp, #16] // 8-byte Spill5699; CHECK-NOFP16-GI-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill5700; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 485701; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -85702; CHECK-NOFP16-GI-NEXT: .cfi_offset w20, -165703; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -325704; CHECK-NOFP16-GI-NEXT: mov x19, x25705; CHECK-NOFP16-GI-NEXT: mov x20, x35706; CHECK-NOFP16-GI-NEXT: bl __floatuntisf5707; CHECK-NOFP16-GI-NEXT: mov x0, x195708; CHECK-NOFP16-GI-NEXT: mov x1, x205709; CHECK-NOFP16-GI-NEXT: // kill: def $s0 killed $s0 def $q05710; CHECK-NOFP16-GI-NEXT: str q0, [sp] // 16-byte Spill5711; CHECK-NOFP16-GI-NEXT: bl __floatuntisf5712; CHECK-NOFP16-GI-NEXT: ldr q1, [sp] // 16-byte Reload5713; CHECK-NOFP16-GI-NEXT: // kill: def $s0 killed $s0 def $q05714; CHECK-NOFP16-GI-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload5715; CHECK-NOFP16-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload5716; CHECK-NOFP16-GI-NEXT: mov v1.s[1], v0.s[0]5717; CHECK-NOFP16-GI-NEXT: fmov d0, d15718; CHECK-NOFP16-GI-NEXT: add sp, sp, #485719; CHECK-NOFP16-GI-NEXT: ret5720;5721; CHECK-FP16-GI-LABEL: utofp_v2i128_v2f32:5722; CHECK-FP16-GI: // %bb.0: // %entry5723; CHECK-FP16-GI-NEXT: sub sp, sp, #485724; CHECK-FP16-GI-NEXT: str x30, [sp, #16] // 8-byte Spill5725; CHECK-FP16-GI-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill5726; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 485727; CHECK-FP16-GI-NEXT: .cfi_offset w19, -85728; CHECK-FP16-GI-NEXT: .cfi_offset w20, -165729; CHECK-FP16-GI-NEXT: .cfi_offset w30, -325730; CHECK-FP16-GI-NEXT: mov x19, x25731; CHECK-FP16-GI-NEXT: mov x20, x35732; CHECK-FP16-GI-NEXT: bl __floatuntisf5733; CHECK-FP16-GI-NEXT: mov x0, x195734; CHECK-FP16-GI-NEXT: mov x1, x205735; CHECK-FP16-GI-NEXT: // kill: def $s0 killed $s0 def $q05736; CHECK-FP16-GI-NEXT: str q0, [sp] // 16-byte Spill5737; CHECK-FP16-GI-NEXT: bl __floatuntisf5738; CHECK-FP16-GI-NEXT: ldr q1, [sp] // 16-byte Reload5739; CHECK-FP16-GI-NEXT: // kill: def $s0 killed $s0 def $q05740; CHECK-FP16-GI-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload5741; CHECK-FP16-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload5742; CHECK-FP16-GI-NEXT: mov v1.s[1], v0.s[0]5743; CHECK-FP16-GI-NEXT: fmov d0, d15744; CHECK-FP16-GI-NEXT: add sp, sp, #485745; CHECK-FP16-GI-NEXT: ret5746entry:5747 %c = uitofp <2 x i128> %a to <2 x float>5748 ret <2 x float> %c5749}5750 5751define <2 x half> @stofp_v2i64_v2f16(<2 x i64> %a) {5752; CHECK-NOFP16-SD-LABEL: stofp_v2i64_v2f16:5753; CHECK-NOFP16-SD: // %bb.0: // %entry5754; CHECK-NOFP16-SD-NEXT: mov x8, v0.d[1]5755; CHECK-NOFP16-SD-NEXT: fmov x9, d05756; CHECK-NOFP16-SD-NEXT: scvtf s1, x95757; CHECK-NOFP16-SD-NEXT: scvtf s0, x85758; CHECK-NOFP16-SD-NEXT: fcvt h2, s05759; CHECK-NOFP16-SD-NEXT: fcvt h0, s15760; CHECK-NOFP16-SD-NEXT: mov v0.h[1], v2.h[0]5761; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05762; CHECK-NOFP16-SD-NEXT: ret5763;5764; CHECK-FP16-SD-LABEL: stofp_v2i64_v2f16:5765; CHECK-FP16-SD: // %bb.0: // %entry5766; CHECK-FP16-SD-NEXT: mov x8, v0.d[1]5767; CHECK-FP16-SD-NEXT: fmov x9, d05768; CHECK-FP16-SD-NEXT: scvtf h0, x95769; CHECK-FP16-SD-NEXT: scvtf h1, x85770; CHECK-FP16-SD-NEXT: mov v0.h[1], v1.h[0]5771; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05772; CHECK-FP16-SD-NEXT: ret5773;5774; CHECK-NOFP16-GI-LABEL: stofp_v2i64_v2f16:5775; CHECK-NOFP16-GI: // %bb.0: // %entry5776; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v0.2d5777; CHECK-NOFP16-GI-NEXT: fcvtn v0.2s, v0.2d5778; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s5779; CHECK-NOFP16-GI-NEXT: ret5780;5781; CHECK-FP16-GI-LABEL: stofp_v2i64_v2f16:5782; CHECK-FP16-GI: // %bb.0: // %entry5783; CHECK-FP16-GI-NEXT: scvtf v0.2d, v0.2d5784; CHECK-FP16-GI-NEXT: fcvtn v0.2s, v0.2d5785; CHECK-FP16-GI-NEXT: fcvtn v0.4h, v0.4s5786; CHECK-FP16-GI-NEXT: ret5787entry:5788 %c = sitofp <2 x i64> %a to <2 x half>5789 ret <2 x half> %c5790}5791 5792define <2 x half> @utofp_v2i64_v2f16(<2 x i64> %a) {5793; CHECK-NOFP16-SD-LABEL: utofp_v2i64_v2f16:5794; CHECK-NOFP16-SD: // %bb.0: // %entry5795; CHECK-NOFP16-SD-NEXT: mov x8, v0.d[1]5796; CHECK-NOFP16-SD-NEXT: fmov x9, d05797; CHECK-NOFP16-SD-NEXT: ucvtf s1, x95798; CHECK-NOFP16-SD-NEXT: ucvtf s0, x85799; CHECK-NOFP16-SD-NEXT: fcvt h2, s05800; CHECK-NOFP16-SD-NEXT: fcvt h0, s15801; CHECK-NOFP16-SD-NEXT: mov v0.h[1], v2.h[0]5802; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05803; CHECK-NOFP16-SD-NEXT: ret5804;5805; CHECK-FP16-SD-LABEL: utofp_v2i64_v2f16:5806; CHECK-FP16-SD: // %bb.0: // %entry5807; CHECK-FP16-SD-NEXT: mov x8, v0.d[1]5808; CHECK-FP16-SD-NEXT: fmov x9, d05809; CHECK-FP16-SD-NEXT: ucvtf h0, x95810; CHECK-FP16-SD-NEXT: ucvtf h1, x85811; CHECK-FP16-SD-NEXT: mov v0.h[1], v1.h[0]5812; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q05813; CHECK-FP16-SD-NEXT: ret5814;5815; CHECK-NOFP16-GI-LABEL: utofp_v2i64_v2f16:5816; CHECK-NOFP16-GI: // %bb.0: // %entry5817; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v0.2d5818; CHECK-NOFP16-GI-NEXT: fcvtn v0.2s, v0.2d5819; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s5820; CHECK-NOFP16-GI-NEXT: ret5821;5822; CHECK-FP16-GI-LABEL: utofp_v2i64_v2f16:5823; CHECK-FP16-GI: // %bb.0: // %entry5824; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v0.2d5825; CHECK-FP16-GI-NEXT: fcvtn v0.2s, v0.2d5826; CHECK-FP16-GI-NEXT: fcvtn v0.4h, v0.4s5827; CHECK-FP16-GI-NEXT: ret5828entry:5829 %c = uitofp <2 x i64> %a to <2 x half>5830 ret <2 x half> %c5831}5832 5833define <3 x half> @stofp_v3i64_v3f16(<3 x i64> %a) {5834; CHECK-LABEL: stofp_v3i64_v3f16:5835; CHECK: // %bb.0: // %entry5836; CHECK-NEXT: // kill: def $d0 killed $d0 def $q05837; CHECK-NEXT: // kill: def $d1 killed $d1 def $q15838; CHECK-NEXT: // kill: def $d2 killed $d2 def $q25839; CHECK-NEXT: mov v0.d[1], v1.d[0]5840; CHECK-NEXT: scvtf v1.2d, v2.2d5841; CHECK-NEXT: scvtf v0.2d, v0.2d5842; CHECK-NEXT: fcvtn v0.2s, v0.2d5843; CHECK-NEXT: fcvtn2 v0.4s, v1.2d5844; CHECK-NEXT: fcvtn v0.4h, v0.4s5845; CHECK-NEXT: ret5846entry:5847 %c = sitofp <3 x i64> %a to <3 x half>5848 ret <3 x half> %c5849}5850 5851define <3 x half> @utofp_v3i64_v3f16(<3 x i64> %a) {5852; CHECK-LABEL: utofp_v3i64_v3f16:5853; CHECK: // %bb.0: // %entry5854; CHECK-NEXT: // kill: def $d0 killed $d0 def $q05855; CHECK-NEXT: // kill: def $d1 killed $d1 def $q15856; CHECK-NEXT: // kill: def $d2 killed $d2 def $q25857; CHECK-NEXT: mov v0.d[1], v1.d[0]5858; CHECK-NEXT: ucvtf v1.2d, v2.2d5859; CHECK-NEXT: ucvtf v0.2d, v0.2d5860; CHECK-NEXT: fcvtn v0.2s, v0.2d5861; CHECK-NEXT: fcvtn2 v0.4s, v1.2d5862; CHECK-NEXT: fcvtn v0.4h, v0.4s5863; CHECK-NEXT: ret5864entry:5865 %c = uitofp <3 x i64> %a to <3 x half>5866 ret <3 x half> %c5867}5868 5869define <4 x half> @stofp_v4i64_v4f16(<4 x i64> %a) {5870; CHECK-LABEL: stofp_v4i64_v4f16:5871; CHECK: // %bb.0: // %entry5872; CHECK-NEXT: scvtf v0.2d, v0.2d5873; CHECK-NEXT: scvtf v1.2d, v1.2d5874; CHECK-NEXT: fcvtn v0.2s, v0.2d5875; CHECK-NEXT: fcvtn2 v0.4s, v1.2d5876; CHECK-NEXT: fcvtn v0.4h, v0.4s5877; CHECK-NEXT: ret5878entry:5879 %c = sitofp <4 x i64> %a to <4 x half>5880 ret <4 x half> %c5881}5882 5883define <4 x half> @utofp_v4i64_v4f16(<4 x i64> %a) {5884; CHECK-LABEL: utofp_v4i64_v4f16:5885; CHECK: // %bb.0: // %entry5886; CHECK-NEXT: ucvtf v0.2d, v0.2d5887; CHECK-NEXT: ucvtf v1.2d, v1.2d5888; CHECK-NEXT: fcvtn v0.2s, v0.2d5889; CHECK-NEXT: fcvtn2 v0.4s, v1.2d5890; CHECK-NEXT: fcvtn v0.4h, v0.4s5891; CHECK-NEXT: ret5892entry:5893 %c = uitofp <4 x i64> %a to <4 x half>5894 ret <4 x half> %c5895}5896 5897define <8 x half> @stofp_v8i64_v8f16(<8 x i64> %a) {5898; CHECK-NOFP16-SD-LABEL: stofp_v8i64_v8f16:5899; CHECK-NOFP16-SD: // %bb.0: // %entry5900; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v0.2d5901; CHECK-NOFP16-SD-NEXT: scvtf v2.2d, v2.2d5902; CHECK-NOFP16-SD-NEXT: scvtf v1.2d, v1.2d5903; CHECK-NOFP16-SD-NEXT: scvtf v3.2d, v3.2d5904; CHECK-NOFP16-SD-NEXT: fcvtn v0.2s, v0.2d5905; CHECK-NOFP16-SD-NEXT: fcvtn v2.2s, v2.2d5906; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.4s, v1.2d5907; CHECK-NOFP16-SD-NEXT: fcvtn2 v2.4s, v3.2d5908; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v0.4s5909; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.8h, v2.4s5910; CHECK-NOFP16-SD-NEXT: ret5911;5912; CHECK-FP16-SD-LABEL: stofp_v8i64_v8f16:5913; CHECK-FP16-SD: // %bb.0: // %entry5914; CHECK-FP16-SD-NEXT: scvtf v0.2d, v0.2d5915; CHECK-FP16-SD-NEXT: scvtf v2.2d, v2.2d5916; CHECK-FP16-SD-NEXT: scvtf v1.2d, v1.2d5917; CHECK-FP16-SD-NEXT: scvtf v3.2d, v3.2d5918; CHECK-FP16-SD-NEXT: fcvtn v0.2s, v0.2d5919; CHECK-FP16-SD-NEXT: fcvtn v2.2s, v2.2d5920; CHECK-FP16-SD-NEXT: fcvtn2 v0.4s, v1.2d5921; CHECK-FP16-SD-NEXT: fcvtn2 v2.4s, v3.2d5922; CHECK-FP16-SD-NEXT: fcvtn v0.4h, v0.4s5923; CHECK-FP16-SD-NEXT: fcvtn2 v0.8h, v2.4s5924; CHECK-FP16-SD-NEXT: ret5925;5926; CHECK-NOFP16-GI-LABEL: stofp_v8i64_v8f16:5927; CHECK-NOFP16-GI: // %bb.0: // %entry5928; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v0.2d5929; CHECK-NOFP16-GI-NEXT: scvtf v1.2d, v1.2d5930; CHECK-NOFP16-GI-NEXT: scvtf v2.2d, v2.2d5931; CHECK-NOFP16-GI-NEXT: scvtf v3.2d, v3.2d5932; CHECK-NOFP16-GI-NEXT: fcvtn v0.2s, v0.2d5933; CHECK-NOFP16-GI-NEXT: fcvtn v2.2s, v2.2d5934; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.4s, v1.2d5935; CHECK-NOFP16-GI-NEXT: fcvtn2 v2.4s, v3.2d5936; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s5937; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.8h, v2.4s5938; CHECK-NOFP16-GI-NEXT: ret5939;5940; CHECK-FP16-GI-LABEL: stofp_v8i64_v8f16:5941; CHECK-FP16-GI: // %bb.0: // %entry5942; CHECK-FP16-GI-NEXT: scvtf v0.2d, v0.2d5943; CHECK-FP16-GI-NEXT: scvtf v1.2d, v1.2d5944; CHECK-FP16-GI-NEXT: scvtf v2.2d, v2.2d5945; CHECK-FP16-GI-NEXT: scvtf v3.2d, v3.2d5946; CHECK-FP16-GI-NEXT: fcvtn v0.2s, v0.2d5947; CHECK-FP16-GI-NEXT: fcvtn v2.2s, v2.2d5948; CHECK-FP16-GI-NEXT: fcvtn2 v0.4s, v1.2d5949; CHECK-FP16-GI-NEXT: fcvtn2 v2.4s, v3.2d5950; CHECK-FP16-GI-NEXT: fcvtn v0.4h, v0.4s5951; CHECK-FP16-GI-NEXT: fcvtn2 v0.8h, v2.4s5952; CHECK-FP16-GI-NEXT: ret5953entry:5954 %c = sitofp <8 x i64> %a to <8 x half>5955 ret <8 x half> %c5956}5957 5958define <8 x half> @utofp_v8i64_v8f16(<8 x i64> %a) {5959; CHECK-NOFP16-SD-LABEL: utofp_v8i64_v8f16:5960; CHECK-NOFP16-SD: // %bb.0: // %entry5961; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v0.2d5962; CHECK-NOFP16-SD-NEXT: ucvtf v2.2d, v2.2d5963; CHECK-NOFP16-SD-NEXT: ucvtf v1.2d, v1.2d5964; CHECK-NOFP16-SD-NEXT: ucvtf v3.2d, v3.2d5965; CHECK-NOFP16-SD-NEXT: fcvtn v0.2s, v0.2d5966; CHECK-NOFP16-SD-NEXT: fcvtn v2.2s, v2.2d5967; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.4s, v1.2d5968; CHECK-NOFP16-SD-NEXT: fcvtn2 v2.4s, v3.2d5969; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v0.4s5970; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.8h, v2.4s5971; CHECK-NOFP16-SD-NEXT: ret5972;5973; CHECK-FP16-SD-LABEL: utofp_v8i64_v8f16:5974; CHECK-FP16-SD: // %bb.0: // %entry5975; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v0.2d5976; CHECK-FP16-SD-NEXT: ucvtf v2.2d, v2.2d5977; CHECK-FP16-SD-NEXT: ucvtf v1.2d, v1.2d5978; CHECK-FP16-SD-NEXT: ucvtf v3.2d, v3.2d5979; CHECK-FP16-SD-NEXT: fcvtn v0.2s, v0.2d5980; CHECK-FP16-SD-NEXT: fcvtn v2.2s, v2.2d5981; CHECK-FP16-SD-NEXT: fcvtn2 v0.4s, v1.2d5982; CHECK-FP16-SD-NEXT: fcvtn2 v2.4s, v3.2d5983; CHECK-FP16-SD-NEXT: fcvtn v0.4h, v0.4s5984; CHECK-FP16-SD-NEXT: fcvtn2 v0.8h, v2.4s5985; CHECK-FP16-SD-NEXT: ret5986;5987; CHECK-NOFP16-GI-LABEL: utofp_v8i64_v8f16:5988; CHECK-NOFP16-GI: // %bb.0: // %entry5989; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v0.2d5990; CHECK-NOFP16-GI-NEXT: ucvtf v1.2d, v1.2d5991; CHECK-NOFP16-GI-NEXT: ucvtf v2.2d, v2.2d5992; CHECK-NOFP16-GI-NEXT: ucvtf v3.2d, v3.2d5993; CHECK-NOFP16-GI-NEXT: fcvtn v0.2s, v0.2d5994; CHECK-NOFP16-GI-NEXT: fcvtn v2.2s, v2.2d5995; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.4s, v1.2d5996; CHECK-NOFP16-GI-NEXT: fcvtn2 v2.4s, v3.2d5997; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s5998; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.8h, v2.4s5999; CHECK-NOFP16-GI-NEXT: ret6000;6001; CHECK-FP16-GI-LABEL: utofp_v8i64_v8f16:6002; CHECK-FP16-GI: // %bb.0: // %entry6003; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v0.2d6004; CHECK-FP16-GI-NEXT: ucvtf v1.2d, v1.2d6005; CHECK-FP16-GI-NEXT: ucvtf v2.2d, v2.2d6006; CHECK-FP16-GI-NEXT: ucvtf v3.2d, v3.2d6007; CHECK-FP16-GI-NEXT: fcvtn v0.2s, v0.2d6008; CHECK-FP16-GI-NEXT: fcvtn v2.2s, v2.2d6009; CHECK-FP16-GI-NEXT: fcvtn2 v0.4s, v1.2d6010; CHECK-FP16-GI-NEXT: fcvtn2 v2.4s, v3.2d6011; CHECK-FP16-GI-NEXT: fcvtn v0.4h, v0.4s6012; CHECK-FP16-GI-NEXT: fcvtn2 v0.8h, v2.4s6013; CHECK-FP16-GI-NEXT: ret6014entry:6015 %c = uitofp <8 x i64> %a to <8 x half>6016 ret <8 x half> %c6017}6018 6019define <16 x half> @stofp_v16i64_v16f16(<16 x i64> %a) {6020; CHECK-NOFP16-SD-LABEL: stofp_v16i64_v16f16:6021; CHECK-NOFP16-SD: // %bb.0: // %entry6022; CHECK-NOFP16-SD-NEXT: scvtf v0.2d, v0.2d6023; CHECK-NOFP16-SD-NEXT: scvtf v4.2d, v4.2d6024; CHECK-NOFP16-SD-NEXT: scvtf v2.2d, v2.2d6025; CHECK-NOFP16-SD-NEXT: scvtf v1.2d, v1.2d6026; CHECK-NOFP16-SD-NEXT: scvtf v6.2d, v6.2d6027; CHECK-NOFP16-SD-NEXT: scvtf v5.2d, v5.2d6028; CHECK-NOFP16-SD-NEXT: scvtf v3.2d, v3.2d6029; CHECK-NOFP16-SD-NEXT: fcvtn v0.2s, v0.2d6030; CHECK-NOFP16-SD-NEXT: fcvtn v4.2s, v4.2d6031; CHECK-NOFP16-SD-NEXT: fcvtn v2.2s, v2.2d6032; CHECK-NOFP16-SD-NEXT: fcvtn v6.2s, v6.2d6033; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.4s, v1.2d6034; CHECK-NOFP16-SD-NEXT: scvtf v1.2d, v7.2d6035; CHECK-NOFP16-SD-NEXT: fcvtn2 v4.4s, v5.2d6036; CHECK-NOFP16-SD-NEXT: fcvtn2 v2.4s, v3.2d6037; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v0.4s6038; CHECK-NOFP16-SD-NEXT: fcvtn2 v6.4s, v1.2d6039; CHECK-NOFP16-SD-NEXT: fcvtn v1.4h, v4.4s6040; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.8h, v2.4s6041; CHECK-NOFP16-SD-NEXT: fcvtn2 v1.8h, v6.4s6042; CHECK-NOFP16-SD-NEXT: ret6043;6044; CHECK-FP16-SD-LABEL: stofp_v16i64_v16f16:6045; CHECK-FP16-SD: // %bb.0: // %entry6046; CHECK-FP16-SD-NEXT: scvtf v0.2d, v0.2d6047; CHECK-FP16-SD-NEXT: scvtf v4.2d, v4.2d6048; CHECK-FP16-SD-NEXT: scvtf v2.2d, v2.2d6049; CHECK-FP16-SD-NEXT: scvtf v1.2d, v1.2d6050; CHECK-FP16-SD-NEXT: scvtf v6.2d, v6.2d6051; CHECK-FP16-SD-NEXT: scvtf v5.2d, v5.2d6052; CHECK-FP16-SD-NEXT: scvtf v3.2d, v3.2d6053; CHECK-FP16-SD-NEXT: fcvtn v0.2s, v0.2d6054; CHECK-FP16-SD-NEXT: fcvtn v4.2s, v4.2d6055; CHECK-FP16-SD-NEXT: fcvtn v2.2s, v2.2d6056; CHECK-FP16-SD-NEXT: fcvtn v6.2s, v6.2d6057; CHECK-FP16-SD-NEXT: fcvtn2 v0.4s, v1.2d6058; CHECK-FP16-SD-NEXT: scvtf v1.2d, v7.2d6059; CHECK-FP16-SD-NEXT: fcvtn2 v4.4s, v5.2d6060; CHECK-FP16-SD-NEXT: fcvtn2 v2.4s, v3.2d6061; CHECK-FP16-SD-NEXT: fcvtn v0.4h, v0.4s6062; CHECK-FP16-SD-NEXT: fcvtn2 v6.4s, v1.2d6063; CHECK-FP16-SD-NEXT: fcvtn v1.4h, v4.4s6064; CHECK-FP16-SD-NEXT: fcvtn2 v0.8h, v2.4s6065; CHECK-FP16-SD-NEXT: fcvtn2 v1.8h, v6.4s6066; CHECK-FP16-SD-NEXT: ret6067;6068; CHECK-NOFP16-GI-LABEL: stofp_v16i64_v16f16:6069; CHECK-NOFP16-GI: // %bb.0: // %entry6070; CHECK-NOFP16-GI-NEXT: scvtf v0.2d, v0.2d6071; CHECK-NOFP16-GI-NEXT: scvtf v4.2d, v4.2d6072; CHECK-NOFP16-GI-NEXT: scvtf v1.2d, v1.2d6073; CHECK-NOFP16-GI-NEXT: scvtf v2.2d, v2.2d6074; CHECK-NOFP16-GI-NEXT: scvtf v5.2d, v5.2d6075; CHECK-NOFP16-GI-NEXT: scvtf v6.2d, v6.2d6076; CHECK-NOFP16-GI-NEXT: scvtf v3.2d, v3.2d6077; CHECK-NOFP16-GI-NEXT: scvtf v7.2d, v7.2d6078; CHECK-NOFP16-GI-NEXT: fcvtn v0.2s, v0.2d6079; CHECK-NOFP16-GI-NEXT: fcvtn v4.2s, v4.2d6080; CHECK-NOFP16-GI-NEXT: fcvtn v2.2s, v2.2d6081; CHECK-NOFP16-GI-NEXT: fcvtn v6.2s, v6.2d6082; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.4s, v1.2d6083; CHECK-NOFP16-GI-NEXT: fcvtn2 v4.4s, v5.2d6084; CHECK-NOFP16-GI-NEXT: fcvtn2 v2.4s, v3.2d6085; CHECK-NOFP16-GI-NEXT: fcvtn2 v6.4s, v7.2d6086; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s6087; CHECK-NOFP16-GI-NEXT: fcvtn v1.4h, v4.4s6088; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.8h, v2.4s6089; CHECK-NOFP16-GI-NEXT: fcvtn2 v1.8h, v6.4s6090; CHECK-NOFP16-GI-NEXT: ret6091;6092; CHECK-FP16-GI-LABEL: stofp_v16i64_v16f16:6093; CHECK-FP16-GI: // %bb.0: // %entry6094; CHECK-FP16-GI-NEXT: scvtf v0.2d, v0.2d6095; CHECK-FP16-GI-NEXT: scvtf v4.2d, v4.2d6096; CHECK-FP16-GI-NEXT: scvtf v1.2d, v1.2d6097; CHECK-FP16-GI-NEXT: scvtf v2.2d, v2.2d6098; CHECK-FP16-GI-NEXT: scvtf v5.2d, v5.2d6099; CHECK-FP16-GI-NEXT: scvtf v6.2d, v6.2d6100; CHECK-FP16-GI-NEXT: scvtf v3.2d, v3.2d6101; CHECK-FP16-GI-NEXT: scvtf v7.2d, v7.2d6102; CHECK-FP16-GI-NEXT: fcvtn v0.2s, v0.2d6103; CHECK-FP16-GI-NEXT: fcvtn v4.2s, v4.2d6104; CHECK-FP16-GI-NEXT: fcvtn v2.2s, v2.2d6105; CHECK-FP16-GI-NEXT: fcvtn v6.2s, v6.2d6106; CHECK-FP16-GI-NEXT: fcvtn2 v0.4s, v1.2d6107; CHECK-FP16-GI-NEXT: fcvtn2 v4.4s, v5.2d6108; CHECK-FP16-GI-NEXT: fcvtn2 v2.4s, v3.2d6109; CHECK-FP16-GI-NEXT: fcvtn2 v6.4s, v7.2d6110; CHECK-FP16-GI-NEXT: fcvtn v0.4h, v0.4s6111; CHECK-FP16-GI-NEXT: fcvtn v1.4h, v4.4s6112; CHECK-FP16-GI-NEXT: fcvtn2 v0.8h, v2.4s6113; CHECK-FP16-GI-NEXT: fcvtn2 v1.8h, v6.4s6114; CHECK-FP16-GI-NEXT: ret6115entry:6116 %c = sitofp <16 x i64> %a to <16 x half>6117 ret <16 x half> %c6118}6119 6120define <16 x half> @utofp_v16i64_v16f16(<16 x i64> %a) {6121; CHECK-NOFP16-SD-LABEL: utofp_v16i64_v16f16:6122; CHECK-NOFP16-SD: // %bb.0: // %entry6123; CHECK-NOFP16-SD-NEXT: ucvtf v0.2d, v0.2d6124; CHECK-NOFP16-SD-NEXT: ucvtf v4.2d, v4.2d6125; CHECK-NOFP16-SD-NEXT: ucvtf v2.2d, v2.2d6126; CHECK-NOFP16-SD-NEXT: ucvtf v1.2d, v1.2d6127; CHECK-NOFP16-SD-NEXT: ucvtf v6.2d, v6.2d6128; CHECK-NOFP16-SD-NEXT: ucvtf v5.2d, v5.2d6129; CHECK-NOFP16-SD-NEXT: ucvtf v3.2d, v3.2d6130; CHECK-NOFP16-SD-NEXT: fcvtn v0.2s, v0.2d6131; CHECK-NOFP16-SD-NEXT: fcvtn v4.2s, v4.2d6132; CHECK-NOFP16-SD-NEXT: fcvtn v2.2s, v2.2d6133; CHECK-NOFP16-SD-NEXT: fcvtn v6.2s, v6.2d6134; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.4s, v1.2d6135; CHECK-NOFP16-SD-NEXT: ucvtf v1.2d, v7.2d6136; CHECK-NOFP16-SD-NEXT: fcvtn2 v4.4s, v5.2d6137; CHECK-NOFP16-SD-NEXT: fcvtn2 v2.4s, v3.2d6138; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v0.4s6139; CHECK-NOFP16-SD-NEXT: fcvtn2 v6.4s, v1.2d6140; CHECK-NOFP16-SD-NEXT: fcvtn v1.4h, v4.4s6141; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.8h, v2.4s6142; CHECK-NOFP16-SD-NEXT: fcvtn2 v1.8h, v6.4s6143; CHECK-NOFP16-SD-NEXT: ret6144;6145; CHECK-FP16-SD-LABEL: utofp_v16i64_v16f16:6146; CHECK-FP16-SD: // %bb.0: // %entry6147; CHECK-FP16-SD-NEXT: ucvtf v0.2d, v0.2d6148; CHECK-FP16-SD-NEXT: ucvtf v4.2d, v4.2d6149; CHECK-FP16-SD-NEXT: ucvtf v2.2d, v2.2d6150; CHECK-FP16-SD-NEXT: ucvtf v1.2d, v1.2d6151; CHECK-FP16-SD-NEXT: ucvtf v6.2d, v6.2d6152; CHECK-FP16-SD-NEXT: ucvtf v5.2d, v5.2d6153; CHECK-FP16-SD-NEXT: ucvtf v3.2d, v3.2d6154; CHECK-FP16-SD-NEXT: fcvtn v0.2s, v0.2d6155; CHECK-FP16-SD-NEXT: fcvtn v4.2s, v4.2d6156; CHECK-FP16-SD-NEXT: fcvtn v2.2s, v2.2d6157; CHECK-FP16-SD-NEXT: fcvtn v6.2s, v6.2d6158; CHECK-FP16-SD-NEXT: fcvtn2 v0.4s, v1.2d6159; CHECK-FP16-SD-NEXT: ucvtf v1.2d, v7.2d6160; CHECK-FP16-SD-NEXT: fcvtn2 v4.4s, v5.2d6161; CHECK-FP16-SD-NEXT: fcvtn2 v2.4s, v3.2d6162; CHECK-FP16-SD-NEXT: fcvtn v0.4h, v0.4s6163; CHECK-FP16-SD-NEXT: fcvtn2 v6.4s, v1.2d6164; CHECK-FP16-SD-NEXT: fcvtn v1.4h, v4.4s6165; CHECK-FP16-SD-NEXT: fcvtn2 v0.8h, v2.4s6166; CHECK-FP16-SD-NEXT: fcvtn2 v1.8h, v6.4s6167; CHECK-FP16-SD-NEXT: ret6168;6169; CHECK-NOFP16-GI-LABEL: utofp_v16i64_v16f16:6170; CHECK-NOFP16-GI: // %bb.0: // %entry6171; CHECK-NOFP16-GI-NEXT: ucvtf v0.2d, v0.2d6172; CHECK-NOFP16-GI-NEXT: ucvtf v4.2d, v4.2d6173; CHECK-NOFP16-GI-NEXT: ucvtf v1.2d, v1.2d6174; CHECK-NOFP16-GI-NEXT: ucvtf v2.2d, v2.2d6175; CHECK-NOFP16-GI-NEXT: ucvtf v5.2d, v5.2d6176; CHECK-NOFP16-GI-NEXT: ucvtf v6.2d, v6.2d6177; CHECK-NOFP16-GI-NEXT: ucvtf v3.2d, v3.2d6178; CHECK-NOFP16-GI-NEXT: ucvtf v7.2d, v7.2d6179; CHECK-NOFP16-GI-NEXT: fcvtn v0.2s, v0.2d6180; CHECK-NOFP16-GI-NEXT: fcvtn v4.2s, v4.2d6181; CHECK-NOFP16-GI-NEXT: fcvtn v2.2s, v2.2d6182; CHECK-NOFP16-GI-NEXT: fcvtn v6.2s, v6.2d6183; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.4s, v1.2d6184; CHECK-NOFP16-GI-NEXT: fcvtn2 v4.4s, v5.2d6185; CHECK-NOFP16-GI-NEXT: fcvtn2 v2.4s, v3.2d6186; CHECK-NOFP16-GI-NEXT: fcvtn2 v6.4s, v7.2d6187; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s6188; CHECK-NOFP16-GI-NEXT: fcvtn v1.4h, v4.4s6189; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.8h, v2.4s6190; CHECK-NOFP16-GI-NEXT: fcvtn2 v1.8h, v6.4s6191; CHECK-NOFP16-GI-NEXT: ret6192;6193; CHECK-FP16-GI-LABEL: utofp_v16i64_v16f16:6194; CHECK-FP16-GI: // %bb.0: // %entry6195; CHECK-FP16-GI-NEXT: ucvtf v0.2d, v0.2d6196; CHECK-FP16-GI-NEXT: ucvtf v4.2d, v4.2d6197; CHECK-FP16-GI-NEXT: ucvtf v1.2d, v1.2d6198; CHECK-FP16-GI-NEXT: ucvtf v2.2d, v2.2d6199; CHECK-FP16-GI-NEXT: ucvtf v5.2d, v5.2d6200; CHECK-FP16-GI-NEXT: ucvtf v6.2d, v6.2d6201; CHECK-FP16-GI-NEXT: ucvtf v3.2d, v3.2d6202; CHECK-FP16-GI-NEXT: ucvtf v7.2d, v7.2d6203; CHECK-FP16-GI-NEXT: fcvtn v0.2s, v0.2d6204; CHECK-FP16-GI-NEXT: fcvtn v4.2s, v4.2d6205; CHECK-FP16-GI-NEXT: fcvtn v2.2s, v2.2d6206; CHECK-FP16-GI-NEXT: fcvtn v6.2s, v6.2d6207; CHECK-FP16-GI-NEXT: fcvtn2 v0.4s, v1.2d6208; CHECK-FP16-GI-NEXT: fcvtn2 v4.4s, v5.2d6209; CHECK-FP16-GI-NEXT: fcvtn2 v2.4s, v3.2d6210; CHECK-FP16-GI-NEXT: fcvtn2 v6.4s, v7.2d6211; CHECK-FP16-GI-NEXT: fcvtn v0.4h, v0.4s6212; CHECK-FP16-GI-NEXT: fcvtn v1.4h, v4.4s6213; CHECK-FP16-GI-NEXT: fcvtn2 v0.8h, v2.4s6214; CHECK-FP16-GI-NEXT: fcvtn2 v1.8h, v6.4s6215; CHECK-FP16-GI-NEXT: ret6216entry:6217 %c = uitofp <16 x i64> %a to <16 x half>6218 ret <16 x half> %c6219}6220 6221define <2 x half> @stofp_v2i32_v2f16(<2 x i32> %a) {6222; CHECK-NOFP16-SD-LABEL: stofp_v2i32_v2f16:6223; CHECK-NOFP16-SD: // %bb.0: // %entry6224; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q06225; CHECK-NOFP16-SD-NEXT: scvtf v0.4s, v0.4s6226; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v0.4s6227; CHECK-NOFP16-SD-NEXT: ret6228;6229; CHECK-FP16-SD-LABEL: stofp_v2i32_v2f16:6230; CHECK-FP16-SD: // %bb.0: // %entry6231; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q06232; CHECK-FP16-SD-NEXT: scvtf v0.4s, v0.4s6233; CHECK-FP16-SD-NEXT: fcvtn v0.4h, v0.4s6234; CHECK-FP16-SD-NEXT: ret6235;6236; CHECK-NOFP16-GI-LABEL: stofp_v2i32_v2f16:6237; CHECK-NOFP16-GI: // %bb.0: // %entry6238; CHECK-NOFP16-GI-NEXT: scvtf v0.2s, v0.2s6239; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s6240; CHECK-NOFP16-GI-NEXT: ret6241;6242; CHECK-FP16-GI-LABEL: stofp_v2i32_v2f16:6243; CHECK-FP16-GI: // %bb.0: // %entry6244; CHECK-FP16-GI-NEXT: scvtf v0.2s, v0.2s6245; CHECK-FP16-GI-NEXT: fcvtn v0.4h, v0.4s6246; CHECK-FP16-GI-NEXT: ret6247entry:6248 %c = sitofp <2 x i32> %a to <2 x half>6249 ret <2 x half> %c6250}6251 6252define <2 x half> @utofp_v2i32_v2f16(<2 x i32> %a) {6253; CHECK-NOFP16-SD-LABEL: utofp_v2i32_v2f16:6254; CHECK-NOFP16-SD: // %bb.0: // %entry6255; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q06256; CHECK-NOFP16-SD-NEXT: ucvtf v0.4s, v0.4s6257; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v0.4s6258; CHECK-NOFP16-SD-NEXT: ret6259;6260; CHECK-FP16-SD-LABEL: utofp_v2i32_v2f16:6261; CHECK-FP16-SD: // %bb.0: // %entry6262; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q06263; CHECK-FP16-SD-NEXT: ucvtf v0.4s, v0.4s6264; CHECK-FP16-SD-NEXT: fcvtn v0.4h, v0.4s6265; CHECK-FP16-SD-NEXT: ret6266;6267; CHECK-NOFP16-GI-LABEL: utofp_v2i32_v2f16:6268; CHECK-NOFP16-GI: // %bb.0: // %entry6269; CHECK-NOFP16-GI-NEXT: ucvtf v0.2s, v0.2s6270; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s6271; CHECK-NOFP16-GI-NEXT: ret6272;6273; CHECK-FP16-GI-LABEL: utofp_v2i32_v2f16:6274; CHECK-FP16-GI: // %bb.0: // %entry6275; CHECK-FP16-GI-NEXT: ucvtf v0.2s, v0.2s6276; CHECK-FP16-GI-NEXT: fcvtn v0.4h, v0.4s6277; CHECK-FP16-GI-NEXT: ret6278entry:6279 %c = uitofp <2 x i32> %a to <2 x half>6280 ret <2 x half> %c6281}6282 6283define <3 x half> @stofp_v3i32_v3f16(<3 x i32> %a) {6284; CHECK-LABEL: stofp_v3i32_v3f16:6285; CHECK: // %bb.0: // %entry6286; CHECK-NEXT: scvtf v0.4s, v0.4s6287; CHECK-NEXT: fcvtn v0.4h, v0.4s6288; CHECK-NEXT: ret6289entry:6290 %c = sitofp <3 x i32> %a to <3 x half>6291 ret <3 x half> %c6292}6293 6294define <3 x half> @utofp_v3i32_v3f16(<3 x i32> %a) {6295; CHECK-LABEL: utofp_v3i32_v3f16:6296; CHECK: // %bb.0: // %entry6297; CHECK-NEXT: ucvtf v0.4s, v0.4s6298; CHECK-NEXT: fcvtn v0.4h, v0.4s6299; CHECK-NEXT: ret6300entry:6301 %c = uitofp <3 x i32> %a to <3 x half>6302 ret <3 x half> %c6303}6304 6305define <4 x half> @stofp_v4i32_v4f16(<4 x i32> %a) {6306; CHECK-LABEL: stofp_v4i32_v4f16:6307; CHECK: // %bb.0: // %entry6308; CHECK-NEXT: scvtf v0.4s, v0.4s6309; CHECK-NEXT: fcvtn v0.4h, v0.4s6310; CHECK-NEXT: ret6311entry:6312 %c = sitofp <4 x i32> %a to <4 x half>6313 ret <4 x half> %c6314}6315 6316define <4 x half> @utofp_v4i32_v4f16(<4 x i32> %a) {6317; CHECK-LABEL: utofp_v4i32_v4f16:6318; CHECK: // %bb.0: // %entry6319; CHECK-NEXT: ucvtf v0.4s, v0.4s6320; CHECK-NEXT: fcvtn v0.4h, v0.4s6321; CHECK-NEXT: ret6322entry:6323 %c = uitofp <4 x i32> %a to <4 x half>6324 ret <4 x half> %c6325}6326 6327define <8 x half> @stofp_v8i32_v8f16(<8 x i32> %a) {6328; CHECK-LABEL: stofp_v8i32_v8f16:6329; CHECK: // %bb.0: // %entry6330; CHECK-NEXT: scvtf v0.4s, v0.4s6331; CHECK-NEXT: scvtf v1.4s, v1.4s6332; CHECK-NEXT: fcvtn v0.4h, v0.4s6333; CHECK-NEXT: fcvtn2 v0.8h, v1.4s6334; CHECK-NEXT: ret6335entry:6336 %c = sitofp <8 x i32> %a to <8 x half>6337 ret <8 x half> %c6338}6339 6340define <8 x half> @utofp_v8i32_v8f16(<8 x i32> %a) {6341; CHECK-LABEL: utofp_v8i32_v8f16:6342; CHECK: // %bb.0: // %entry6343; CHECK-NEXT: ucvtf v0.4s, v0.4s6344; CHECK-NEXT: ucvtf v1.4s, v1.4s6345; CHECK-NEXT: fcvtn v0.4h, v0.4s6346; CHECK-NEXT: fcvtn2 v0.8h, v1.4s6347; CHECK-NEXT: ret6348entry:6349 %c = uitofp <8 x i32> %a to <8 x half>6350 ret <8 x half> %c6351}6352 6353define <16 x half> @stofp_v16i32_v16f16(<16 x i32> %a) {6354; CHECK-NOFP16-SD-LABEL: stofp_v16i32_v16f16:6355; CHECK-NOFP16-SD: // %bb.0: // %entry6356; CHECK-NOFP16-SD-NEXT: scvtf v0.4s, v0.4s6357; CHECK-NOFP16-SD-NEXT: scvtf v2.4s, v2.4s6358; CHECK-NOFP16-SD-NEXT: scvtf v4.4s, v1.4s6359; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v0.4s6360; CHECK-NOFP16-SD-NEXT: fcvtn v1.4h, v2.4s6361; CHECK-NOFP16-SD-NEXT: scvtf v2.4s, v3.4s6362; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.8h, v4.4s6363; CHECK-NOFP16-SD-NEXT: fcvtn2 v1.8h, v2.4s6364; CHECK-NOFP16-SD-NEXT: ret6365;6366; CHECK-FP16-SD-LABEL: stofp_v16i32_v16f16:6367; CHECK-FP16-SD: // %bb.0: // %entry6368; CHECK-FP16-SD-NEXT: scvtf v0.4s, v0.4s6369; CHECK-FP16-SD-NEXT: scvtf v2.4s, v2.4s6370; CHECK-FP16-SD-NEXT: scvtf v4.4s, v1.4s6371; CHECK-FP16-SD-NEXT: fcvtn v0.4h, v0.4s6372; CHECK-FP16-SD-NEXT: fcvtn v1.4h, v2.4s6373; CHECK-FP16-SD-NEXT: scvtf v2.4s, v3.4s6374; CHECK-FP16-SD-NEXT: fcvtn2 v0.8h, v4.4s6375; CHECK-FP16-SD-NEXT: fcvtn2 v1.8h, v2.4s6376; CHECK-FP16-SD-NEXT: ret6377;6378; CHECK-NOFP16-GI-LABEL: stofp_v16i32_v16f16:6379; CHECK-NOFP16-GI: // %bb.0: // %entry6380; CHECK-NOFP16-GI-NEXT: scvtf v0.4s, v0.4s6381; CHECK-NOFP16-GI-NEXT: scvtf v2.4s, v2.4s6382; CHECK-NOFP16-GI-NEXT: scvtf v4.4s, v1.4s6383; CHECK-NOFP16-GI-NEXT: scvtf v3.4s, v3.4s6384; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s6385; CHECK-NOFP16-GI-NEXT: fcvtn v1.4h, v2.4s6386; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.8h, v4.4s6387; CHECK-NOFP16-GI-NEXT: fcvtn2 v1.8h, v3.4s6388; CHECK-NOFP16-GI-NEXT: ret6389;6390; CHECK-FP16-GI-LABEL: stofp_v16i32_v16f16:6391; CHECK-FP16-GI: // %bb.0: // %entry6392; CHECK-FP16-GI-NEXT: scvtf v0.4s, v0.4s6393; CHECK-FP16-GI-NEXT: scvtf v2.4s, v2.4s6394; CHECK-FP16-GI-NEXT: scvtf v4.4s, v1.4s6395; CHECK-FP16-GI-NEXT: scvtf v3.4s, v3.4s6396; CHECK-FP16-GI-NEXT: fcvtn v0.4h, v0.4s6397; CHECK-FP16-GI-NEXT: fcvtn v1.4h, v2.4s6398; CHECK-FP16-GI-NEXT: fcvtn2 v0.8h, v4.4s6399; CHECK-FP16-GI-NEXT: fcvtn2 v1.8h, v3.4s6400; CHECK-FP16-GI-NEXT: ret6401entry:6402 %c = sitofp <16 x i32> %a to <16 x half>6403 ret <16 x half> %c6404}6405 6406define <16 x half> @utofp_v16i32_v16f16(<16 x i32> %a) {6407; CHECK-NOFP16-SD-LABEL: utofp_v16i32_v16f16:6408; CHECK-NOFP16-SD: // %bb.0: // %entry6409; CHECK-NOFP16-SD-NEXT: ucvtf v0.4s, v0.4s6410; CHECK-NOFP16-SD-NEXT: ucvtf v2.4s, v2.4s6411; CHECK-NOFP16-SD-NEXT: ucvtf v4.4s, v1.4s6412; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v0.4s6413; CHECK-NOFP16-SD-NEXT: fcvtn v1.4h, v2.4s6414; CHECK-NOFP16-SD-NEXT: ucvtf v2.4s, v3.4s6415; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.8h, v4.4s6416; CHECK-NOFP16-SD-NEXT: fcvtn2 v1.8h, v2.4s6417; CHECK-NOFP16-SD-NEXT: ret6418;6419; CHECK-FP16-SD-LABEL: utofp_v16i32_v16f16:6420; CHECK-FP16-SD: // %bb.0: // %entry6421; CHECK-FP16-SD-NEXT: ucvtf v0.4s, v0.4s6422; CHECK-FP16-SD-NEXT: ucvtf v2.4s, v2.4s6423; CHECK-FP16-SD-NEXT: ucvtf v4.4s, v1.4s6424; CHECK-FP16-SD-NEXT: fcvtn v0.4h, v0.4s6425; CHECK-FP16-SD-NEXT: fcvtn v1.4h, v2.4s6426; CHECK-FP16-SD-NEXT: ucvtf v2.4s, v3.4s6427; CHECK-FP16-SD-NEXT: fcvtn2 v0.8h, v4.4s6428; CHECK-FP16-SD-NEXT: fcvtn2 v1.8h, v2.4s6429; CHECK-FP16-SD-NEXT: ret6430;6431; CHECK-NOFP16-GI-LABEL: utofp_v16i32_v16f16:6432; CHECK-NOFP16-GI: // %bb.0: // %entry6433; CHECK-NOFP16-GI-NEXT: ucvtf v0.4s, v0.4s6434; CHECK-NOFP16-GI-NEXT: ucvtf v2.4s, v2.4s6435; CHECK-NOFP16-GI-NEXT: ucvtf v4.4s, v1.4s6436; CHECK-NOFP16-GI-NEXT: ucvtf v3.4s, v3.4s6437; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s6438; CHECK-NOFP16-GI-NEXT: fcvtn v1.4h, v2.4s6439; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.8h, v4.4s6440; CHECK-NOFP16-GI-NEXT: fcvtn2 v1.8h, v3.4s6441; CHECK-NOFP16-GI-NEXT: ret6442;6443; CHECK-FP16-GI-LABEL: utofp_v16i32_v16f16:6444; CHECK-FP16-GI: // %bb.0: // %entry6445; CHECK-FP16-GI-NEXT: ucvtf v0.4s, v0.4s6446; CHECK-FP16-GI-NEXT: ucvtf v2.4s, v2.4s6447; CHECK-FP16-GI-NEXT: ucvtf v4.4s, v1.4s6448; CHECK-FP16-GI-NEXT: ucvtf v3.4s, v3.4s6449; CHECK-FP16-GI-NEXT: fcvtn v0.4h, v0.4s6450; CHECK-FP16-GI-NEXT: fcvtn v1.4h, v2.4s6451; CHECK-FP16-GI-NEXT: fcvtn2 v0.8h, v4.4s6452; CHECK-FP16-GI-NEXT: fcvtn2 v1.8h, v3.4s6453; CHECK-FP16-GI-NEXT: ret6454entry:6455 %c = uitofp <16 x i32> %a to <16 x half>6456 ret <16 x half> %c6457}6458 6459define <2 x half> @stofp_v2i16_v2f16(<2 x i16> %a) {6460; CHECK-NOFP16-SD-LABEL: stofp_v2i16_v2f16:6461; CHECK-NOFP16-SD: // %bb.0: // %entry6462; CHECK-NOFP16-SD-NEXT: uzp1 v0.4h, v0.4h, v0.4h6463; CHECK-NOFP16-SD-NEXT: sshll v0.4s, v0.4h, #06464; CHECK-NOFP16-SD-NEXT: scvtf v0.4s, v0.4s6465; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v0.4s6466; CHECK-NOFP16-SD-NEXT: ret6467;6468; CHECK-FP16-LABEL: stofp_v2i16_v2f16:6469; CHECK-FP16: // %bb.0: // %entry6470; CHECK-FP16-NEXT: uzp1 v0.4h, v0.4h, v0.4h6471; CHECK-FP16-NEXT: scvtf v0.4h, v0.4h6472; CHECK-FP16-NEXT: ret6473;6474; CHECK-NOFP16-GI-LABEL: stofp_v2i16_v2f16:6475; CHECK-NOFP16-GI: // %bb.0: // %entry6476; CHECK-NOFP16-GI-NEXT: shl v0.2s, v0.2s, #166477; CHECK-NOFP16-GI-NEXT: sshr v0.2s, v0.2s, #166478; CHECK-NOFP16-GI-NEXT: scvtf v0.2s, v0.2s6479; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s6480; CHECK-NOFP16-GI-NEXT: ret6481entry:6482 %c = sitofp <2 x i16> %a to <2 x half>6483 ret <2 x half> %c6484}6485 6486define <2 x half> @utofp_v2i16_v2f16(<2 x i16> %a) {6487; CHECK-NOFP16-SD-LABEL: utofp_v2i16_v2f16:6488; CHECK-NOFP16-SD: // %bb.0: // %entry6489; CHECK-NOFP16-SD-NEXT: uzp1 v0.4h, v0.4h, v0.4h6490; CHECK-NOFP16-SD-NEXT: ushll v0.4s, v0.4h, #06491; CHECK-NOFP16-SD-NEXT: ucvtf v0.4s, v0.4s6492; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v0.4s6493; CHECK-NOFP16-SD-NEXT: ret6494;6495; CHECK-FP16-LABEL: utofp_v2i16_v2f16:6496; CHECK-FP16: // %bb.0: // %entry6497; CHECK-FP16-NEXT: uzp1 v0.4h, v0.4h, v0.4h6498; CHECK-FP16-NEXT: ucvtf v0.4h, v0.4h6499; CHECK-FP16-NEXT: ret6500;6501; CHECK-NOFP16-GI-LABEL: utofp_v2i16_v2f16:6502; CHECK-NOFP16-GI: // %bb.0: // %entry6503; CHECK-NOFP16-GI-NEXT: movi d1, #0x00ffff0000ffff6504; CHECK-NOFP16-GI-NEXT: and v0.8b, v0.8b, v1.8b6505; CHECK-NOFP16-GI-NEXT: ucvtf v0.2s, v0.2s6506; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s6507; CHECK-NOFP16-GI-NEXT: ret6508entry:6509 %c = uitofp <2 x i16> %a to <2 x half>6510 ret <2 x half> %c6511}6512 6513define <3 x half> @stofp_v3i16_v3f16(<3 x i16> %a) {6514; CHECK-NOFP16-LABEL: stofp_v3i16_v3f16:6515; CHECK-NOFP16: // %bb.0: // %entry6516; CHECK-NOFP16-NEXT: sshll v0.4s, v0.4h, #06517; CHECK-NOFP16-NEXT: scvtf v0.4s, v0.4s6518; CHECK-NOFP16-NEXT: fcvtn v0.4h, v0.4s6519; CHECK-NOFP16-NEXT: ret6520;6521; CHECK-FP16-LABEL: stofp_v3i16_v3f16:6522; CHECK-FP16: // %bb.0: // %entry6523; CHECK-FP16-NEXT: scvtf v0.4h, v0.4h6524; CHECK-FP16-NEXT: ret6525entry:6526 %c = sitofp <3 x i16> %a to <3 x half>6527 ret <3 x half> %c6528}6529 6530define <3 x half> @utofp_v3i16_v3f16(<3 x i16> %a) {6531; CHECK-NOFP16-LABEL: utofp_v3i16_v3f16:6532; CHECK-NOFP16: // %bb.0: // %entry6533; CHECK-NOFP16-NEXT: ushll v0.4s, v0.4h, #06534; CHECK-NOFP16-NEXT: ucvtf v0.4s, v0.4s6535; CHECK-NOFP16-NEXT: fcvtn v0.4h, v0.4s6536; CHECK-NOFP16-NEXT: ret6537;6538; CHECK-FP16-LABEL: utofp_v3i16_v3f16:6539; CHECK-FP16: // %bb.0: // %entry6540; CHECK-FP16-NEXT: ucvtf v0.4h, v0.4h6541; CHECK-FP16-NEXT: ret6542entry:6543 %c = uitofp <3 x i16> %a to <3 x half>6544 ret <3 x half> %c6545}6546 6547define <4 x half> @stofp_v4i16_v4f16(<4 x i16> %a) {6548; CHECK-NOFP16-LABEL: stofp_v4i16_v4f16:6549; CHECK-NOFP16: // %bb.0: // %entry6550; CHECK-NOFP16-NEXT: sshll v0.4s, v0.4h, #06551; CHECK-NOFP16-NEXT: scvtf v0.4s, v0.4s6552; CHECK-NOFP16-NEXT: fcvtn v0.4h, v0.4s6553; CHECK-NOFP16-NEXT: ret6554;6555; CHECK-FP16-LABEL: stofp_v4i16_v4f16:6556; CHECK-FP16: // %bb.0: // %entry6557; CHECK-FP16-NEXT: scvtf v0.4h, v0.4h6558; CHECK-FP16-NEXT: ret6559entry:6560 %c = sitofp <4 x i16> %a to <4 x half>6561 ret <4 x half> %c6562}6563 6564define <4 x half> @utofp_v4i16_v4f16(<4 x i16> %a) {6565; CHECK-NOFP16-LABEL: utofp_v4i16_v4f16:6566; CHECK-NOFP16: // %bb.0: // %entry6567; CHECK-NOFP16-NEXT: ushll v0.4s, v0.4h, #06568; CHECK-NOFP16-NEXT: ucvtf v0.4s, v0.4s6569; CHECK-NOFP16-NEXT: fcvtn v0.4h, v0.4s6570; CHECK-NOFP16-NEXT: ret6571;6572; CHECK-FP16-LABEL: utofp_v4i16_v4f16:6573; CHECK-FP16: // %bb.0: // %entry6574; CHECK-FP16-NEXT: ucvtf v0.4h, v0.4h6575; CHECK-FP16-NEXT: ret6576entry:6577 %c = uitofp <4 x i16> %a to <4 x half>6578 ret <4 x half> %c6579}6580 6581define <8 x half> @stofp_v8i16_v8f16(<8 x i16> %a) {6582; CHECK-NOFP16-SD-LABEL: stofp_v8i16_v8f16:6583; CHECK-NOFP16-SD: // %bb.0: // %entry6584; CHECK-NOFP16-SD-NEXT: sshll v1.4s, v0.4h, #06585; CHECK-NOFP16-SD-NEXT: sshll2 v2.4s, v0.8h, #06586; CHECK-NOFP16-SD-NEXT: scvtf v1.4s, v1.4s6587; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v1.4s6588; CHECK-NOFP16-SD-NEXT: scvtf v1.4s, v2.4s6589; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.8h, v1.4s6590; CHECK-NOFP16-SD-NEXT: ret6591;6592; CHECK-FP16-LABEL: stofp_v8i16_v8f16:6593; CHECK-FP16: // %bb.0: // %entry6594; CHECK-FP16-NEXT: scvtf v0.8h, v0.8h6595; CHECK-FP16-NEXT: ret6596;6597; CHECK-NOFP16-GI-LABEL: stofp_v8i16_v8f16:6598; CHECK-NOFP16-GI: // %bb.0: // %entry6599; CHECK-NOFP16-GI-NEXT: sshll v1.4s, v0.4h, #06600; CHECK-NOFP16-GI-NEXT: sshll2 v0.4s, v0.8h, #06601; CHECK-NOFP16-GI-NEXT: scvtf v1.4s, v1.4s6602; CHECK-NOFP16-GI-NEXT: scvtf v2.4s, v0.4s6603; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v1.4s6604; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.8h, v2.4s6605; CHECK-NOFP16-GI-NEXT: ret6606entry:6607 %c = sitofp <8 x i16> %a to <8 x half>6608 ret <8 x half> %c6609}6610 6611define <8 x half> @utofp_v8i16_v8f16(<8 x i16> %a) {6612; CHECK-NOFP16-SD-LABEL: utofp_v8i16_v8f16:6613; CHECK-NOFP16-SD: // %bb.0: // %entry6614; CHECK-NOFP16-SD-NEXT: ushll v1.4s, v0.4h, #06615; CHECK-NOFP16-SD-NEXT: ushll2 v2.4s, v0.8h, #06616; CHECK-NOFP16-SD-NEXT: ucvtf v1.4s, v1.4s6617; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v1.4s6618; CHECK-NOFP16-SD-NEXT: ucvtf v1.4s, v2.4s6619; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.8h, v1.4s6620; CHECK-NOFP16-SD-NEXT: ret6621;6622; CHECK-FP16-LABEL: utofp_v8i16_v8f16:6623; CHECK-FP16: // %bb.0: // %entry6624; CHECK-FP16-NEXT: ucvtf v0.8h, v0.8h6625; CHECK-FP16-NEXT: ret6626;6627; CHECK-NOFP16-GI-LABEL: utofp_v8i16_v8f16:6628; CHECK-NOFP16-GI: // %bb.0: // %entry6629; CHECK-NOFP16-GI-NEXT: ushll v1.4s, v0.4h, #06630; CHECK-NOFP16-GI-NEXT: ushll2 v0.4s, v0.8h, #06631; CHECK-NOFP16-GI-NEXT: ucvtf v1.4s, v1.4s6632; CHECK-NOFP16-GI-NEXT: ucvtf v2.4s, v0.4s6633; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v1.4s6634; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.8h, v2.4s6635; CHECK-NOFP16-GI-NEXT: ret6636entry:6637 %c = uitofp <8 x i16> %a to <8 x half>6638 ret <8 x half> %c6639}6640 6641define <16 x half> @stofp_v16i16_v16f16(<16 x i16> %a) {6642; CHECK-NOFP16-SD-LABEL: stofp_v16i16_v16f16:6643; CHECK-NOFP16-SD: // %bb.0: // %entry6644; CHECK-NOFP16-SD-NEXT: sshll v2.4s, v0.4h, #06645; CHECK-NOFP16-SD-NEXT: sshll v3.4s, v1.4h, #06646; CHECK-NOFP16-SD-NEXT: sshll2 v4.4s, v0.8h, #06647; CHECK-NOFP16-SD-NEXT: sshll2 v5.4s, v1.8h, #06648; CHECK-NOFP16-SD-NEXT: scvtf v2.4s, v2.4s6649; CHECK-NOFP16-SD-NEXT: scvtf v3.4s, v3.4s6650; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v2.4s6651; CHECK-NOFP16-SD-NEXT: scvtf v2.4s, v4.4s6652; CHECK-NOFP16-SD-NEXT: fcvtn v1.4h, v3.4s6653; CHECK-NOFP16-SD-NEXT: scvtf v3.4s, v5.4s6654; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.8h, v2.4s6655; CHECK-NOFP16-SD-NEXT: fcvtn2 v1.8h, v3.4s6656; CHECK-NOFP16-SD-NEXT: ret6657;6658; CHECK-FP16-LABEL: stofp_v16i16_v16f16:6659; CHECK-FP16: // %bb.0: // %entry6660; CHECK-FP16-NEXT: scvtf v0.8h, v0.8h6661; CHECK-FP16-NEXT: scvtf v1.8h, v1.8h6662; CHECK-FP16-NEXT: ret6663;6664; CHECK-NOFP16-GI-LABEL: stofp_v16i16_v16f16:6665; CHECK-NOFP16-GI: // %bb.0: // %entry6666; CHECK-NOFP16-GI-NEXT: sshll v2.4s, v0.4h, #06667; CHECK-NOFP16-GI-NEXT: sshll v3.4s, v1.4h, #06668; CHECK-NOFP16-GI-NEXT: sshll2 v0.4s, v0.8h, #06669; CHECK-NOFP16-GI-NEXT: sshll2 v1.4s, v1.8h, #06670; CHECK-NOFP16-GI-NEXT: scvtf v2.4s, v2.4s6671; CHECK-NOFP16-GI-NEXT: scvtf v3.4s, v3.4s6672; CHECK-NOFP16-GI-NEXT: scvtf v4.4s, v0.4s6673; CHECK-NOFP16-GI-NEXT: scvtf v5.4s, v1.4s6674; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v2.4s6675; CHECK-NOFP16-GI-NEXT: fcvtn v1.4h, v3.4s6676; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.8h, v4.4s6677; CHECK-NOFP16-GI-NEXT: fcvtn2 v1.8h, v5.4s6678; CHECK-NOFP16-GI-NEXT: ret6679entry:6680 %c = sitofp <16 x i16> %a to <16 x half>6681 ret <16 x half> %c6682}6683 6684define <16 x half> @utofp_v16i16_v16f16(<16 x i16> %a) {6685; CHECK-NOFP16-SD-LABEL: utofp_v16i16_v16f16:6686; CHECK-NOFP16-SD: // %bb.0: // %entry6687; CHECK-NOFP16-SD-NEXT: ushll v2.4s, v0.4h, #06688; CHECK-NOFP16-SD-NEXT: ushll v3.4s, v1.4h, #06689; CHECK-NOFP16-SD-NEXT: ushll2 v4.4s, v0.8h, #06690; CHECK-NOFP16-SD-NEXT: ushll2 v5.4s, v1.8h, #06691; CHECK-NOFP16-SD-NEXT: ucvtf v2.4s, v2.4s6692; CHECK-NOFP16-SD-NEXT: ucvtf v3.4s, v3.4s6693; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v2.4s6694; CHECK-NOFP16-SD-NEXT: ucvtf v2.4s, v4.4s6695; CHECK-NOFP16-SD-NEXT: fcvtn v1.4h, v3.4s6696; CHECK-NOFP16-SD-NEXT: ucvtf v3.4s, v5.4s6697; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.8h, v2.4s6698; CHECK-NOFP16-SD-NEXT: fcvtn2 v1.8h, v3.4s6699; CHECK-NOFP16-SD-NEXT: ret6700;6701; CHECK-FP16-LABEL: utofp_v16i16_v16f16:6702; CHECK-FP16: // %bb.0: // %entry6703; CHECK-FP16-NEXT: ucvtf v0.8h, v0.8h6704; CHECK-FP16-NEXT: ucvtf v1.8h, v1.8h6705; CHECK-FP16-NEXT: ret6706;6707; CHECK-NOFP16-GI-LABEL: utofp_v16i16_v16f16:6708; CHECK-NOFP16-GI: // %bb.0: // %entry6709; CHECK-NOFP16-GI-NEXT: ushll v2.4s, v0.4h, #06710; CHECK-NOFP16-GI-NEXT: ushll v3.4s, v1.4h, #06711; CHECK-NOFP16-GI-NEXT: ushll2 v0.4s, v0.8h, #06712; CHECK-NOFP16-GI-NEXT: ushll2 v1.4s, v1.8h, #06713; CHECK-NOFP16-GI-NEXT: ucvtf v2.4s, v2.4s6714; CHECK-NOFP16-GI-NEXT: ucvtf v3.4s, v3.4s6715; CHECK-NOFP16-GI-NEXT: ucvtf v4.4s, v0.4s6716; CHECK-NOFP16-GI-NEXT: ucvtf v5.4s, v1.4s6717; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v2.4s6718; CHECK-NOFP16-GI-NEXT: fcvtn v1.4h, v3.4s6719; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.8h, v4.4s6720; CHECK-NOFP16-GI-NEXT: fcvtn2 v1.8h, v5.4s6721; CHECK-NOFP16-GI-NEXT: ret6722entry:6723 %c = uitofp <16 x i16> %a to <16 x half>6724 ret <16 x half> %c6725}6726 6727define <2 x half> @stofp_v2i8_v2f16(<2 x i8> %a) {6728; CHECK-NOFP16-SD-LABEL: stofp_v2i8_v2f16:6729; CHECK-NOFP16-SD: // %bb.0: // %entry6730; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q06731; CHECK-NOFP16-SD-NEXT: mov w8, v0.s[1]6732; CHECK-NOFP16-SD-NEXT: fmov w9, s06733; CHECK-NOFP16-SD-NEXT: sxtb w9, w96734; CHECK-NOFP16-SD-NEXT: sxtb w8, w86735; CHECK-NOFP16-SD-NEXT: scvtf s1, w96736; CHECK-NOFP16-SD-NEXT: scvtf s0, w86737; CHECK-NOFP16-SD-NEXT: fcvt h2, s06738; CHECK-NOFP16-SD-NEXT: fcvt h0, s16739; CHECK-NOFP16-SD-NEXT: mov v0.h[1], v2.h[0]6740; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q06741; CHECK-NOFP16-SD-NEXT: ret6742;6743; CHECK-FP16-SD-LABEL: stofp_v2i8_v2f16:6744; CHECK-FP16-SD: // %bb.0: // %entry6745; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q06746; CHECK-FP16-SD-NEXT: mov w8, v0.s[1]6747; CHECK-FP16-SD-NEXT: fmov w9, s06748; CHECK-FP16-SD-NEXT: sxtb w9, w96749; CHECK-FP16-SD-NEXT: sxtb w8, w86750; CHECK-FP16-SD-NEXT: scvtf h0, w96751; CHECK-FP16-SD-NEXT: scvtf h1, w86752; CHECK-FP16-SD-NEXT: mov v0.h[1], v1.h[0]6753; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q06754; CHECK-FP16-SD-NEXT: ret6755;6756; CHECK-NOFP16-GI-LABEL: stofp_v2i8_v2f16:6757; CHECK-NOFP16-GI: // %bb.0: // %entry6758; CHECK-NOFP16-GI-NEXT: shl v0.2s, v0.2s, #246759; CHECK-NOFP16-GI-NEXT: sshr v0.2s, v0.2s, #246760; CHECK-NOFP16-GI-NEXT: scvtf v0.2s, v0.2s6761; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s6762; CHECK-NOFP16-GI-NEXT: ret6763;6764; CHECK-FP16-GI-LABEL: stofp_v2i8_v2f16:6765; CHECK-FP16-GI: // %bb.0: // %entry6766; CHECK-FP16-GI-NEXT: uzp1 v0.4h, v0.4h, v0.4h6767; CHECK-FP16-GI-NEXT: shl v0.4h, v0.4h, #86768; CHECK-FP16-GI-NEXT: sshr v0.4h, v0.4h, #86769; CHECK-FP16-GI-NEXT: scvtf v0.4h, v0.4h6770; CHECK-FP16-GI-NEXT: ret6771entry:6772 %c = sitofp <2 x i8> %a to <2 x half>6773 ret <2 x half> %c6774}6775 6776define <2 x half> @utofp_v2i8_v2f16(<2 x i8> %a) {6777; CHECK-NOFP16-SD-LABEL: utofp_v2i8_v2f16:6778; CHECK-NOFP16-SD: // %bb.0: // %entry6779; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q06780; CHECK-NOFP16-SD-NEXT: mov w8, v0.s[1]6781; CHECK-NOFP16-SD-NEXT: fmov w9, s06782; CHECK-NOFP16-SD-NEXT: and w9, w9, #0xff6783; CHECK-NOFP16-SD-NEXT: and w8, w8, #0xff6784; CHECK-NOFP16-SD-NEXT: ucvtf s1, w96785; CHECK-NOFP16-SD-NEXT: ucvtf s0, w86786; CHECK-NOFP16-SD-NEXT: fcvt h2, s06787; CHECK-NOFP16-SD-NEXT: fcvt h0, s16788; CHECK-NOFP16-SD-NEXT: mov v0.h[1], v2.h[0]6789; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q06790; CHECK-NOFP16-SD-NEXT: ret6791;6792; CHECK-FP16-SD-LABEL: utofp_v2i8_v2f16:6793; CHECK-FP16-SD: // %bb.0: // %entry6794; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q06795; CHECK-FP16-SD-NEXT: mov w8, v0.s[1]6796; CHECK-FP16-SD-NEXT: fmov w9, s06797; CHECK-FP16-SD-NEXT: and w9, w9, #0xff6798; CHECK-FP16-SD-NEXT: and w8, w8, #0xff6799; CHECK-FP16-SD-NEXT: ucvtf h0, w96800; CHECK-FP16-SD-NEXT: ucvtf h1, w86801; CHECK-FP16-SD-NEXT: mov v0.h[1], v1.h[0]6802; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q06803; CHECK-FP16-SD-NEXT: ret6804;6805; CHECK-NOFP16-GI-LABEL: utofp_v2i8_v2f16:6806; CHECK-NOFP16-GI: // %bb.0: // %entry6807; CHECK-NOFP16-GI-NEXT: movi d1, #0x0000ff000000ff6808; CHECK-NOFP16-GI-NEXT: and v0.8b, v0.8b, v1.8b6809; CHECK-NOFP16-GI-NEXT: ucvtf v0.2s, v0.2s6810; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s6811; CHECK-NOFP16-GI-NEXT: ret6812;6813; CHECK-FP16-GI-LABEL: utofp_v2i8_v2f16:6814; CHECK-FP16-GI: // %bb.0: // %entry6815; CHECK-FP16-GI-NEXT: movi d1, #0x0000ff000000ff6816; CHECK-FP16-GI-NEXT: and v0.8b, v0.8b, v1.8b6817; CHECK-FP16-GI-NEXT: uzp1 v0.4h, v0.4h, v0.4h6818; CHECK-FP16-GI-NEXT: ucvtf v0.4h, v0.4h6819; CHECK-FP16-GI-NEXT: ret6820entry:6821 %c = uitofp <2 x i8> %a to <2 x half>6822 ret <2 x half> %c6823}6824 6825define <3 x half> @stofp_v3i8_v3f16(<3 x i8> %a) {6826; CHECK-NOFP16-SD-LABEL: stofp_v3i8_v3f16:6827; CHECK-NOFP16-SD: // %bb.0: // %entry6828; CHECK-NOFP16-SD-NEXT: fmov s0, w06829; CHECK-NOFP16-SD-NEXT: mov v0.h[1], w16830; CHECK-NOFP16-SD-NEXT: mov v0.h[2], w26831; CHECK-NOFP16-SD-NEXT: shl v0.4h, v0.4h, #86832; CHECK-NOFP16-SD-NEXT: sshr v0.4h, v0.4h, #86833; CHECK-NOFP16-SD-NEXT: sshll v0.4s, v0.4h, #06834; CHECK-NOFP16-SD-NEXT: scvtf v0.4s, v0.4s6835; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v0.4s6836; CHECK-NOFP16-SD-NEXT: ret6837;6838; CHECK-FP16-SD-LABEL: stofp_v3i8_v3f16:6839; CHECK-FP16-SD: // %bb.0: // %entry6840; CHECK-FP16-SD-NEXT: fmov s0, w06841; CHECK-FP16-SD-NEXT: mov v0.h[1], w16842; CHECK-FP16-SD-NEXT: mov v0.h[2], w26843; CHECK-FP16-SD-NEXT: shl v0.4h, v0.4h, #86844; CHECK-FP16-SD-NEXT: sshr v0.4h, v0.4h, #86845; CHECK-FP16-SD-NEXT: scvtf v0.4h, v0.4h6846; CHECK-FP16-SD-NEXT: ret6847;6848; CHECK-NOFP16-GI-LABEL: stofp_v3i8_v3f16:6849; CHECK-NOFP16-GI: // %bb.0: // %entry6850; CHECK-NOFP16-GI-NEXT: fmov s0, w06851; CHECK-NOFP16-GI-NEXT: mov v0.h[1], w16852; CHECK-NOFP16-GI-NEXT: mov v0.h[2], w26853; CHECK-NOFP16-GI-NEXT: shl v0.4h, v0.4h, #86854; CHECK-NOFP16-GI-NEXT: sshr v0.4h, v0.4h, #86855; CHECK-NOFP16-GI-NEXT: mov v1.h[0], v0.h[2]6856; CHECK-NOFP16-GI-NEXT: mov v1.h[1], v0.h[3]6857; CHECK-NOFP16-GI-NEXT: sshll v0.4s, v0.4h, #06858; CHECK-NOFP16-GI-NEXT: sshll v1.4s, v1.4h, #06859; CHECK-NOFP16-GI-NEXT: mov v0.d[1], v1.d[0]6860; CHECK-NOFP16-GI-NEXT: scvtf v0.4s, v0.4s6861; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s6862; CHECK-NOFP16-GI-NEXT: ret6863;6864; CHECK-FP16-GI-LABEL: stofp_v3i8_v3f16:6865; CHECK-FP16-GI: // %bb.0: // %entry6866; CHECK-FP16-GI-NEXT: fmov s0, w06867; CHECK-FP16-GI-NEXT: mov v0.b[1], w16868; CHECK-FP16-GI-NEXT: mov v0.b[2], w26869; CHECK-FP16-GI-NEXT: sshll v0.8h, v0.8b, #06870; CHECK-FP16-GI-NEXT: scvtf v0.4h, v0.4h6871; CHECK-FP16-GI-NEXT: ret6872entry:6873 %c = sitofp <3 x i8> %a to <3 x half>6874 ret <3 x half> %c6875}6876 6877define <3 x half> @utofp_v3i8_v3f16(<3 x i8> %a) {6878; CHECK-NOFP16-SD-LABEL: utofp_v3i8_v3f16:6879; CHECK-NOFP16-SD: // %bb.0: // %entry6880; CHECK-NOFP16-SD-NEXT: fmov s0, w06881; CHECK-NOFP16-SD-NEXT: mov v0.h[1], w16882; CHECK-NOFP16-SD-NEXT: mov v0.h[2], w26883; CHECK-NOFP16-SD-NEXT: bic v0.4h, #255, lsl #86884; CHECK-NOFP16-SD-NEXT: ushll v0.4s, v0.4h, #06885; CHECK-NOFP16-SD-NEXT: ucvtf v0.4s, v0.4s6886; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v0.4s6887; CHECK-NOFP16-SD-NEXT: ret6888;6889; CHECK-FP16-SD-LABEL: utofp_v3i8_v3f16:6890; CHECK-FP16-SD: // %bb.0: // %entry6891; CHECK-FP16-SD-NEXT: fmov s0, w06892; CHECK-FP16-SD-NEXT: mov v0.h[1], w16893; CHECK-FP16-SD-NEXT: mov v0.h[2], w26894; CHECK-FP16-SD-NEXT: bic v0.4h, #255, lsl #86895; CHECK-FP16-SD-NEXT: ucvtf v0.4h, v0.4h6896; CHECK-FP16-SD-NEXT: ret6897;6898; CHECK-NOFP16-GI-LABEL: utofp_v3i8_v3f16:6899; CHECK-NOFP16-GI: // %bb.0: // %entry6900; CHECK-NOFP16-GI-NEXT: fmov s0, w06901; CHECK-NOFP16-GI-NEXT: movi d1, #0xff00ff00ff00ff6902; CHECK-NOFP16-GI-NEXT: mov v0.h[1], w16903; CHECK-NOFP16-GI-NEXT: mov v0.h[2], w26904; CHECK-NOFP16-GI-NEXT: and v0.8b, v0.8b, v1.8b6905; CHECK-NOFP16-GI-NEXT: mov v1.h[0], v0.h[2]6906; CHECK-NOFP16-GI-NEXT: mov v1.h[1], v0.h[3]6907; CHECK-NOFP16-GI-NEXT: ushll v0.4s, v0.4h, #06908; CHECK-NOFP16-GI-NEXT: ushll v1.4s, v1.4h, #06909; CHECK-NOFP16-GI-NEXT: mov v0.d[1], v1.d[0]6910; CHECK-NOFP16-GI-NEXT: ucvtf v0.4s, v0.4s6911; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s6912; CHECK-NOFP16-GI-NEXT: ret6913;6914; CHECK-FP16-GI-LABEL: utofp_v3i8_v3f16:6915; CHECK-FP16-GI: // %bb.0: // %entry6916; CHECK-FP16-GI-NEXT: fmov s0, w06917; CHECK-FP16-GI-NEXT: mov v0.b[1], w16918; CHECK-FP16-GI-NEXT: mov v0.b[2], w26919; CHECK-FP16-GI-NEXT: ushll v0.8h, v0.8b, #06920; CHECK-FP16-GI-NEXT: ucvtf v0.4h, v0.4h6921; CHECK-FP16-GI-NEXT: ret6922entry:6923 %c = uitofp <3 x i8> %a to <3 x half>6924 ret <3 x half> %c6925}6926 6927define <4 x half> @stofp_v4i8_v4f16(<4 x i8> %a) {6928; CHECK-NOFP16-SD-LABEL: stofp_v4i8_v4f16:6929; CHECK-NOFP16-SD: // %bb.0: // %entry6930; CHECK-NOFP16-SD-NEXT: shl v0.4h, v0.4h, #86931; CHECK-NOFP16-SD-NEXT: sshr v0.4h, v0.4h, #86932; CHECK-NOFP16-SD-NEXT: sshll v0.4s, v0.4h, #06933; CHECK-NOFP16-SD-NEXT: scvtf v0.4s, v0.4s6934; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v0.4s6935; CHECK-NOFP16-SD-NEXT: ret6936;6937; CHECK-FP16-LABEL: stofp_v4i8_v4f16:6938; CHECK-FP16: // %bb.0: // %entry6939; CHECK-FP16-NEXT: shl v0.4h, v0.4h, #86940; CHECK-FP16-NEXT: sshr v0.4h, v0.4h, #86941; CHECK-FP16-NEXT: scvtf v0.4h, v0.4h6942; CHECK-FP16-NEXT: ret6943;6944; CHECK-NOFP16-GI-LABEL: stofp_v4i8_v4f16:6945; CHECK-NOFP16-GI: // %bb.0: // %entry6946; CHECK-NOFP16-GI-NEXT: ushll v0.4s, v0.4h, #06947; CHECK-NOFP16-GI-NEXT: shl v0.4s, v0.4s, #246948; CHECK-NOFP16-GI-NEXT: sshr v0.4s, v0.4s, #246949; CHECK-NOFP16-GI-NEXT: scvtf v0.4s, v0.4s6950; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s6951; CHECK-NOFP16-GI-NEXT: ret6952entry:6953 %c = sitofp <4 x i8> %a to <4 x half>6954 ret <4 x half> %c6955}6956 6957define <4 x half> @utofp_v4i8_v4f16(<4 x i8> %a) {6958; CHECK-NOFP16-SD-LABEL: utofp_v4i8_v4f16:6959; CHECK-NOFP16-SD: // %bb.0: // %entry6960; CHECK-NOFP16-SD-NEXT: bic v0.4h, #255, lsl #86961; CHECK-NOFP16-SD-NEXT: ushll v0.4s, v0.4h, #06962; CHECK-NOFP16-SD-NEXT: ucvtf v0.4s, v0.4s6963; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v0.4s6964; CHECK-NOFP16-SD-NEXT: ret6965;6966; CHECK-FP16-SD-LABEL: utofp_v4i8_v4f16:6967; CHECK-FP16-SD: // %bb.0: // %entry6968; CHECK-FP16-SD-NEXT: bic v0.4h, #255, lsl #86969; CHECK-FP16-SD-NEXT: ucvtf v0.4h, v0.4h6970; CHECK-FP16-SD-NEXT: ret6971;6972; CHECK-NOFP16-GI-LABEL: utofp_v4i8_v4f16:6973; CHECK-NOFP16-GI: // %bb.0: // %entry6974; CHECK-NOFP16-GI-NEXT: movi v1.2d, #0x0000ff000000ff6975; CHECK-NOFP16-GI-NEXT: ushll v0.4s, v0.4h, #06976; CHECK-NOFP16-GI-NEXT: and v0.16b, v0.16b, v1.16b6977; CHECK-NOFP16-GI-NEXT: ucvtf v0.4s, v0.4s6978; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v0.4s6979; CHECK-NOFP16-GI-NEXT: ret6980;6981; CHECK-FP16-GI-LABEL: utofp_v4i8_v4f16:6982; CHECK-FP16-GI: // %bb.0: // %entry6983; CHECK-FP16-GI-NEXT: movi d1, #0xff00ff00ff00ff6984; CHECK-FP16-GI-NEXT: and v0.8b, v0.8b, v1.8b6985; CHECK-FP16-GI-NEXT: ucvtf v0.4h, v0.4h6986; CHECK-FP16-GI-NEXT: ret6987entry:6988 %c = uitofp <4 x i8> %a to <4 x half>6989 ret <4 x half> %c6990}6991 6992define <8 x half> @stofp_v8i8_v8f16(<8 x i8> %a) {6993; CHECK-NOFP16-SD-LABEL: stofp_v8i8_v8f16:6994; CHECK-NOFP16-SD: // %bb.0: // %entry6995; CHECK-NOFP16-SD-NEXT: sshll v0.8h, v0.8b, #06996; CHECK-NOFP16-SD-NEXT: sshll v1.4s, v0.4h, #06997; CHECK-NOFP16-SD-NEXT: sshll2 v2.4s, v0.8h, #06998; CHECK-NOFP16-SD-NEXT: scvtf v1.4s, v1.4s6999; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v1.4s7000; CHECK-NOFP16-SD-NEXT: scvtf v1.4s, v2.4s7001; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.8h, v1.4s7002; CHECK-NOFP16-SD-NEXT: ret7003;7004; CHECK-FP16-LABEL: stofp_v8i8_v8f16:7005; CHECK-FP16: // %bb.0: // %entry7006; CHECK-FP16-NEXT: sshll v0.8h, v0.8b, #07007; CHECK-FP16-NEXT: scvtf v0.8h, v0.8h7008; CHECK-FP16-NEXT: ret7009;7010; CHECK-NOFP16-GI-LABEL: stofp_v8i8_v8f16:7011; CHECK-NOFP16-GI: // %bb.0: // %entry7012; CHECK-NOFP16-GI-NEXT: sshll v0.8h, v0.8b, #07013; CHECK-NOFP16-GI-NEXT: sshll v1.4s, v0.4h, #07014; CHECK-NOFP16-GI-NEXT: sshll2 v0.4s, v0.8h, #07015; CHECK-NOFP16-GI-NEXT: scvtf v1.4s, v1.4s7016; CHECK-NOFP16-GI-NEXT: scvtf v2.4s, v0.4s7017; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v1.4s7018; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.8h, v2.4s7019; CHECK-NOFP16-GI-NEXT: ret7020entry:7021 %c = sitofp <8 x i8> %a to <8 x half>7022 ret <8 x half> %c7023}7024 7025define <8 x half> @utofp_v8i8_v8f16(<8 x i8> %a) {7026; CHECK-NOFP16-SD-LABEL: utofp_v8i8_v8f16:7027; CHECK-NOFP16-SD: // %bb.0: // %entry7028; CHECK-NOFP16-SD-NEXT: ushll v0.8h, v0.8b, #07029; CHECK-NOFP16-SD-NEXT: ushll v1.4s, v0.4h, #07030; CHECK-NOFP16-SD-NEXT: ushll2 v2.4s, v0.8h, #07031; CHECK-NOFP16-SD-NEXT: ucvtf v1.4s, v1.4s7032; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v1.4s7033; CHECK-NOFP16-SD-NEXT: ucvtf v1.4s, v2.4s7034; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.8h, v1.4s7035; CHECK-NOFP16-SD-NEXT: ret7036;7037; CHECK-FP16-LABEL: utofp_v8i8_v8f16:7038; CHECK-FP16: // %bb.0: // %entry7039; CHECK-FP16-NEXT: ushll v0.8h, v0.8b, #07040; CHECK-FP16-NEXT: ucvtf v0.8h, v0.8h7041; CHECK-FP16-NEXT: ret7042;7043; CHECK-NOFP16-GI-LABEL: utofp_v8i8_v8f16:7044; CHECK-NOFP16-GI: // %bb.0: // %entry7045; CHECK-NOFP16-GI-NEXT: ushll v0.8h, v0.8b, #07046; CHECK-NOFP16-GI-NEXT: ushll v1.4s, v0.4h, #07047; CHECK-NOFP16-GI-NEXT: ushll2 v0.4s, v0.8h, #07048; CHECK-NOFP16-GI-NEXT: ucvtf v1.4s, v1.4s7049; CHECK-NOFP16-GI-NEXT: ucvtf v2.4s, v0.4s7050; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v1.4s7051; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.8h, v2.4s7052; CHECK-NOFP16-GI-NEXT: ret7053entry:7054 %c = uitofp <8 x i8> %a to <8 x half>7055 ret <8 x half> %c7056}7057 7058define <16 x half> @stofp_v16i8_v16f16(<16 x i8> %a) {7059; CHECK-NOFP16-SD-LABEL: stofp_v16i8_v16f16:7060; CHECK-NOFP16-SD: // %bb.0: // %entry7061; CHECK-NOFP16-SD-NEXT: sshll2 v1.8h, v0.16b, #07062; CHECK-NOFP16-SD-NEXT: sshll v0.8h, v0.8b, #07063; CHECK-NOFP16-SD-NEXT: sshll v2.4s, v1.4h, #07064; CHECK-NOFP16-SD-NEXT: sshll v3.4s, v0.4h, #07065; CHECK-NOFP16-SD-NEXT: sshll2 v4.4s, v1.8h, #07066; CHECK-NOFP16-SD-NEXT: sshll2 v5.4s, v0.8h, #07067; CHECK-NOFP16-SD-NEXT: scvtf v2.4s, v2.4s7068; CHECK-NOFP16-SD-NEXT: scvtf v3.4s, v3.4s7069; CHECK-NOFP16-SD-NEXT: fcvtn v1.4h, v2.4s7070; CHECK-NOFP16-SD-NEXT: scvtf v2.4s, v4.4s7071; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v3.4s7072; CHECK-NOFP16-SD-NEXT: scvtf v3.4s, v5.4s7073; CHECK-NOFP16-SD-NEXT: fcvtn2 v1.8h, v2.4s7074; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.8h, v3.4s7075; CHECK-NOFP16-SD-NEXT: ret7076;7077; CHECK-FP16-SD-LABEL: stofp_v16i8_v16f16:7078; CHECK-FP16-SD: // %bb.0: // %entry7079; CHECK-FP16-SD-NEXT: sshll2 v1.8h, v0.16b, #07080; CHECK-FP16-SD-NEXT: sshll v0.8h, v0.8b, #07081; CHECK-FP16-SD-NEXT: scvtf v1.8h, v1.8h7082; CHECK-FP16-SD-NEXT: scvtf v0.8h, v0.8h7083; CHECK-FP16-SD-NEXT: ret7084;7085; CHECK-NOFP16-GI-LABEL: stofp_v16i8_v16f16:7086; CHECK-NOFP16-GI: // %bb.0: // %entry7087; CHECK-NOFP16-GI-NEXT: sshll v1.8h, v0.8b, #07088; CHECK-NOFP16-GI-NEXT: sshll2 v0.8h, v0.16b, #07089; CHECK-NOFP16-GI-NEXT: sshll v2.4s, v1.4h, #07090; CHECK-NOFP16-GI-NEXT: sshll v3.4s, v0.4h, #07091; CHECK-NOFP16-GI-NEXT: sshll2 v1.4s, v1.8h, #07092; CHECK-NOFP16-GI-NEXT: sshll2 v0.4s, v0.8h, #07093; CHECK-NOFP16-GI-NEXT: scvtf v2.4s, v2.4s7094; CHECK-NOFP16-GI-NEXT: scvtf v3.4s, v3.4s7095; CHECK-NOFP16-GI-NEXT: scvtf v4.4s, v1.4s7096; CHECK-NOFP16-GI-NEXT: scvtf v5.4s, v0.4s7097; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v2.4s7098; CHECK-NOFP16-GI-NEXT: fcvtn v1.4h, v3.4s7099; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.8h, v4.4s7100; CHECK-NOFP16-GI-NEXT: fcvtn2 v1.8h, v5.4s7101; CHECK-NOFP16-GI-NEXT: ret7102;7103; CHECK-FP16-GI-LABEL: stofp_v16i8_v16f16:7104; CHECK-FP16-GI: // %bb.0: // %entry7105; CHECK-FP16-GI-NEXT: sshll v1.8h, v0.8b, #07106; CHECK-FP16-GI-NEXT: sshll2 v2.8h, v0.16b, #07107; CHECK-FP16-GI-NEXT: scvtf v0.8h, v1.8h7108; CHECK-FP16-GI-NEXT: scvtf v1.8h, v2.8h7109; CHECK-FP16-GI-NEXT: ret7110entry:7111 %c = sitofp <16 x i8> %a to <16 x half>7112 ret <16 x half> %c7113}7114 7115define <16 x half> @utofp_v16i8_v16f16(<16 x i8> %a) {7116; CHECK-NOFP16-SD-LABEL: utofp_v16i8_v16f16:7117; CHECK-NOFP16-SD: // %bb.0: // %entry7118; CHECK-NOFP16-SD-NEXT: ushll2 v1.8h, v0.16b, #07119; CHECK-NOFP16-SD-NEXT: ushll v0.8h, v0.8b, #07120; CHECK-NOFP16-SD-NEXT: ushll v2.4s, v1.4h, #07121; CHECK-NOFP16-SD-NEXT: ushll v3.4s, v0.4h, #07122; CHECK-NOFP16-SD-NEXT: ushll2 v4.4s, v1.8h, #07123; CHECK-NOFP16-SD-NEXT: ushll2 v5.4s, v0.8h, #07124; CHECK-NOFP16-SD-NEXT: ucvtf v2.4s, v2.4s7125; CHECK-NOFP16-SD-NEXT: ucvtf v3.4s, v3.4s7126; CHECK-NOFP16-SD-NEXT: fcvtn v1.4h, v2.4s7127; CHECK-NOFP16-SD-NEXT: ucvtf v2.4s, v4.4s7128; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v3.4s7129; CHECK-NOFP16-SD-NEXT: ucvtf v3.4s, v5.4s7130; CHECK-NOFP16-SD-NEXT: fcvtn2 v1.8h, v2.4s7131; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.8h, v3.4s7132; CHECK-NOFP16-SD-NEXT: ret7133;7134; CHECK-FP16-SD-LABEL: utofp_v16i8_v16f16:7135; CHECK-FP16-SD: // %bb.0: // %entry7136; CHECK-FP16-SD-NEXT: ushll2 v1.8h, v0.16b, #07137; CHECK-FP16-SD-NEXT: ushll v0.8h, v0.8b, #07138; CHECK-FP16-SD-NEXT: ucvtf v1.8h, v1.8h7139; CHECK-FP16-SD-NEXT: ucvtf v0.8h, v0.8h7140; CHECK-FP16-SD-NEXT: ret7141;7142; CHECK-NOFP16-GI-LABEL: utofp_v16i8_v16f16:7143; CHECK-NOFP16-GI: // %bb.0: // %entry7144; CHECK-NOFP16-GI-NEXT: ushll v1.8h, v0.8b, #07145; CHECK-NOFP16-GI-NEXT: ushll2 v0.8h, v0.16b, #07146; CHECK-NOFP16-GI-NEXT: ushll v2.4s, v1.4h, #07147; CHECK-NOFP16-GI-NEXT: ushll v3.4s, v0.4h, #07148; CHECK-NOFP16-GI-NEXT: ushll2 v1.4s, v1.8h, #07149; CHECK-NOFP16-GI-NEXT: ushll2 v0.4s, v0.8h, #07150; CHECK-NOFP16-GI-NEXT: ucvtf v2.4s, v2.4s7151; CHECK-NOFP16-GI-NEXT: ucvtf v3.4s, v3.4s7152; CHECK-NOFP16-GI-NEXT: ucvtf v4.4s, v1.4s7153; CHECK-NOFP16-GI-NEXT: ucvtf v5.4s, v0.4s7154; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v2.4s7155; CHECK-NOFP16-GI-NEXT: fcvtn v1.4h, v3.4s7156; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.8h, v4.4s7157; CHECK-NOFP16-GI-NEXT: fcvtn2 v1.8h, v5.4s7158; CHECK-NOFP16-GI-NEXT: ret7159;7160; CHECK-FP16-GI-LABEL: utofp_v16i8_v16f16:7161; CHECK-FP16-GI: // %bb.0: // %entry7162; CHECK-FP16-GI-NEXT: ushll v1.8h, v0.8b, #07163; CHECK-FP16-GI-NEXT: ushll2 v2.8h, v0.16b, #07164; CHECK-FP16-GI-NEXT: ucvtf v0.8h, v1.8h7165; CHECK-FP16-GI-NEXT: ucvtf v1.8h, v2.8h7166; CHECK-FP16-GI-NEXT: ret7167entry:7168 %c = uitofp <16 x i8> %a to <16 x half>7169 ret <16 x half> %c7170}7171 7172define <32 x half> @stofp_v32i8_v32f16(<32 x i8> %a) {7173; CHECK-NOFP16-SD-LABEL: stofp_v32i8_v32f16:7174; CHECK-NOFP16-SD: // %bb.0: // %entry7175; CHECK-NOFP16-SD-NEXT: sshll v2.8h, v0.8b, #07176; CHECK-NOFP16-SD-NEXT: sshll2 v0.8h, v0.16b, #07177; CHECK-NOFP16-SD-NEXT: sshll2 v3.8h, v1.16b, #07178; CHECK-NOFP16-SD-NEXT: sshll v1.8h, v1.8b, #07179; CHECK-NOFP16-SD-NEXT: sshll v4.4s, v2.4h, #07180; CHECK-NOFP16-SD-NEXT: sshll v5.4s, v0.4h, #07181; CHECK-NOFP16-SD-NEXT: sshll v6.4s, v3.4h, #07182; CHECK-NOFP16-SD-NEXT: sshll v7.4s, v1.4h, #07183; CHECK-NOFP16-SD-NEXT: sshll2 v0.4s, v0.8h, #07184; CHECK-NOFP16-SD-NEXT: sshll2 v3.4s, v3.8h, #07185; CHECK-NOFP16-SD-NEXT: sshll2 v2.4s, v2.8h, #07186; CHECK-NOFP16-SD-NEXT: sshll2 v1.4s, v1.8h, #07187; CHECK-NOFP16-SD-NEXT: scvtf v4.4s, v4.4s7188; CHECK-NOFP16-SD-NEXT: scvtf v5.4s, v5.4s7189; CHECK-NOFP16-SD-NEXT: scvtf v6.4s, v6.4s7190; CHECK-NOFP16-SD-NEXT: scvtf v7.4s, v7.4s7191; CHECK-NOFP16-SD-NEXT: scvtf v16.4s, v0.4s7192; CHECK-NOFP16-SD-NEXT: scvtf v17.4s, v3.4s7193; CHECK-NOFP16-SD-NEXT: scvtf v18.4s, v2.4s7194; CHECK-NOFP16-SD-NEXT: scvtf v19.4s, v1.4s7195; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v4.4s7196; CHECK-NOFP16-SD-NEXT: fcvtn v1.4h, v5.4s7197; CHECK-NOFP16-SD-NEXT: fcvtn v3.4h, v6.4s7198; CHECK-NOFP16-SD-NEXT: fcvtn v2.4h, v7.4s7199; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.8h, v18.4s7200; CHECK-NOFP16-SD-NEXT: fcvtn2 v1.8h, v16.4s7201; CHECK-NOFP16-SD-NEXT: fcvtn2 v3.8h, v17.4s7202; CHECK-NOFP16-SD-NEXT: fcvtn2 v2.8h, v19.4s7203; CHECK-NOFP16-SD-NEXT: ret7204;7205; CHECK-FP16-SD-LABEL: stofp_v32i8_v32f16:7206; CHECK-FP16-SD: // %bb.0: // %entry7207; CHECK-FP16-SD-NEXT: sshll v2.8h, v0.8b, #07208; CHECK-FP16-SD-NEXT: sshll2 v3.8h, v0.16b, #07209; CHECK-FP16-SD-NEXT: sshll2 v4.8h, v1.16b, #07210; CHECK-FP16-SD-NEXT: sshll v5.8h, v1.8b, #07211; CHECK-FP16-SD-NEXT: scvtf v0.8h, v2.8h7212; CHECK-FP16-SD-NEXT: scvtf v1.8h, v3.8h7213; CHECK-FP16-SD-NEXT: scvtf v3.8h, v4.8h7214; CHECK-FP16-SD-NEXT: scvtf v2.8h, v5.8h7215; CHECK-FP16-SD-NEXT: ret7216;7217; CHECK-NOFP16-GI-LABEL: stofp_v32i8_v32f16:7218; CHECK-NOFP16-GI: // %bb.0: // %entry7219; CHECK-NOFP16-GI-NEXT: sshll v2.8h, v0.8b, #07220; CHECK-NOFP16-GI-NEXT: sshll2 v0.8h, v0.16b, #07221; CHECK-NOFP16-GI-NEXT: sshll v3.8h, v1.8b, #07222; CHECK-NOFP16-GI-NEXT: sshll2 v1.8h, v1.16b, #07223; CHECK-NOFP16-GI-NEXT: sshll v4.4s, v2.4h, #07224; CHECK-NOFP16-GI-NEXT: sshll v5.4s, v0.4h, #07225; CHECK-NOFP16-GI-NEXT: sshll v6.4s, v3.4h, #07226; CHECK-NOFP16-GI-NEXT: sshll v7.4s, v1.4h, #07227; CHECK-NOFP16-GI-NEXT: sshll2 v2.4s, v2.8h, #07228; CHECK-NOFP16-GI-NEXT: sshll2 v0.4s, v0.8h, #07229; CHECK-NOFP16-GI-NEXT: sshll2 v3.4s, v3.8h, #07230; CHECK-NOFP16-GI-NEXT: sshll2 v1.4s, v1.8h, #07231; CHECK-NOFP16-GI-NEXT: scvtf v4.4s, v4.4s7232; CHECK-NOFP16-GI-NEXT: scvtf v5.4s, v5.4s7233; CHECK-NOFP16-GI-NEXT: scvtf v6.4s, v6.4s7234; CHECK-NOFP16-GI-NEXT: scvtf v7.4s, v7.4s7235; CHECK-NOFP16-GI-NEXT: scvtf v16.4s, v2.4s7236; CHECK-NOFP16-GI-NEXT: scvtf v17.4s, v0.4s7237; CHECK-NOFP16-GI-NEXT: scvtf v18.4s, v3.4s7238; CHECK-NOFP16-GI-NEXT: scvtf v19.4s, v1.4s7239; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v4.4s7240; CHECK-NOFP16-GI-NEXT: fcvtn v1.4h, v5.4s7241; CHECK-NOFP16-GI-NEXT: fcvtn v2.4h, v6.4s7242; CHECK-NOFP16-GI-NEXT: fcvtn v3.4h, v7.4s7243; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.8h, v16.4s7244; CHECK-NOFP16-GI-NEXT: fcvtn2 v1.8h, v17.4s7245; CHECK-NOFP16-GI-NEXT: fcvtn2 v2.8h, v18.4s7246; CHECK-NOFP16-GI-NEXT: fcvtn2 v3.8h, v19.4s7247; CHECK-NOFP16-GI-NEXT: ret7248;7249; CHECK-FP16-GI-LABEL: stofp_v32i8_v32f16:7250; CHECK-FP16-GI: // %bb.0: // %entry7251; CHECK-FP16-GI-NEXT: sshll v2.8h, v0.8b, #07252; CHECK-FP16-GI-NEXT: sshll2 v3.8h, v0.16b, #07253; CHECK-FP16-GI-NEXT: sshll v4.8h, v1.8b, #07254; CHECK-FP16-GI-NEXT: sshll2 v5.8h, v1.16b, #07255; CHECK-FP16-GI-NEXT: scvtf v0.8h, v2.8h7256; CHECK-FP16-GI-NEXT: scvtf v1.8h, v3.8h7257; CHECK-FP16-GI-NEXT: scvtf v2.8h, v4.8h7258; CHECK-FP16-GI-NEXT: scvtf v3.8h, v5.8h7259; CHECK-FP16-GI-NEXT: ret7260entry:7261 %c = sitofp <32 x i8> %a to <32 x half>7262 ret <32 x half> %c7263}7264 7265define <32 x half> @utofp_v32i8_v32f16(<32 x i8> %a) {7266; CHECK-NOFP16-SD-LABEL: utofp_v32i8_v32f16:7267; CHECK-NOFP16-SD: // %bb.0: // %entry7268; CHECK-NOFP16-SD-NEXT: ushll v2.8h, v0.8b, #07269; CHECK-NOFP16-SD-NEXT: ushll2 v0.8h, v0.16b, #07270; CHECK-NOFP16-SD-NEXT: ushll2 v3.8h, v1.16b, #07271; CHECK-NOFP16-SD-NEXT: ushll v1.8h, v1.8b, #07272; CHECK-NOFP16-SD-NEXT: ushll v4.4s, v2.4h, #07273; CHECK-NOFP16-SD-NEXT: ushll v5.4s, v0.4h, #07274; CHECK-NOFP16-SD-NEXT: ushll v6.4s, v3.4h, #07275; CHECK-NOFP16-SD-NEXT: ushll v7.4s, v1.4h, #07276; CHECK-NOFP16-SD-NEXT: ushll2 v0.4s, v0.8h, #07277; CHECK-NOFP16-SD-NEXT: ushll2 v3.4s, v3.8h, #07278; CHECK-NOFP16-SD-NEXT: ushll2 v2.4s, v2.8h, #07279; CHECK-NOFP16-SD-NEXT: ushll2 v1.4s, v1.8h, #07280; CHECK-NOFP16-SD-NEXT: ucvtf v4.4s, v4.4s7281; CHECK-NOFP16-SD-NEXT: ucvtf v5.4s, v5.4s7282; CHECK-NOFP16-SD-NEXT: ucvtf v6.4s, v6.4s7283; CHECK-NOFP16-SD-NEXT: ucvtf v7.4s, v7.4s7284; CHECK-NOFP16-SD-NEXT: ucvtf v16.4s, v0.4s7285; CHECK-NOFP16-SD-NEXT: ucvtf v17.4s, v3.4s7286; CHECK-NOFP16-SD-NEXT: ucvtf v18.4s, v2.4s7287; CHECK-NOFP16-SD-NEXT: ucvtf v19.4s, v1.4s7288; CHECK-NOFP16-SD-NEXT: fcvtn v0.4h, v4.4s7289; CHECK-NOFP16-SD-NEXT: fcvtn v1.4h, v5.4s7290; CHECK-NOFP16-SD-NEXT: fcvtn v3.4h, v6.4s7291; CHECK-NOFP16-SD-NEXT: fcvtn v2.4h, v7.4s7292; CHECK-NOFP16-SD-NEXT: fcvtn2 v0.8h, v18.4s7293; CHECK-NOFP16-SD-NEXT: fcvtn2 v1.8h, v16.4s7294; CHECK-NOFP16-SD-NEXT: fcvtn2 v3.8h, v17.4s7295; CHECK-NOFP16-SD-NEXT: fcvtn2 v2.8h, v19.4s7296; CHECK-NOFP16-SD-NEXT: ret7297;7298; CHECK-FP16-SD-LABEL: utofp_v32i8_v32f16:7299; CHECK-FP16-SD: // %bb.0: // %entry7300; CHECK-FP16-SD-NEXT: ushll v2.8h, v0.8b, #07301; CHECK-FP16-SD-NEXT: ushll2 v3.8h, v0.16b, #07302; CHECK-FP16-SD-NEXT: ushll2 v4.8h, v1.16b, #07303; CHECK-FP16-SD-NEXT: ushll v5.8h, v1.8b, #07304; CHECK-FP16-SD-NEXT: ucvtf v0.8h, v2.8h7305; CHECK-FP16-SD-NEXT: ucvtf v1.8h, v3.8h7306; CHECK-FP16-SD-NEXT: ucvtf v3.8h, v4.8h7307; CHECK-FP16-SD-NEXT: ucvtf v2.8h, v5.8h7308; CHECK-FP16-SD-NEXT: ret7309;7310; CHECK-NOFP16-GI-LABEL: utofp_v32i8_v32f16:7311; CHECK-NOFP16-GI: // %bb.0: // %entry7312; CHECK-NOFP16-GI-NEXT: ushll v2.8h, v0.8b, #07313; CHECK-NOFP16-GI-NEXT: ushll2 v0.8h, v0.16b, #07314; CHECK-NOFP16-GI-NEXT: ushll v3.8h, v1.8b, #07315; CHECK-NOFP16-GI-NEXT: ushll2 v1.8h, v1.16b, #07316; CHECK-NOFP16-GI-NEXT: ushll v4.4s, v2.4h, #07317; CHECK-NOFP16-GI-NEXT: ushll v5.4s, v0.4h, #07318; CHECK-NOFP16-GI-NEXT: ushll v6.4s, v3.4h, #07319; CHECK-NOFP16-GI-NEXT: ushll v7.4s, v1.4h, #07320; CHECK-NOFP16-GI-NEXT: ushll2 v2.4s, v2.8h, #07321; CHECK-NOFP16-GI-NEXT: ushll2 v0.4s, v0.8h, #07322; CHECK-NOFP16-GI-NEXT: ushll2 v3.4s, v3.8h, #07323; CHECK-NOFP16-GI-NEXT: ushll2 v1.4s, v1.8h, #07324; CHECK-NOFP16-GI-NEXT: ucvtf v4.4s, v4.4s7325; CHECK-NOFP16-GI-NEXT: ucvtf v5.4s, v5.4s7326; CHECK-NOFP16-GI-NEXT: ucvtf v6.4s, v6.4s7327; CHECK-NOFP16-GI-NEXT: ucvtf v7.4s, v7.4s7328; CHECK-NOFP16-GI-NEXT: ucvtf v16.4s, v2.4s7329; CHECK-NOFP16-GI-NEXT: ucvtf v17.4s, v0.4s7330; CHECK-NOFP16-GI-NEXT: ucvtf v18.4s, v3.4s7331; CHECK-NOFP16-GI-NEXT: ucvtf v19.4s, v1.4s7332; CHECK-NOFP16-GI-NEXT: fcvtn v0.4h, v4.4s7333; CHECK-NOFP16-GI-NEXT: fcvtn v1.4h, v5.4s7334; CHECK-NOFP16-GI-NEXT: fcvtn v2.4h, v6.4s7335; CHECK-NOFP16-GI-NEXT: fcvtn v3.4h, v7.4s7336; CHECK-NOFP16-GI-NEXT: fcvtn2 v0.8h, v16.4s7337; CHECK-NOFP16-GI-NEXT: fcvtn2 v1.8h, v17.4s7338; CHECK-NOFP16-GI-NEXT: fcvtn2 v2.8h, v18.4s7339; CHECK-NOFP16-GI-NEXT: fcvtn2 v3.8h, v19.4s7340; CHECK-NOFP16-GI-NEXT: ret7341;7342; CHECK-FP16-GI-LABEL: utofp_v32i8_v32f16:7343; CHECK-FP16-GI: // %bb.0: // %entry7344; CHECK-FP16-GI-NEXT: ushll v2.8h, v0.8b, #07345; CHECK-FP16-GI-NEXT: ushll2 v3.8h, v0.16b, #07346; CHECK-FP16-GI-NEXT: ushll v4.8h, v1.8b, #07347; CHECK-FP16-GI-NEXT: ushll2 v5.8h, v1.16b, #07348; CHECK-FP16-GI-NEXT: ucvtf v0.8h, v2.8h7349; CHECK-FP16-GI-NEXT: ucvtf v1.8h, v3.8h7350; CHECK-FP16-GI-NEXT: ucvtf v2.8h, v4.8h7351; CHECK-FP16-GI-NEXT: ucvtf v3.8h, v5.8h7352; CHECK-FP16-GI-NEXT: ret7353entry:7354 %c = uitofp <32 x i8> %a to <32 x half>7355 ret <32 x half> %c7356}7357 7358define <2 x half> @stofp_v2i128_v2f16(<2 x i128> %a) {7359; CHECK-NOFP16-SD-LABEL: stofp_v2i128_v2f16:7360; CHECK-NOFP16-SD: // %bb.0: // %entry7361; CHECK-NOFP16-SD-NEXT: sub sp, sp, #487362; CHECK-NOFP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill7363; CHECK-NOFP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill7364; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 487365; CHECK-NOFP16-SD-NEXT: .cfi_offset w19, -87366; CHECK-NOFP16-SD-NEXT: .cfi_offset w20, -167367; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -327368; CHECK-NOFP16-SD-NEXT: mov x19, x17369; CHECK-NOFP16-SD-NEXT: mov x20, x07370; CHECK-NOFP16-SD-NEXT: mov x0, x27371; CHECK-NOFP16-SD-NEXT: mov x1, x37372; CHECK-NOFP16-SD-NEXT: bl __floattisf7373; CHECK-NOFP16-SD-NEXT: fcvt h0, s07374; CHECK-NOFP16-SD-NEXT: mov x0, x207375; CHECK-NOFP16-SD-NEXT: mov x1, x197376; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill7377; CHECK-NOFP16-SD-NEXT: bl __floattisf7378; CHECK-NOFP16-SD-NEXT: fcvt h0, s07379; CHECK-NOFP16-SD-NEXT: ldr q1, [sp] // 16-byte Reload7380; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload7381; CHECK-NOFP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload7382; CHECK-NOFP16-SD-NEXT: mov v0.h[1], v1.h[0]7383; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q07384; CHECK-NOFP16-SD-NEXT: add sp, sp, #487385; CHECK-NOFP16-SD-NEXT: ret7386;7387; CHECK-FP16-SD-LABEL: stofp_v2i128_v2f16:7388; CHECK-FP16-SD: // %bb.0: // %entry7389; CHECK-FP16-SD-NEXT: sub sp, sp, #487390; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill7391; CHECK-FP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill7392; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 487393; CHECK-FP16-SD-NEXT: .cfi_offset w19, -87394; CHECK-FP16-SD-NEXT: .cfi_offset w20, -167395; CHECK-FP16-SD-NEXT: .cfi_offset w30, -327396; CHECK-FP16-SD-NEXT: mov x19, x17397; CHECK-FP16-SD-NEXT: mov x20, x07398; CHECK-FP16-SD-NEXT: mov x0, x27399; CHECK-FP16-SD-NEXT: mov x1, x37400; CHECK-FP16-SD-NEXT: bl __floattihf7401; CHECK-FP16-SD-NEXT: mov x0, x207402; CHECK-FP16-SD-NEXT: mov x1, x197403; CHECK-FP16-SD-NEXT: // kill: def $h0 killed $h0 def $q07404; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill7405; CHECK-FP16-SD-NEXT: bl __floattihf7406; CHECK-FP16-SD-NEXT: ldr q1, [sp] // 16-byte Reload7407; CHECK-FP16-SD-NEXT: // kill: def $h0 killed $h0 def $q07408; CHECK-FP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload7409; CHECK-FP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload7410; CHECK-FP16-SD-NEXT: mov v0.h[1], v1.h[0]7411; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q07412; CHECK-FP16-SD-NEXT: add sp, sp, #487413; CHECK-FP16-SD-NEXT: ret7414;7415; CHECK-NOFP16-GI-LABEL: stofp_v2i128_v2f16:7416; CHECK-NOFP16-GI: // %bb.0: // %entry7417; CHECK-NOFP16-GI-NEXT: sub sp, sp, #487418; CHECK-NOFP16-GI-NEXT: str x30, [sp, #16] // 8-byte Spill7419; CHECK-NOFP16-GI-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill7420; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 487421; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -87422; CHECK-NOFP16-GI-NEXT: .cfi_offset w20, -167423; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -327424; CHECK-NOFP16-GI-NEXT: mov x19, x27425; CHECK-NOFP16-GI-NEXT: mov x20, x37426; CHECK-NOFP16-GI-NEXT: bl __floattisf7427; CHECK-NOFP16-GI-NEXT: fcvt h0, s07428; CHECK-NOFP16-GI-NEXT: mov x0, x197429; CHECK-NOFP16-GI-NEXT: mov x1, x207430; CHECK-NOFP16-GI-NEXT: str q0, [sp] // 16-byte Spill7431; CHECK-NOFP16-GI-NEXT: bl __floattisf7432; CHECK-NOFP16-GI-NEXT: fcvt h1, s07433; CHECK-NOFP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7434; CHECK-NOFP16-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload7435; CHECK-NOFP16-GI-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload7436; CHECK-NOFP16-GI-NEXT: mov v0.h[1], v1.h[0]7437; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q07438; CHECK-NOFP16-GI-NEXT: add sp, sp, #487439; CHECK-NOFP16-GI-NEXT: ret7440;7441; CHECK-FP16-GI-LABEL: stofp_v2i128_v2f16:7442; CHECK-FP16-GI: // %bb.0: // %entry7443; CHECK-FP16-GI-NEXT: sub sp, sp, #487444; CHECK-FP16-GI-NEXT: str x30, [sp, #16] // 8-byte Spill7445; CHECK-FP16-GI-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill7446; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 487447; CHECK-FP16-GI-NEXT: .cfi_offset w19, -87448; CHECK-FP16-GI-NEXT: .cfi_offset w20, -167449; CHECK-FP16-GI-NEXT: .cfi_offset w30, -327450; CHECK-FP16-GI-NEXT: mov x19, x27451; CHECK-FP16-GI-NEXT: mov x20, x37452; CHECK-FP16-GI-NEXT: bl __floattihf7453; CHECK-FP16-GI-NEXT: mov x0, x197454; CHECK-FP16-GI-NEXT: mov x1, x207455; CHECK-FP16-GI-NEXT: // kill: def $h0 killed $h0 def $q07456; CHECK-FP16-GI-NEXT: str q0, [sp] // 16-byte Spill7457; CHECK-FP16-GI-NEXT: bl __floattihf7458; CHECK-FP16-GI-NEXT: ldr q1, [sp] // 16-byte Reload7459; CHECK-FP16-GI-NEXT: // kill: def $h0 killed $h0 def $q07460; CHECK-FP16-GI-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload7461; CHECK-FP16-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload7462; CHECK-FP16-GI-NEXT: mov v1.h[1], v0.h[0]7463; CHECK-FP16-GI-NEXT: fmov d0, d17464; CHECK-FP16-GI-NEXT: add sp, sp, #487465; CHECK-FP16-GI-NEXT: ret7466entry:7467 %c = sitofp <2 x i128> %a to <2 x half>7468 ret <2 x half> %c7469}7470 7471define <2 x half> @utofp_v2i128_v2f16(<2 x i128> %a) {7472; CHECK-NOFP16-SD-LABEL: utofp_v2i128_v2f16:7473; CHECK-NOFP16-SD: // %bb.0: // %entry7474; CHECK-NOFP16-SD-NEXT: sub sp, sp, #487475; CHECK-NOFP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill7476; CHECK-NOFP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill7477; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 487478; CHECK-NOFP16-SD-NEXT: .cfi_offset w19, -87479; CHECK-NOFP16-SD-NEXT: .cfi_offset w20, -167480; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -327481; CHECK-NOFP16-SD-NEXT: mov x19, x17482; CHECK-NOFP16-SD-NEXT: mov x20, x07483; CHECK-NOFP16-SD-NEXT: mov x0, x27484; CHECK-NOFP16-SD-NEXT: mov x1, x37485; CHECK-NOFP16-SD-NEXT: bl __floatuntisf7486; CHECK-NOFP16-SD-NEXT: fcvt h0, s07487; CHECK-NOFP16-SD-NEXT: mov x0, x207488; CHECK-NOFP16-SD-NEXT: mov x1, x197489; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill7490; CHECK-NOFP16-SD-NEXT: bl __floatuntisf7491; CHECK-NOFP16-SD-NEXT: fcvt h0, s07492; CHECK-NOFP16-SD-NEXT: ldr q1, [sp] // 16-byte Reload7493; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload7494; CHECK-NOFP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload7495; CHECK-NOFP16-SD-NEXT: mov v0.h[1], v1.h[0]7496; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q07497; CHECK-NOFP16-SD-NEXT: add sp, sp, #487498; CHECK-NOFP16-SD-NEXT: ret7499;7500; CHECK-FP16-SD-LABEL: utofp_v2i128_v2f16:7501; CHECK-FP16-SD: // %bb.0: // %entry7502; CHECK-FP16-SD-NEXT: sub sp, sp, #487503; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill7504; CHECK-FP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill7505; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 487506; CHECK-FP16-SD-NEXT: .cfi_offset w19, -87507; CHECK-FP16-SD-NEXT: .cfi_offset w20, -167508; CHECK-FP16-SD-NEXT: .cfi_offset w30, -327509; CHECK-FP16-SD-NEXT: mov x19, x17510; CHECK-FP16-SD-NEXT: mov x20, x07511; CHECK-FP16-SD-NEXT: mov x0, x27512; CHECK-FP16-SD-NEXT: mov x1, x37513; CHECK-FP16-SD-NEXT: bl __floatuntihf7514; CHECK-FP16-SD-NEXT: mov x0, x207515; CHECK-FP16-SD-NEXT: mov x1, x197516; CHECK-FP16-SD-NEXT: // kill: def $h0 killed $h0 def $q07517; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill7518; CHECK-FP16-SD-NEXT: bl __floatuntihf7519; CHECK-FP16-SD-NEXT: ldr q1, [sp] // 16-byte Reload7520; CHECK-FP16-SD-NEXT: // kill: def $h0 killed $h0 def $q07521; CHECK-FP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload7522; CHECK-FP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload7523; CHECK-FP16-SD-NEXT: mov v0.h[1], v1.h[0]7524; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 killed $q07525; CHECK-FP16-SD-NEXT: add sp, sp, #487526; CHECK-FP16-SD-NEXT: ret7527;7528; CHECK-NOFP16-GI-LABEL: utofp_v2i128_v2f16:7529; CHECK-NOFP16-GI: // %bb.0: // %entry7530; CHECK-NOFP16-GI-NEXT: sub sp, sp, #487531; CHECK-NOFP16-GI-NEXT: str x30, [sp, #16] // 8-byte Spill7532; CHECK-NOFP16-GI-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill7533; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 487534; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -87535; CHECK-NOFP16-GI-NEXT: .cfi_offset w20, -167536; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -327537; CHECK-NOFP16-GI-NEXT: mov x19, x27538; CHECK-NOFP16-GI-NEXT: mov x20, x37539; CHECK-NOFP16-GI-NEXT: bl __floatuntisf7540; CHECK-NOFP16-GI-NEXT: fcvt h0, s07541; CHECK-NOFP16-GI-NEXT: mov x0, x197542; CHECK-NOFP16-GI-NEXT: mov x1, x207543; CHECK-NOFP16-GI-NEXT: str q0, [sp] // 16-byte Spill7544; CHECK-NOFP16-GI-NEXT: bl __floatuntisf7545; CHECK-NOFP16-GI-NEXT: fcvt h1, s07546; CHECK-NOFP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7547; CHECK-NOFP16-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload7548; CHECK-NOFP16-GI-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload7549; CHECK-NOFP16-GI-NEXT: mov v0.h[1], v1.h[0]7550; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 killed $q07551; CHECK-NOFP16-GI-NEXT: add sp, sp, #487552; CHECK-NOFP16-GI-NEXT: ret7553;7554; CHECK-FP16-GI-LABEL: utofp_v2i128_v2f16:7555; CHECK-FP16-GI: // %bb.0: // %entry7556; CHECK-FP16-GI-NEXT: sub sp, sp, #487557; CHECK-FP16-GI-NEXT: str x30, [sp, #16] // 8-byte Spill7558; CHECK-FP16-GI-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill7559; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 487560; CHECK-FP16-GI-NEXT: .cfi_offset w19, -87561; CHECK-FP16-GI-NEXT: .cfi_offset w20, -167562; CHECK-FP16-GI-NEXT: .cfi_offset w30, -327563; CHECK-FP16-GI-NEXT: mov x19, x27564; CHECK-FP16-GI-NEXT: mov x20, x37565; CHECK-FP16-GI-NEXT: bl __floatuntihf7566; CHECK-FP16-GI-NEXT: mov x0, x197567; CHECK-FP16-GI-NEXT: mov x1, x207568; CHECK-FP16-GI-NEXT: // kill: def $h0 killed $h0 def $q07569; CHECK-FP16-GI-NEXT: str q0, [sp] // 16-byte Spill7570; CHECK-FP16-GI-NEXT: bl __floatuntihf7571; CHECK-FP16-GI-NEXT: ldr q1, [sp] // 16-byte Reload7572; CHECK-FP16-GI-NEXT: // kill: def $h0 killed $h0 def $q07573; CHECK-FP16-GI-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload7574; CHECK-FP16-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload7575; CHECK-FP16-GI-NEXT: mov v1.h[1], v0.h[0]7576; CHECK-FP16-GI-NEXT: fmov d0, d17577; CHECK-FP16-GI-NEXT: add sp, sp, #487578; CHECK-FP16-GI-NEXT: ret7579entry:7580 %c = uitofp <2 x i128> %a to <2 x half>7581 ret <2 x half> %c7582}7583 7584define <2 x fp128> @stofp_v2i64_v2f128(<2 x i64> %a) {7585; CHECK-NOFP16-SD-LABEL: stofp_v2i64_v2f128:7586; CHECK-NOFP16-SD: // %bb.0: // %entry7587; CHECK-NOFP16-SD-NEXT: sub sp, sp, #487588; CHECK-NOFP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill7589; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 487590; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -167591; CHECK-NOFP16-SD-NEXT: fmov x0, d07592; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill7593; CHECK-NOFP16-SD-NEXT: bl __floatditf7594; CHECK-NOFP16-SD-NEXT: str q0, [sp, #16] // 16-byte Spill7595; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload7596; CHECK-NOFP16-SD-NEXT: mov x0, v0.d[1]7597; CHECK-NOFP16-SD-NEXT: bl __floatditf7598; CHECK-NOFP16-SD-NEXT: mov v1.16b, v0.16b7599; CHECK-NOFP16-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload7600; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload7601; CHECK-NOFP16-SD-NEXT: add sp, sp, #487602; CHECK-NOFP16-SD-NEXT: ret7603;7604; CHECK-FP16-SD-LABEL: stofp_v2i64_v2f128:7605; CHECK-FP16-SD: // %bb.0: // %entry7606; CHECK-FP16-SD-NEXT: sub sp, sp, #487607; CHECK-FP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill7608; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 487609; CHECK-FP16-SD-NEXT: .cfi_offset w30, -167610; CHECK-FP16-SD-NEXT: fmov x0, d07611; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill7612; CHECK-FP16-SD-NEXT: bl __floatditf7613; CHECK-FP16-SD-NEXT: str q0, [sp, #16] // 16-byte Spill7614; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload7615; CHECK-FP16-SD-NEXT: mov x0, v0.d[1]7616; CHECK-FP16-SD-NEXT: bl __floatditf7617; CHECK-FP16-SD-NEXT: mov v1.16b, v0.16b7618; CHECK-FP16-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload7619; CHECK-FP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload7620; CHECK-FP16-SD-NEXT: add sp, sp, #487621; CHECK-FP16-SD-NEXT: ret7622;7623; CHECK-NOFP16-GI-LABEL: stofp_v2i64_v2f128:7624; CHECK-NOFP16-GI: // %bb.0: // %entry7625; CHECK-NOFP16-GI-NEXT: sub sp, sp, #327626; CHECK-NOFP16-GI-NEXT: str d8, [sp, #16] // 8-byte Spill7627; CHECK-NOFP16-GI-NEXT: str x30, [sp, #24] // 8-byte Spill7628; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 327629; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -87630; CHECK-NOFP16-GI-NEXT: .cfi_offset b8, -167631; CHECK-NOFP16-GI-NEXT: fmov x0, d07632; CHECK-NOFP16-GI-NEXT: mov d8, v0.d[1]7633; CHECK-NOFP16-GI-NEXT: bl __floatditf7634; CHECK-NOFP16-GI-NEXT: fmov x0, d87635; CHECK-NOFP16-GI-NEXT: str q0, [sp] // 16-byte Spill7636; CHECK-NOFP16-GI-NEXT: bl __floatditf7637; CHECK-NOFP16-GI-NEXT: mov v1.16b, v0.16b7638; CHECK-NOFP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7639; CHECK-NOFP16-GI-NEXT: ldr x30, [sp, #24] // 8-byte Reload7640; CHECK-NOFP16-GI-NEXT: ldr d8, [sp, #16] // 8-byte Reload7641; CHECK-NOFP16-GI-NEXT: add sp, sp, #327642; CHECK-NOFP16-GI-NEXT: ret7643;7644; CHECK-FP16-GI-LABEL: stofp_v2i64_v2f128:7645; CHECK-FP16-GI: // %bb.0: // %entry7646; CHECK-FP16-GI-NEXT: sub sp, sp, #327647; CHECK-FP16-GI-NEXT: str d8, [sp, #16] // 8-byte Spill7648; CHECK-FP16-GI-NEXT: str x30, [sp, #24] // 8-byte Spill7649; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 327650; CHECK-FP16-GI-NEXT: .cfi_offset w30, -87651; CHECK-FP16-GI-NEXT: .cfi_offset b8, -167652; CHECK-FP16-GI-NEXT: fmov x0, d07653; CHECK-FP16-GI-NEXT: mov d8, v0.d[1]7654; CHECK-FP16-GI-NEXT: bl __floatditf7655; CHECK-FP16-GI-NEXT: fmov x0, d87656; CHECK-FP16-GI-NEXT: str q0, [sp] // 16-byte Spill7657; CHECK-FP16-GI-NEXT: bl __floatditf7658; CHECK-FP16-GI-NEXT: mov v1.16b, v0.16b7659; CHECK-FP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7660; CHECK-FP16-GI-NEXT: ldr x30, [sp, #24] // 8-byte Reload7661; CHECK-FP16-GI-NEXT: ldr d8, [sp, #16] // 8-byte Reload7662; CHECK-FP16-GI-NEXT: add sp, sp, #327663; CHECK-FP16-GI-NEXT: ret7664entry:7665 %c = sitofp <2 x i64> %a to <2 x fp128>7666 ret <2 x fp128> %c7667}7668 7669define <2 x fp128> @utofp_v2i64_v2f128(<2 x i64> %a) {7670; CHECK-NOFP16-SD-LABEL: utofp_v2i64_v2f128:7671; CHECK-NOFP16-SD: // %bb.0: // %entry7672; CHECK-NOFP16-SD-NEXT: sub sp, sp, #487673; CHECK-NOFP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill7674; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 487675; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -167676; CHECK-NOFP16-SD-NEXT: fmov x0, d07677; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill7678; CHECK-NOFP16-SD-NEXT: bl __floatunditf7679; CHECK-NOFP16-SD-NEXT: str q0, [sp, #16] // 16-byte Spill7680; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload7681; CHECK-NOFP16-SD-NEXT: mov x0, v0.d[1]7682; CHECK-NOFP16-SD-NEXT: bl __floatunditf7683; CHECK-NOFP16-SD-NEXT: mov v1.16b, v0.16b7684; CHECK-NOFP16-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload7685; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload7686; CHECK-NOFP16-SD-NEXT: add sp, sp, #487687; CHECK-NOFP16-SD-NEXT: ret7688;7689; CHECK-FP16-SD-LABEL: utofp_v2i64_v2f128:7690; CHECK-FP16-SD: // %bb.0: // %entry7691; CHECK-FP16-SD-NEXT: sub sp, sp, #487692; CHECK-FP16-SD-NEXT: str x30, [sp, #32] // 8-byte Spill7693; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 487694; CHECK-FP16-SD-NEXT: .cfi_offset w30, -167695; CHECK-FP16-SD-NEXT: fmov x0, d07696; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill7697; CHECK-FP16-SD-NEXT: bl __floatunditf7698; CHECK-FP16-SD-NEXT: str q0, [sp, #16] // 16-byte Spill7699; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload7700; CHECK-FP16-SD-NEXT: mov x0, v0.d[1]7701; CHECK-FP16-SD-NEXT: bl __floatunditf7702; CHECK-FP16-SD-NEXT: mov v1.16b, v0.16b7703; CHECK-FP16-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload7704; CHECK-FP16-SD-NEXT: ldr x30, [sp, #32] // 8-byte Reload7705; CHECK-FP16-SD-NEXT: add sp, sp, #487706; CHECK-FP16-SD-NEXT: ret7707;7708; CHECK-NOFP16-GI-LABEL: utofp_v2i64_v2f128:7709; CHECK-NOFP16-GI: // %bb.0: // %entry7710; CHECK-NOFP16-GI-NEXT: sub sp, sp, #327711; CHECK-NOFP16-GI-NEXT: str d8, [sp, #16] // 8-byte Spill7712; CHECK-NOFP16-GI-NEXT: str x30, [sp, #24] // 8-byte Spill7713; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 327714; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -87715; CHECK-NOFP16-GI-NEXT: .cfi_offset b8, -167716; CHECK-NOFP16-GI-NEXT: fmov x0, d07717; CHECK-NOFP16-GI-NEXT: mov d8, v0.d[1]7718; CHECK-NOFP16-GI-NEXT: bl __floatunditf7719; CHECK-NOFP16-GI-NEXT: fmov x0, d87720; CHECK-NOFP16-GI-NEXT: str q0, [sp] // 16-byte Spill7721; CHECK-NOFP16-GI-NEXT: bl __floatunditf7722; CHECK-NOFP16-GI-NEXT: mov v1.16b, v0.16b7723; CHECK-NOFP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7724; CHECK-NOFP16-GI-NEXT: ldr x30, [sp, #24] // 8-byte Reload7725; CHECK-NOFP16-GI-NEXT: ldr d8, [sp, #16] // 8-byte Reload7726; CHECK-NOFP16-GI-NEXT: add sp, sp, #327727; CHECK-NOFP16-GI-NEXT: ret7728;7729; CHECK-FP16-GI-LABEL: utofp_v2i64_v2f128:7730; CHECK-FP16-GI: // %bb.0: // %entry7731; CHECK-FP16-GI-NEXT: sub sp, sp, #327732; CHECK-FP16-GI-NEXT: str d8, [sp, #16] // 8-byte Spill7733; CHECK-FP16-GI-NEXT: str x30, [sp, #24] // 8-byte Spill7734; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 327735; CHECK-FP16-GI-NEXT: .cfi_offset w30, -87736; CHECK-FP16-GI-NEXT: .cfi_offset b8, -167737; CHECK-FP16-GI-NEXT: fmov x0, d07738; CHECK-FP16-GI-NEXT: mov d8, v0.d[1]7739; CHECK-FP16-GI-NEXT: bl __floatunditf7740; CHECK-FP16-GI-NEXT: fmov x0, d87741; CHECK-FP16-GI-NEXT: str q0, [sp] // 16-byte Spill7742; CHECK-FP16-GI-NEXT: bl __floatunditf7743; CHECK-FP16-GI-NEXT: mov v1.16b, v0.16b7744; CHECK-FP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7745; CHECK-FP16-GI-NEXT: ldr x30, [sp, #24] // 8-byte Reload7746; CHECK-FP16-GI-NEXT: ldr d8, [sp, #16] // 8-byte Reload7747; CHECK-FP16-GI-NEXT: add sp, sp, #327748; CHECK-FP16-GI-NEXT: ret7749entry:7750 %c = uitofp <2 x i64> %a to <2 x fp128>7751 ret <2 x fp128> %c7752}7753 7754define <2 x fp128> @stofp_v2i32_v2f128(<2 x i32> %a) {7755; CHECK-NOFP16-SD-LABEL: stofp_v2i32_v2f128:7756; CHECK-NOFP16-SD: // %bb.0: // %entry7757; CHECK-NOFP16-SD-NEXT: sub sp, sp, #327758; CHECK-NOFP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill7759; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 327760; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -167761; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q07762; CHECK-NOFP16-SD-NEXT: fmov w0, s07763; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill7764; CHECK-NOFP16-SD-NEXT: bl __floatsitf7765; CHECK-NOFP16-SD-NEXT: ldr q1, [sp] // 16-byte Reload7766; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill7767; CHECK-NOFP16-SD-NEXT: mov w0, v1.s[1]7768; CHECK-NOFP16-SD-NEXT: bl __floatsitf7769; CHECK-NOFP16-SD-NEXT: mov v1.16b, v0.16b7770; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload7771; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload7772; CHECK-NOFP16-SD-NEXT: add sp, sp, #327773; CHECK-NOFP16-SD-NEXT: ret7774;7775; CHECK-FP16-SD-LABEL: stofp_v2i32_v2f128:7776; CHECK-FP16-SD: // %bb.0: // %entry7777; CHECK-FP16-SD-NEXT: sub sp, sp, #327778; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill7779; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 327780; CHECK-FP16-SD-NEXT: .cfi_offset w30, -167781; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q07782; CHECK-FP16-SD-NEXT: fmov w0, s07783; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill7784; CHECK-FP16-SD-NEXT: bl __floatsitf7785; CHECK-FP16-SD-NEXT: ldr q1, [sp] // 16-byte Reload7786; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill7787; CHECK-FP16-SD-NEXT: mov w0, v1.s[1]7788; CHECK-FP16-SD-NEXT: bl __floatsitf7789; CHECK-FP16-SD-NEXT: mov v1.16b, v0.16b7790; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload7791; CHECK-FP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload7792; CHECK-FP16-SD-NEXT: add sp, sp, #327793; CHECK-FP16-SD-NEXT: ret7794;7795; CHECK-NOFP16-GI-LABEL: stofp_v2i32_v2f128:7796; CHECK-NOFP16-GI: // %bb.0: // %entry7797; CHECK-NOFP16-GI-NEXT: sub sp, sp, #327798; CHECK-NOFP16-GI-NEXT: str d8, [sp, #16] // 8-byte Spill7799; CHECK-NOFP16-GI-NEXT: str x30, [sp, #24] // 8-byte Spill7800; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 327801; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -87802; CHECK-NOFP16-GI-NEXT: .cfi_offset b8, -167803; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q07804; CHECK-NOFP16-GI-NEXT: fmov w0, s07805; CHECK-NOFP16-GI-NEXT: mov s8, v0.s[1]7806; CHECK-NOFP16-GI-NEXT: bl __floatsitf7807; CHECK-NOFP16-GI-NEXT: fmov w0, s87808; CHECK-NOFP16-GI-NEXT: str q0, [sp] // 16-byte Spill7809; CHECK-NOFP16-GI-NEXT: bl __floatsitf7810; CHECK-NOFP16-GI-NEXT: mov v1.16b, v0.16b7811; CHECK-NOFP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7812; CHECK-NOFP16-GI-NEXT: ldr x30, [sp, #24] // 8-byte Reload7813; CHECK-NOFP16-GI-NEXT: ldr d8, [sp, #16] // 8-byte Reload7814; CHECK-NOFP16-GI-NEXT: add sp, sp, #327815; CHECK-NOFP16-GI-NEXT: ret7816;7817; CHECK-FP16-GI-LABEL: stofp_v2i32_v2f128:7818; CHECK-FP16-GI: // %bb.0: // %entry7819; CHECK-FP16-GI-NEXT: sub sp, sp, #327820; CHECK-FP16-GI-NEXT: str d8, [sp, #16] // 8-byte Spill7821; CHECK-FP16-GI-NEXT: str x30, [sp, #24] // 8-byte Spill7822; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 327823; CHECK-FP16-GI-NEXT: .cfi_offset w30, -87824; CHECK-FP16-GI-NEXT: .cfi_offset b8, -167825; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q07826; CHECK-FP16-GI-NEXT: fmov w0, s07827; CHECK-FP16-GI-NEXT: mov s8, v0.s[1]7828; CHECK-FP16-GI-NEXT: bl __floatsitf7829; CHECK-FP16-GI-NEXT: fmov w0, s87830; CHECK-FP16-GI-NEXT: str q0, [sp] // 16-byte Spill7831; CHECK-FP16-GI-NEXT: bl __floatsitf7832; CHECK-FP16-GI-NEXT: mov v1.16b, v0.16b7833; CHECK-FP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7834; CHECK-FP16-GI-NEXT: ldr x30, [sp, #24] // 8-byte Reload7835; CHECK-FP16-GI-NEXT: ldr d8, [sp, #16] // 8-byte Reload7836; CHECK-FP16-GI-NEXT: add sp, sp, #327837; CHECK-FP16-GI-NEXT: ret7838entry:7839 %c = sitofp <2 x i32> %a to <2 x fp128>7840 ret <2 x fp128> %c7841}7842 7843define <2 x fp128> @utofp_v2i32_v2f128(<2 x i32> %a) {7844; CHECK-NOFP16-SD-LABEL: utofp_v2i32_v2f128:7845; CHECK-NOFP16-SD: // %bb.0: // %entry7846; CHECK-NOFP16-SD-NEXT: sub sp, sp, #327847; CHECK-NOFP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill7848; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 327849; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -167850; CHECK-NOFP16-SD-NEXT: // kill: def $d0 killed $d0 def $q07851; CHECK-NOFP16-SD-NEXT: fmov w0, s07852; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill7853; CHECK-NOFP16-SD-NEXT: bl __floatunsitf7854; CHECK-NOFP16-SD-NEXT: ldr q1, [sp] // 16-byte Reload7855; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill7856; CHECK-NOFP16-SD-NEXT: mov w0, v1.s[1]7857; CHECK-NOFP16-SD-NEXT: bl __floatunsitf7858; CHECK-NOFP16-SD-NEXT: mov v1.16b, v0.16b7859; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload7860; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload7861; CHECK-NOFP16-SD-NEXT: add sp, sp, #327862; CHECK-NOFP16-SD-NEXT: ret7863;7864; CHECK-FP16-SD-LABEL: utofp_v2i32_v2f128:7865; CHECK-FP16-SD: // %bb.0: // %entry7866; CHECK-FP16-SD-NEXT: sub sp, sp, #327867; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill7868; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 327869; CHECK-FP16-SD-NEXT: .cfi_offset w30, -167870; CHECK-FP16-SD-NEXT: // kill: def $d0 killed $d0 def $q07871; CHECK-FP16-SD-NEXT: fmov w0, s07872; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill7873; CHECK-FP16-SD-NEXT: bl __floatunsitf7874; CHECK-FP16-SD-NEXT: ldr q1, [sp] // 16-byte Reload7875; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill7876; CHECK-FP16-SD-NEXT: mov w0, v1.s[1]7877; CHECK-FP16-SD-NEXT: bl __floatunsitf7878; CHECK-FP16-SD-NEXT: mov v1.16b, v0.16b7879; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload7880; CHECK-FP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload7881; CHECK-FP16-SD-NEXT: add sp, sp, #327882; CHECK-FP16-SD-NEXT: ret7883;7884; CHECK-NOFP16-GI-LABEL: utofp_v2i32_v2f128:7885; CHECK-NOFP16-GI: // %bb.0: // %entry7886; CHECK-NOFP16-GI-NEXT: sub sp, sp, #327887; CHECK-NOFP16-GI-NEXT: str d8, [sp, #16] // 8-byte Spill7888; CHECK-NOFP16-GI-NEXT: str x30, [sp, #24] // 8-byte Spill7889; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 327890; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -87891; CHECK-NOFP16-GI-NEXT: .cfi_offset b8, -167892; CHECK-NOFP16-GI-NEXT: // kill: def $d0 killed $d0 def $q07893; CHECK-NOFP16-GI-NEXT: fmov w0, s07894; CHECK-NOFP16-GI-NEXT: mov s8, v0.s[1]7895; CHECK-NOFP16-GI-NEXT: bl __floatunsitf7896; CHECK-NOFP16-GI-NEXT: fmov w0, s87897; CHECK-NOFP16-GI-NEXT: str q0, [sp] // 16-byte Spill7898; CHECK-NOFP16-GI-NEXT: bl __floatunsitf7899; CHECK-NOFP16-GI-NEXT: mov v1.16b, v0.16b7900; CHECK-NOFP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7901; CHECK-NOFP16-GI-NEXT: ldr x30, [sp, #24] // 8-byte Reload7902; CHECK-NOFP16-GI-NEXT: ldr d8, [sp, #16] // 8-byte Reload7903; CHECK-NOFP16-GI-NEXT: add sp, sp, #327904; CHECK-NOFP16-GI-NEXT: ret7905;7906; CHECK-FP16-GI-LABEL: utofp_v2i32_v2f128:7907; CHECK-FP16-GI: // %bb.0: // %entry7908; CHECK-FP16-GI-NEXT: sub sp, sp, #327909; CHECK-FP16-GI-NEXT: str d8, [sp, #16] // 8-byte Spill7910; CHECK-FP16-GI-NEXT: str x30, [sp, #24] // 8-byte Spill7911; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 327912; CHECK-FP16-GI-NEXT: .cfi_offset w30, -87913; CHECK-FP16-GI-NEXT: .cfi_offset b8, -167914; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q07915; CHECK-FP16-GI-NEXT: fmov w0, s07916; CHECK-FP16-GI-NEXT: mov s8, v0.s[1]7917; CHECK-FP16-GI-NEXT: bl __floatunsitf7918; CHECK-FP16-GI-NEXT: fmov w0, s87919; CHECK-FP16-GI-NEXT: str q0, [sp] // 16-byte Spill7920; CHECK-FP16-GI-NEXT: bl __floatunsitf7921; CHECK-FP16-GI-NEXT: mov v1.16b, v0.16b7922; CHECK-FP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload7923; CHECK-FP16-GI-NEXT: ldr x30, [sp, #24] // 8-byte Reload7924; CHECK-FP16-GI-NEXT: ldr d8, [sp, #16] // 8-byte Reload7925; CHECK-FP16-GI-NEXT: add sp, sp, #327926; CHECK-FP16-GI-NEXT: ret7927entry:7928 %c = uitofp <2 x i32> %a to <2 x fp128>7929 ret <2 x fp128> %c7930}7931 7932define <2 x fp128> @stofp_v2i16_v2f128(<2 x i16> %a) {7933; CHECK-LABEL: stofp_v2i16_v2f128:7934; CHECK: // %bb.0: // %entry7935; CHECK-NEXT: sub sp, sp, #327936; CHECK-NEXT: str x30, [sp, #16] // 8-byte Spill7937; CHECK-NEXT: .cfi_def_cfa_offset 327938; CHECK-NEXT: .cfi_offset w30, -167939; CHECK-NEXT: // kill: def $d0 killed $d0 def $q07940; CHECK-NEXT: fmov w8, s07941; CHECK-NEXT: str q0, [sp] // 16-byte Spill7942; CHECK-NEXT: sxth w0, w87943; CHECK-NEXT: bl __floatsitf7944; CHECK-NEXT: ldr q1, [sp] // 16-byte Reload7945; CHECK-NEXT: str q0, [sp] // 16-byte Spill7946; CHECK-NEXT: mov w8, v1.s[1]7947; CHECK-NEXT: sxth w0, w87948; CHECK-NEXT: bl __floatsitf7949; CHECK-NEXT: mov v1.16b, v0.16b7950; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload7951; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Reload7952; CHECK-NEXT: add sp, sp, #327953; CHECK-NEXT: ret7954entry:7955 %c = sitofp <2 x i16> %a to <2 x fp128>7956 ret <2 x fp128> %c7957}7958 7959define <2 x fp128> @utofp_v2i16_v2f128(<2 x i16> %a) {7960; CHECK-LABEL: utofp_v2i16_v2f128:7961; CHECK: // %bb.0: // %entry7962; CHECK-NEXT: sub sp, sp, #327963; CHECK-NEXT: str x30, [sp, #16] // 8-byte Spill7964; CHECK-NEXT: .cfi_def_cfa_offset 327965; CHECK-NEXT: .cfi_offset w30, -167966; CHECK-NEXT: // kill: def $d0 killed $d0 def $q07967; CHECK-NEXT: fmov w8, s07968; CHECK-NEXT: str q0, [sp] // 16-byte Spill7969; CHECK-NEXT: and w0, w8, #0xffff7970; CHECK-NEXT: bl __floatunsitf7971; CHECK-NEXT: ldr q1, [sp] // 16-byte Reload7972; CHECK-NEXT: str q0, [sp] // 16-byte Spill7973; CHECK-NEXT: mov w8, v1.s[1]7974; CHECK-NEXT: and w0, w8, #0xffff7975; CHECK-NEXT: bl __floatunsitf7976; CHECK-NEXT: mov v1.16b, v0.16b7977; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload7978; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Reload7979; CHECK-NEXT: add sp, sp, #327980; CHECK-NEXT: ret7981entry:7982 %c = uitofp <2 x i16> %a to <2 x fp128>7983 ret <2 x fp128> %c7984}7985 7986define <2 x fp128> @stofp_v2i8_v2f128(<2 x i8> %a) {7987; CHECK-LABEL: stofp_v2i8_v2f128:7988; CHECK: // %bb.0: // %entry7989; CHECK-NEXT: sub sp, sp, #327990; CHECK-NEXT: str x30, [sp, #16] // 8-byte Spill7991; CHECK-NEXT: .cfi_def_cfa_offset 327992; CHECK-NEXT: .cfi_offset w30, -167993; CHECK-NEXT: // kill: def $d0 killed $d0 def $q07994; CHECK-NEXT: fmov w8, s07995; CHECK-NEXT: str q0, [sp] // 16-byte Spill7996; CHECK-NEXT: sxtb w0, w87997; CHECK-NEXT: bl __floatsitf7998; CHECK-NEXT: ldr q1, [sp] // 16-byte Reload7999; CHECK-NEXT: str q0, [sp] // 16-byte Spill8000; CHECK-NEXT: mov w8, v1.s[1]8001; CHECK-NEXT: sxtb w0, w88002; CHECK-NEXT: bl __floatsitf8003; CHECK-NEXT: mov v1.16b, v0.16b8004; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload8005; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Reload8006; CHECK-NEXT: add sp, sp, #328007; CHECK-NEXT: ret8008entry:8009 %c = sitofp <2 x i8> %a to <2 x fp128>8010 ret <2 x fp128> %c8011}8012 8013define <2 x fp128> @utofp_v2i8_v2f128(<2 x i8> %a) {8014; CHECK-LABEL: utofp_v2i8_v2f128:8015; CHECK: // %bb.0: // %entry8016; CHECK-NEXT: sub sp, sp, #328017; CHECK-NEXT: str x30, [sp, #16] // 8-byte Spill8018; CHECK-NEXT: .cfi_def_cfa_offset 328019; CHECK-NEXT: .cfi_offset w30, -168020; CHECK-NEXT: // kill: def $d0 killed $d0 def $q08021; CHECK-NEXT: fmov w8, s08022; CHECK-NEXT: str q0, [sp] // 16-byte Spill8023; CHECK-NEXT: and w0, w8, #0xff8024; CHECK-NEXT: bl __floatunsitf8025; CHECK-NEXT: ldr q1, [sp] // 16-byte Reload8026; CHECK-NEXT: str q0, [sp] // 16-byte Spill8027; CHECK-NEXT: mov w8, v1.s[1]8028; CHECK-NEXT: and w0, w8, #0xff8029; CHECK-NEXT: bl __floatunsitf8030; CHECK-NEXT: mov v1.16b, v0.16b8031; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload8032; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Reload8033; CHECK-NEXT: add sp, sp, #328034; CHECK-NEXT: ret8035entry:8036 %c = uitofp <2 x i8> %a to <2 x fp128>8037 ret <2 x fp128> %c8038}8039 8040define <2 x fp128> @stofp_v2i128_v2f128(<2 x i128> %a) {8041; CHECK-NOFP16-SD-LABEL: stofp_v2i128_v2f128:8042; CHECK-NOFP16-SD: // %bb.0: // %entry8043; CHECK-NOFP16-SD-NEXT: sub sp, sp, #488044; CHECK-NOFP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill8045; CHECK-NOFP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill8046; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 488047; CHECK-NOFP16-SD-NEXT: .cfi_offset w19, -88048; CHECK-NOFP16-SD-NEXT: .cfi_offset w20, -168049; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -328050; CHECK-NOFP16-SD-NEXT: mov x19, x38051; CHECK-NOFP16-SD-NEXT: mov x20, x28052; CHECK-NOFP16-SD-NEXT: bl __floattitf8053; CHECK-NOFP16-SD-NEXT: mov x0, x208054; CHECK-NOFP16-SD-NEXT: mov x1, x198055; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill8056; CHECK-NOFP16-SD-NEXT: bl __floattitf8057; CHECK-NOFP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload8058; CHECK-NOFP16-SD-NEXT: mov v1.16b, v0.16b8059; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload8060; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload8061; CHECK-NOFP16-SD-NEXT: add sp, sp, #488062; CHECK-NOFP16-SD-NEXT: ret8063;8064; CHECK-FP16-SD-LABEL: stofp_v2i128_v2f128:8065; CHECK-FP16-SD: // %bb.0: // %entry8066; CHECK-FP16-SD-NEXT: sub sp, sp, #488067; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill8068; CHECK-FP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill8069; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 488070; CHECK-FP16-SD-NEXT: .cfi_offset w19, -88071; CHECK-FP16-SD-NEXT: .cfi_offset w20, -168072; CHECK-FP16-SD-NEXT: .cfi_offset w30, -328073; CHECK-FP16-SD-NEXT: mov x19, x38074; CHECK-FP16-SD-NEXT: mov x20, x28075; CHECK-FP16-SD-NEXT: bl __floattitf8076; CHECK-FP16-SD-NEXT: mov x0, x208077; CHECK-FP16-SD-NEXT: mov x1, x198078; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill8079; CHECK-FP16-SD-NEXT: bl __floattitf8080; CHECK-FP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload8081; CHECK-FP16-SD-NEXT: mov v1.16b, v0.16b8082; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload8083; CHECK-FP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload8084; CHECK-FP16-SD-NEXT: add sp, sp, #488085; CHECK-FP16-SD-NEXT: ret8086;8087; CHECK-NOFP16-GI-LABEL: stofp_v2i128_v2f128:8088; CHECK-NOFP16-GI: // %bb.0: // %entry8089; CHECK-NOFP16-GI-NEXT: sub sp, sp, #488090; CHECK-NOFP16-GI-NEXT: str x30, [sp, #16] // 8-byte Spill8091; CHECK-NOFP16-GI-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill8092; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 488093; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -88094; CHECK-NOFP16-GI-NEXT: .cfi_offset w20, -168095; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -328096; CHECK-NOFP16-GI-NEXT: mov x19, x28097; CHECK-NOFP16-GI-NEXT: mov x20, x38098; CHECK-NOFP16-GI-NEXT: bl __floattitf8099; CHECK-NOFP16-GI-NEXT: mov x0, x198100; CHECK-NOFP16-GI-NEXT: mov x1, x208101; CHECK-NOFP16-GI-NEXT: str q0, [sp] // 16-byte Spill8102; CHECK-NOFP16-GI-NEXT: bl __floattitf8103; CHECK-NOFP16-GI-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload8104; CHECK-NOFP16-GI-NEXT: mov v1.16b, v0.16b8105; CHECK-NOFP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload8106; CHECK-NOFP16-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload8107; CHECK-NOFP16-GI-NEXT: add sp, sp, #488108; CHECK-NOFP16-GI-NEXT: ret8109;8110; CHECK-FP16-GI-LABEL: stofp_v2i128_v2f128:8111; CHECK-FP16-GI: // %bb.0: // %entry8112; CHECK-FP16-GI-NEXT: sub sp, sp, #488113; CHECK-FP16-GI-NEXT: str x30, [sp, #16] // 8-byte Spill8114; CHECK-FP16-GI-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill8115; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 488116; CHECK-FP16-GI-NEXT: .cfi_offset w19, -88117; CHECK-FP16-GI-NEXT: .cfi_offset w20, -168118; CHECK-FP16-GI-NEXT: .cfi_offset w30, -328119; CHECK-FP16-GI-NEXT: mov x19, x28120; CHECK-FP16-GI-NEXT: mov x20, x38121; CHECK-FP16-GI-NEXT: bl __floattitf8122; CHECK-FP16-GI-NEXT: mov x0, x198123; CHECK-FP16-GI-NEXT: mov x1, x208124; CHECK-FP16-GI-NEXT: str q0, [sp] // 16-byte Spill8125; CHECK-FP16-GI-NEXT: bl __floattitf8126; CHECK-FP16-GI-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload8127; CHECK-FP16-GI-NEXT: mov v1.16b, v0.16b8128; CHECK-FP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload8129; CHECK-FP16-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload8130; CHECK-FP16-GI-NEXT: add sp, sp, #488131; CHECK-FP16-GI-NEXT: ret8132entry:8133 %c = sitofp <2 x i128> %a to <2 x fp128>8134 ret <2 x fp128> %c8135}8136 8137define <2 x fp128> @utofp_v2i128_v2f128(<2 x i128> %a) {8138; CHECK-NOFP16-SD-LABEL: utofp_v2i128_v2f128:8139; CHECK-NOFP16-SD: // %bb.0: // %entry8140; CHECK-NOFP16-SD-NEXT: sub sp, sp, #488141; CHECK-NOFP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill8142; CHECK-NOFP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill8143; CHECK-NOFP16-SD-NEXT: .cfi_def_cfa_offset 488144; CHECK-NOFP16-SD-NEXT: .cfi_offset w19, -88145; CHECK-NOFP16-SD-NEXT: .cfi_offset w20, -168146; CHECK-NOFP16-SD-NEXT: .cfi_offset w30, -328147; CHECK-NOFP16-SD-NEXT: mov x19, x38148; CHECK-NOFP16-SD-NEXT: mov x20, x28149; CHECK-NOFP16-SD-NEXT: bl __floatuntitf8150; CHECK-NOFP16-SD-NEXT: mov x0, x208151; CHECK-NOFP16-SD-NEXT: mov x1, x198152; CHECK-NOFP16-SD-NEXT: str q0, [sp] // 16-byte Spill8153; CHECK-NOFP16-SD-NEXT: bl __floatuntitf8154; CHECK-NOFP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload8155; CHECK-NOFP16-SD-NEXT: mov v1.16b, v0.16b8156; CHECK-NOFP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload8157; CHECK-NOFP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload8158; CHECK-NOFP16-SD-NEXT: add sp, sp, #488159; CHECK-NOFP16-SD-NEXT: ret8160;8161; CHECK-FP16-SD-LABEL: utofp_v2i128_v2f128:8162; CHECK-FP16-SD: // %bb.0: // %entry8163; CHECK-FP16-SD-NEXT: sub sp, sp, #488164; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Spill8165; CHECK-FP16-SD-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill8166; CHECK-FP16-SD-NEXT: .cfi_def_cfa_offset 488167; CHECK-FP16-SD-NEXT: .cfi_offset w19, -88168; CHECK-FP16-SD-NEXT: .cfi_offset w20, -168169; CHECK-FP16-SD-NEXT: .cfi_offset w30, -328170; CHECK-FP16-SD-NEXT: mov x19, x38171; CHECK-FP16-SD-NEXT: mov x20, x28172; CHECK-FP16-SD-NEXT: bl __floatuntitf8173; CHECK-FP16-SD-NEXT: mov x0, x208174; CHECK-FP16-SD-NEXT: mov x1, x198175; CHECK-FP16-SD-NEXT: str q0, [sp] // 16-byte Spill8176; CHECK-FP16-SD-NEXT: bl __floatuntitf8177; CHECK-FP16-SD-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload8178; CHECK-FP16-SD-NEXT: mov v1.16b, v0.16b8179; CHECK-FP16-SD-NEXT: ldr q0, [sp] // 16-byte Reload8180; CHECK-FP16-SD-NEXT: ldr x30, [sp, #16] // 8-byte Reload8181; CHECK-FP16-SD-NEXT: add sp, sp, #488182; CHECK-FP16-SD-NEXT: ret8183;8184; CHECK-NOFP16-GI-LABEL: utofp_v2i128_v2f128:8185; CHECK-NOFP16-GI: // %bb.0: // %entry8186; CHECK-NOFP16-GI-NEXT: sub sp, sp, #488187; CHECK-NOFP16-GI-NEXT: str x30, [sp, #16] // 8-byte Spill8188; CHECK-NOFP16-GI-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill8189; CHECK-NOFP16-GI-NEXT: .cfi_def_cfa_offset 488190; CHECK-NOFP16-GI-NEXT: .cfi_offset w19, -88191; CHECK-NOFP16-GI-NEXT: .cfi_offset w20, -168192; CHECK-NOFP16-GI-NEXT: .cfi_offset w30, -328193; CHECK-NOFP16-GI-NEXT: mov x19, x28194; CHECK-NOFP16-GI-NEXT: mov x20, x38195; CHECK-NOFP16-GI-NEXT: bl __floatuntitf8196; CHECK-NOFP16-GI-NEXT: mov x0, x198197; CHECK-NOFP16-GI-NEXT: mov x1, x208198; CHECK-NOFP16-GI-NEXT: str q0, [sp] // 16-byte Spill8199; CHECK-NOFP16-GI-NEXT: bl __floatuntitf8200; CHECK-NOFP16-GI-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload8201; CHECK-NOFP16-GI-NEXT: mov v1.16b, v0.16b8202; CHECK-NOFP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload8203; CHECK-NOFP16-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload8204; CHECK-NOFP16-GI-NEXT: add sp, sp, #488205; CHECK-NOFP16-GI-NEXT: ret8206;8207; CHECK-FP16-GI-LABEL: utofp_v2i128_v2f128:8208; CHECK-FP16-GI: // %bb.0: // %entry8209; CHECK-FP16-GI-NEXT: sub sp, sp, #488210; CHECK-FP16-GI-NEXT: str x30, [sp, #16] // 8-byte Spill8211; CHECK-FP16-GI-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill8212; CHECK-FP16-GI-NEXT: .cfi_def_cfa_offset 488213; CHECK-FP16-GI-NEXT: .cfi_offset w19, -88214; CHECK-FP16-GI-NEXT: .cfi_offset w20, -168215; CHECK-FP16-GI-NEXT: .cfi_offset w30, -328216; CHECK-FP16-GI-NEXT: mov x19, x28217; CHECK-FP16-GI-NEXT: mov x20, x38218; CHECK-FP16-GI-NEXT: bl __floatuntitf8219; CHECK-FP16-GI-NEXT: mov x0, x198220; CHECK-FP16-GI-NEXT: mov x1, x208221; CHECK-FP16-GI-NEXT: str q0, [sp] // 16-byte Spill8222; CHECK-FP16-GI-NEXT: bl __floatuntitf8223; CHECK-FP16-GI-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload8224; CHECK-FP16-GI-NEXT: mov v1.16b, v0.16b8225; CHECK-FP16-GI-NEXT: ldr q0, [sp] // 16-byte Reload8226; CHECK-FP16-GI-NEXT: ldr x30, [sp, #16] // 8-byte Reload8227; CHECK-FP16-GI-NEXT: add sp, sp, #488228; CHECK-FP16-GI-NEXT: ret8229entry:8230 %c = uitofp <2 x i128> %a to <2 x fp128>8231 ret <2 x fp128> %c8232}8233