520 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64 | FileCheck %s --check-prefixes=CHECK3 4; Note: halves are tested in fp16-v8-instructions.ll.5 6define <4 x float> @sitofp_v4i8_float(<4 x i8> %a) {7; CHECK-LABEL: sitofp_v4i8_float:8; CHECK: // %bb.0:9; CHECK-NEXT: shl v0.4h, v0.4h, #810; CHECK-NEXT: sshr v0.4h, v0.4h, #811; CHECK-NEXT: sshll v0.4s, v0.4h, #012; CHECK-NEXT: scvtf v0.4s, v0.4s13; CHECK-NEXT: ret14 %1 = sitofp <4 x i8> %a to <4 x float>15 ret <4 x float> %116}17 18define <8 x float> @sitofp_v8i8_float(<8 x i8> %a) {19; CHECK-LABEL: sitofp_v8i8_float:20; CHECK: // %bb.0:21; CHECK-NEXT: zip1 v1.8b, v0.8b, v0.8b22; CHECK-NEXT: zip2 v0.8b, v0.8b, v0.8b23; CHECK-NEXT: shl v1.4h, v1.4h, #824; CHECK-NEXT: shl v0.4h, v0.4h, #825; CHECK-NEXT: sshr v1.4h, v1.4h, #826; CHECK-NEXT: sshr v0.4h, v0.4h, #827; CHECK-NEXT: sshll v1.4s, v1.4h, #028; CHECK-NEXT: sshll v2.4s, v0.4h, #029; CHECK-NEXT: scvtf v0.4s, v1.4s30; CHECK-NEXT: scvtf v1.4s, v2.4s31; CHECK-NEXT: ret32 %1 = sitofp <8 x i8> %a to <8 x float>33 ret <8 x float> %134}35 36define <16 x float> @sitofp_v16i8_float(<16 x i8> %a) {37; CHECK-LABEL: sitofp_v16i8_float:38; CHECK: // %bb.0:39; CHECK-NEXT: ext v1.16b, v0.16b, v0.16b, #840; CHECK-NEXT: zip1 v2.8b, v0.8b, v0.8b41; CHECK-NEXT: zip2 v0.8b, v0.8b, v0.8b42; CHECK-NEXT: zip1 v3.8b, v1.8b, v0.8b43; CHECK-NEXT: zip2 v1.8b, v1.8b, v0.8b44; CHECK-NEXT: shl v2.4h, v2.4h, #845; CHECK-NEXT: shl v0.4h, v0.4h, #846; CHECK-NEXT: sshr v2.4h, v2.4h, #847; CHECK-NEXT: shl v3.4h, v3.4h, #848; CHECK-NEXT: shl v1.4h, v1.4h, #849; CHECK-NEXT: sshr v0.4h, v0.4h, #850; CHECK-NEXT: sshll v2.4s, v2.4h, #051; CHECK-NEXT: sshr v3.4h, v3.4h, #852; CHECK-NEXT: sshr v1.4h, v1.4h, #853; CHECK-NEXT: sshll v4.4s, v0.4h, #054; CHECK-NEXT: scvtf v0.4s, v2.4s55; CHECK-NEXT: sshll v3.4s, v3.4h, #056; CHECK-NEXT: sshll v5.4s, v1.4h, #057; CHECK-NEXT: scvtf v1.4s, v4.4s58; CHECK-NEXT: scvtf v2.4s, v3.4s59; CHECK-NEXT: scvtf v3.4s, v5.4s60; CHECK-NEXT: ret61 %1 = sitofp <16 x i8> %a to <16 x float>62 ret <16 x float> %163}64 65define <8 x float> @sitofp_i16_float(<8 x i16> %a) {66; CHECK-LABEL: sitofp_i16_float:67; CHECK: // %bb.0:68; CHECK-NEXT: sshll2 v1.4s, v0.8h, #069; CHECK-NEXT: sshll v0.4s, v0.4h, #070; CHECK-NEXT: scvtf v1.4s, v1.4s71; CHECK-NEXT: scvtf v0.4s, v0.4s72; CHECK-NEXT: ret73 %1 = sitofp <8 x i16> %a to <8 x float>74 ret <8 x float> %175}76 77define <8 x float> @sitofp_i32_float(<8 x i32> %a) {78; CHECK-LABEL: sitofp_i32_float:79; CHECK: // %bb.0:80; CHECK-NEXT: scvtf v0.4s, v0.4s81; CHECK-NEXT: scvtf v1.4s, v1.4s82; CHECK-NEXT: ret83 %1 = sitofp <8 x i32> %a to <8 x float>84 ret <8 x float> %185}86 87define <8 x float> @sitofp_i64_float(<8 x i64> %a) {88; CHECK-LABEL: sitofp_i64_float:89; CHECK: // %bb.0:90; CHECK-NEXT: mov x8, v0.d[1]91; CHECK-NEXT: mov x9, v2.d[1]92; CHECK-NEXT: fmov x10, d093; CHECK-NEXT: fmov x11, d294; CHECK-NEXT: scvtf s0, x1095; CHECK-NEXT: mov x10, v3.d[1]96; CHECK-NEXT: scvtf s4, x897; CHECK-NEXT: scvtf s5, x998; CHECK-NEXT: scvtf s2, x1199; CHECK-NEXT: fmov x9, d1100; CHECK-NEXT: fmov x11, d3101; CHECK-NEXT: mov x8, v1.d[1]102; CHECK-NEXT: scvtf s1, x9103; CHECK-NEXT: mov v0.s[1], v4.s[0]104; CHECK-NEXT: scvtf s3, x11105; CHECK-NEXT: mov v2.s[1], v5.s[0]106; CHECK-NEXT: scvtf s4, x8107; CHECK-NEXT: mov v0.s[2], v1.s[0]108; CHECK-NEXT: scvtf s1, x10109; CHECK-NEXT: mov v2.s[2], v3.s[0]110; CHECK-NEXT: mov v0.s[3], v4.s[0]111; CHECK-NEXT: mov v2.s[3], v1.s[0]112; CHECK-NEXT: mov v1.16b, v2.16b113; CHECK-NEXT: ret114 %1 = sitofp <8 x i64> %a to <8 x float>115 ret <8 x float> %1116}117 118define <4 x float> @uitofp_v4i8_float(<4 x i8> %a) {119; CHECK-LABEL: uitofp_v4i8_float:120; CHECK: // %bb.0:121; CHECK-NEXT: bic v0.4h, #255, lsl #8122; CHECK-NEXT: ushll v0.4s, v0.4h, #0123; CHECK-NEXT: ucvtf v0.4s, v0.4s124; CHECK-NEXT: ret125 %1 = uitofp <4 x i8> %a to <4 x float>126 ret <4 x float> %1127}128 129define <8 x float> @uitofp_v8i8_float(<8 x i8> %a) {130; CHECK-LABEL: uitofp_v8i8_float:131; CHECK: // %bb.0:132; CHECK-NEXT: zip1 v1.8b, v0.8b, v0.8b133; CHECK-NEXT: zip2 v0.8b, v0.8b, v0.8b134; CHECK-NEXT: bic v1.4h, #255, lsl #8135; CHECK-NEXT: bic v0.4h, #255, lsl #8136; CHECK-NEXT: ushll v1.4s, v1.4h, #0137; CHECK-NEXT: ushll v2.4s, v0.4h, #0138; CHECK-NEXT: ucvtf v0.4s, v1.4s139; CHECK-NEXT: ucvtf v1.4s, v2.4s140; CHECK-NEXT: ret141 %1 = uitofp <8 x i8> %a to <8 x float>142 ret <8 x float> %1143}144 145define <16 x float> @uitofp_v16i8_float(<16 x i8> %a) {146; CHECK-LABEL: uitofp_v16i8_float:147; CHECK: // %bb.0:148; CHECK-NEXT: ext v1.16b, v0.16b, v0.16b, #8149; CHECK-NEXT: zip1 v2.8b, v0.8b, v0.8b150; CHECK-NEXT: zip2 v0.8b, v0.8b, v0.8b151; CHECK-NEXT: zip1 v3.8b, v1.8b, v0.8b152; CHECK-NEXT: zip2 v1.8b, v1.8b, v0.8b153; CHECK-NEXT: bic v2.4h, #255, lsl #8154; CHECK-NEXT: bic v0.4h, #255, lsl #8155; CHECK-NEXT: ushll v2.4s, v2.4h, #0156; CHECK-NEXT: bic v3.4h, #255, lsl #8157; CHECK-NEXT: bic v1.4h, #255, lsl #8158; CHECK-NEXT: ushll v4.4s, v0.4h, #0159; CHECK-NEXT: ucvtf v0.4s, v2.4s160; CHECK-NEXT: ushll v3.4s, v3.4h, #0161; CHECK-NEXT: ushll v5.4s, v1.4h, #0162; CHECK-NEXT: ucvtf v1.4s, v4.4s163; CHECK-NEXT: ucvtf v2.4s, v3.4s164; CHECK-NEXT: ucvtf v3.4s, v5.4s165; CHECK-NEXT: ret166 %1 = uitofp <16 x i8> %a to <16 x float>167 ret <16 x float> %1168}169 170define <8 x float> @uitofp_i16_float(<8 x i16> %a) {171; CHECK-LABEL: uitofp_i16_float:172; CHECK: // %bb.0:173; CHECK-NEXT: ushll2 v1.4s, v0.8h, #0174; CHECK-NEXT: ushll v0.4s, v0.4h, #0175; CHECK-NEXT: ucvtf v1.4s, v1.4s176; CHECK-NEXT: ucvtf v0.4s, v0.4s177; CHECK-NEXT: ret178 %1 = uitofp <8 x i16> %a to <8 x float>179 ret <8 x float> %1180}181 182define <8 x float> @uitofp_i32_float(<8 x i32> %a) {183; CHECK-LABEL: uitofp_i32_float:184; CHECK: // %bb.0:185; CHECK-NEXT: ucvtf v0.4s, v0.4s186; CHECK-NEXT: ucvtf v1.4s, v1.4s187; CHECK-NEXT: ret188 %1 = uitofp <8 x i32> %a to <8 x float>189 ret <8 x float> %1190}191 192define <8 x float> @uitofp_i64_float(<8 x i64> %a) {193; CHECK-LABEL: uitofp_i64_float:194; CHECK: // %bb.0:195; CHECK-NEXT: mov x8, v0.d[1]196; CHECK-NEXT: mov x9, v2.d[1]197; CHECK-NEXT: fmov x10, d0198; CHECK-NEXT: fmov x11, d2199; CHECK-NEXT: ucvtf s0, x10200; CHECK-NEXT: mov x10, v3.d[1]201; CHECK-NEXT: ucvtf s4, x8202; CHECK-NEXT: ucvtf s5, x9203; CHECK-NEXT: ucvtf s2, x11204; CHECK-NEXT: fmov x9, d1205; CHECK-NEXT: fmov x11, d3206; CHECK-NEXT: mov x8, v1.d[1]207; CHECK-NEXT: ucvtf s1, x9208; CHECK-NEXT: mov v0.s[1], v4.s[0]209; CHECK-NEXT: ucvtf s3, x11210; CHECK-NEXT: mov v2.s[1], v5.s[0]211; CHECK-NEXT: ucvtf s4, x8212; CHECK-NEXT: mov v0.s[2], v1.s[0]213; CHECK-NEXT: ucvtf s1, x10214; CHECK-NEXT: mov v2.s[2], v3.s[0]215; CHECK-NEXT: mov v0.s[3], v4.s[0]216; CHECK-NEXT: mov v2.s[3], v1.s[0]217; CHECK-NEXT: mov v1.16b, v2.16b218; CHECK-NEXT: ret219 %1 = uitofp <8 x i64> %a to <8 x float>220 ret <8 x float> %1221}222 223 224define <4 x double> @sitofp_v4i8_double(<4 x i8> %a) {225; CHECK-LABEL: sitofp_v4i8_double:226; CHECK: // %bb.0:227; CHECK-NEXT: ushll v0.4s, v0.4h, #0228; CHECK-NEXT: ext v1.16b, v0.16b, v0.16b, #8229; CHECK-NEXT: shl v0.2s, v0.2s, #24230; CHECK-NEXT: sshr v0.2s, v0.2s, #24231; CHECK-NEXT: shl v1.2s, v1.2s, #24232; CHECK-NEXT: sshll v0.2d, v0.2s, #0233; CHECK-NEXT: sshr v1.2s, v1.2s, #24234; CHECK-NEXT: scvtf v0.2d, v0.2d235; CHECK-NEXT: sshll v1.2d, v1.2s, #0236; CHECK-NEXT: scvtf v1.2d, v1.2d237; CHECK-NEXT: ret238 %1 = sitofp <4 x i8> %a to <4 x double>239 ret <4 x double> %1240}241 242define <8 x double> @sitofp_v8i8_double(<8 x i8> %a) {243; CHECK-LABEL: sitofp_v8i8_double:244; CHECK: // %bb.0:245; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0246; CHECK-NEXT: mov b1, v0.b[0]247; CHECK-NEXT: mov b2, v0.b[2]248; CHECK-NEXT: mov b3, v0.b[4]249; CHECK-NEXT: mov b4, v0.b[6]250; CHECK-NEXT: mov v1.b[4], v0.b[1]251; CHECK-NEXT: mov v2.b[4], v0.b[3]252; CHECK-NEXT: mov v3.b[4], v0.b[5]253; CHECK-NEXT: mov v4.b[4], v0.b[7]254; CHECK-NEXT: shl v0.2s, v1.2s, #24255; CHECK-NEXT: shl v1.2s, v2.2s, #24256; CHECK-NEXT: shl v2.2s, v3.2s, #24257; CHECK-NEXT: shl v3.2s, v4.2s, #24258; CHECK-NEXT: sshr v0.2s, v0.2s, #24259; CHECK-NEXT: sshr v1.2s, v1.2s, #24260; CHECK-NEXT: sshr v2.2s, v2.2s, #24261; CHECK-NEXT: sshr v3.2s, v3.2s, #24262; CHECK-NEXT: sshll v0.2d, v0.2s, #0263; CHECK-NEXT: sshll v1.2d, v1.2s, #0264; CHECK-NEXT: sshll v2.2d, v2.2s, #0265; CHECK-NEXT: sshll v3.2d, v3.2s, #0266; CHECK-NEXT: scvtf v0.2d, v0.2d267; CHECK-NEXT: scvtf v1.2d, v1.2d268; CHECK-NEXT: scvtf v2.2d, v2.2d269; CHECK-NEXT: scvtf v3.2d, v3.2d270; CHECK-NEXT: ret271 %1 = sitofp <8 x i8> %a to <8 x double>272 ret <8 x double> %1273}274 275define <16 x double> @sitofp_v16i8_double(<16 x i8> %a) {276; CHECK-LABEL: sitofp_v16i8_double:277; CHECK: // %bb.0:278; CHECK-NEXT: ext v1.16b, v0.16b, v0.16b, #8279; CHECK-NEXT: mov b2, v0.b[0]280; CHECK-NEXT: mov b3, v0.b[2]281; CHECK-NEXT: mov b4, v0.b[4]282; CHECK-NEXT: mov b5, v0.b[6]283; CHECK-NEXT: mov b6, v1.b[0]284; CHECK-NEXT: mov b7, v1.b[2]285; CHECK-NEXT: mov b16, v1.b[4]286; CHECK-NEXT: mov b17, v1.b[6]287; CHECK-NEXT: mov v2.b[4], v0.b[1]288; CHECK-NEXT: mov v3.b[4], v0.b[3]289; CHECK-NEXT: mov v4.b[4], v0.b[5]290; CHECK-NEXT: mov v5.b[4], v0.b[7]291; CHECK-NEXT: mov v6.b[4], v1.b[1]292; CHECK-NEXT: mov v7.b[4], v1.b[3]293; CHECK-NEXT: mov v16.b[4], v1.b[5]294; CHECK-NEXT: mov v17.b[4], v1.b[7]295; CHECK-NEXT: shl v0.2s, v2.2s, #24296; CHECK-NEXT: shl v1.2s, v3.2s, #24297; CHECK-NEXT: shl v2.2s, v4.2s, #24298; CHECK-NEXT: shl v3.2s, v5.2s, #24299; CHECK-NEXT: shl v4.2s, v6.2s, #24300; CHECK-NEXT: shl v5.2s, v7.2s, #24301; CHECK-NEXT: shl v6.2s, v16.2s, #24302; CHECK-NEXT: shl v7.2s, v17.2s, #24303; CHECK-NEXT: sshr v0.2s, v0.2s, #24304; CHECK-NEXT: sshr v1.2s, v1.2s, #24305; CHECK-NEXT: sshr v2.2s, v2.2s, #24306; CHECK-NEXT: sshr v3.2s, v3.2s, #24307; CHECK-NEXT: sshr v4.2s, v4.2s, #24308; CHECK-NEXT: sshr v5.2s, v5.2s, #24309; CHECK-NEXT: sshr v6.2s, v6.2s, #24310; CHECK-NEXT: sshr v7.2s, v7.2s, #24311; CHECK-NEXT: sshll v0.2d, v0.2s, #0312; CHECK-NEXT: sshll v1.2d, v1.2s, #0313; CHECK-NEXT: sshll v2.2d, v2.2s, #0314; CHECK-NEXT: sshll v3.2d, v3.2s, #0315; CHECK-NEXT: sshll v4.2d, v4.2s, #0316; CHECK-NEXT: sshll v5.2d, v5.2s, #0317; CHECK-NEXT: sshll v6.2d, v6.2s, #0318; CHECK-NEXT: sshll v7.2d, v7.2s, #0319; CHECK-NEXT: scvtf v0.2d, v0.2d320; CHECK-NEXT: scvtf v1.2d, v1.2d321; CHECK-NEXT: scvtf v2.2d, v2.2d322; CHECK-NEXT: scvtf v3.2d, v3.2d323; CHECK-NEXT: scvtf v4.2d, v4.2d324; CHECK-NEXT: scvtf v5.2d, v5.2d325; CHECK-NEXT: scvtf v6.2d, v6.2d326; CHECK-NEXT: scvtf v7.2d, v7.2d327; CHECK-NEXT: ret328 %1 = sitofp <16 x i8> %a to <16 x double>329 ret <16 x double> %1330}331 332define <8 x double> @sitofp_i16_double(<8 x i16> %a) {333; CHECK-LABEL: sitofp_i16_double:334; CHECK: // %bb.0:335; CHECK-NEXT: sshll v1.4s, v0.4h, #0336; CHECK-NEXT: sshll2 v0.4s, v0.8h, #0337; CHECK-NEXT: sshll v2.2d, v1.2s, #0338; CHECK-NEXT: sshll2 v3.2d, v0.4s, #0339; CHECK-NEXT: sshll2 v1.2d, v1.4s, #0340; CHECK-NEXT: sshll v4.2d, v0.2s, #0341; CHECK-NEXT: scvtf v0.2d, v2.2d342; CHECK-NEXT: scvtf v3.2d, v3.2d343; CHECK-NEXT: scvtf v1.2d, v1.2d344; CHECK-NEXT: scvtf v2.2d, v4.2d345; CHECK-NEXT: ret346 %1 = sitofp <8 x i16> %a to <8 x double>347 ret <8 x double> %1348}349 350define <8 x double> @sitofp_i32_double(<8 x i32> %a) {351; CHECK-LABEL: sitofp_i32_double:352; CHECK: // %bb.0:353; CHECK-NEXT: sshll v2.2d, v0.2s, #0354; CHECK-NEXT: sshll2 v3.2d, v0.4s, #0355; CHECK-NEXT: sshll2 v4.2d, v1.4s, #0356; CHECK-NEXT: sshll v5.2d, v1.2s, #0357; CHECK-NEXT: scvtf v0.2d, v2.2d358; CHECK-NEXT: scvtf v1.2d, v3.2d359; CHECK-NEXT: scvtf v3.2d, v4.2d360; CHECK-NEXT: scvtf v2.2d, v5.2d361; CHECK-NEXT: ret362 %1 = sitofp <8 x i32> %a to <8 x double>363 ret <8 x double> %1364}365 366define <8 x double> @sitofp_i64_double(<8 x i64> %a) {367; CHECK-LABEL: sitofp_i64_double:368; CHECK: // %bb.0:369; CHECK-NEXT: scvtf v0.2d, v0.2d370; CHECK-NEXT: scvtf v1.2d, v1.2d371; CHECK-NEXT: scvtf v2.2d, v2.2d372; CHECK-NEXT: scvtf v3.2d, v3.2d373; CHECK-NEXT: ret374 %1 = sitofp <8 x i64> %a to <8 x double>375 ret <8 x double> %1376}377 378define <4 x double> @uitofp_v4i8_double(<4 x i8> %a) {379; CHECK-LABEL: uitofp_v4i8_double:380; CHECK: // %bb.0:381; CHECK-NEXT: ushll v0.4s, v0.4h, #0382; CHECK-NEXT: movi d1, #0x0000ff000000ff383; CHECK-NEXT: ext v2.16b, v0.16b, v0.16b, #8384; CHECK-NEXT: and v0.8b, v0.8b, v1.8b385; CHECK-NEXT: and v1.8b, v2.8b, v1.8b386; CHECK-NEXT: ushll v0.2d, v0.2s, #0387; CHECK-NEXT: ushll v1.2d, v1.2s, #0388; CHECK-NEXT: ucvtf v0.2d, v0.2d389; CHECK-NEXT: ucvtf v1.2d, v1.2d390; CHECK-NEXT: ret391 %1 = uitofp <4 x i8> %a to <4 x double>392 ret <4 x double> %1393}394 395define <8 x double> @uitofp_v8i8_double(<8 x i8> %a) {396; CHECK-LABEL: uitofp_v8i8_double:397; CHECK: // %bb.0:398; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0399; CHECK-NEXT: mov b2, v0.b[0]400; CHECK-NEXT: mov b3, v0.b[2]401; CHECK-NEXT: mov b4, v0.b[4]402; CHECK-NEXT: mov b5, v0.b[6]403; CHECK-NEXT: movi d1, #0x0000ff000000ff404; CHECK-NEXT: mov v2.b[4], v0.b[1]405; CHECK-NEXT: mov v3.b[4], v0.b[3]406; CHECK-NEXT: mov v4.b[4], v0.b[5]407; CHECK-NEXT: mov v5.b[4], v0.b[7]408; CHECK-NEXT: and v0.8b, v2.8b, v1.8b409; CHECK-NEXT: and v2.8b, v3.8b, v1.8b410; CHECK-NEXT: and v3.8b, v4.8b, v1.8b411; CHECK-NEXT: and v1.8b, v5.8b, v1.8b412; CHECK-NEXT: ushll v0.2d, v0.2s, #0413; CHECK-NEXT: ushll v2.2d, v2.2s, #0414; CHECK-NEXT: ushll v3.2d, v3.2s, #0415; CHECK-NEXT: ushll v4.2d, v1.2s, #0416; CHECK-NEXT: ucvtf v0.2d, v0.2d417; CHECK-NEXT: ucvtf v1.2d, v2.2d418; CHECK-NEXT: ucvtf v2.2d, v3.2d419; CHECK-NEXT: ucvtf v3.2d, v4.2d420; CHECK-NEXT: ret421 %1 = uitofp <8 x i8> %a to <8 x double>422 ret <8 x double> %1423}424 425define <16 x double> @uitofp_v16i8_double(<16 x i8> %a) {426; CHECK-LABEL: uitofp_v16i8_double:427; CHECK: // %bb.0:428; CHECK-NEXT: ext v2.16b, v0.16b, v0.16b, #8429; CHECK-NEXT: mov b3, v0.b[0]430; CHECK-NEXT: mov b4, v0.b[2]431; CHECK-NEXT: mov b5, v0.b[4]432; CHECK-NEXT: mov b6, v0.b[6]433; CHECK-NEXT: movi d1, #0x0000ff000000ff434; CHECK-NEXT: mov b7, v2.b[0]435; CHECK-NEXT: mov b16, v2.b[2]436; CHECK-NEXT: mov b17, v2.b[4]437; CHECK-NEXT: mov b18, v2.b[6]438; CHECK-NEXT: mov v3.b[4], v0.b[1]439; CHECK-NEXT: mov v4.b[4], v0.b[3]440; CHECK-NEXT: mov v5.b[4], v0.b[5]441; CHECK-NEXT: mov v6.b[4], v0.b[7]442; CHECK-NEXT: mov v7.b[4], v2.b[1]443; CHECK-NEXT: mov v16.b[4], v2.b[3]444; CHECK-NEXT: mov v17.b[4], v2.b[5]445; CHECK-NEXT: mov v18.b[4], v2.b[7]446; CHECK-NEXT: and v0.8b, v3.8b, v1.8b447; CHECK-NEXT: and v2.8b, v4.8b, v1.8b448; CHECK-NEXT: and v3.8b, v5.8b, v1.8b449; CHECK-NEXT: and v4.8b, v6.8b, v1.8b450; CHECK-NEXT: and v5.8b, v7.8b, v1.8b451; CHECK-NEXT: and v6.8b, v16.8b, v1.8b452; CHECK-NEXT: and v7.8b, v17.8b, v1.8b453; CHECK-NEXT: and v1.8b, v18.8b, v1.8b454; CHECK-NEXT: ushll v0.2d, v0.2s, #0455; CHECK-NEXT: ushll v2.2d, v2.2s, #0456; CHECK-NEXT: ushll v3.2d, v3.2s, #0457; CHECK-NEXT: ushll v4.2d, v4.2s, #0458; CHECK-NEXT: ushll v5.2d, v5.2s, #0459; CHECK-NEXT: ushll v6.2d, v6.2s, #0460; CHECK-NEXT: ushll v7.2d, v7.2s, #0461; CHECK-NEXT: ushll v16.2d, v1.2s, #0462; CHECK-NEXT: ucvtf v0.2d, v0.2d463; CHECK-NEXT: ucvtf v1.2d, v2.2d464; CHECK-NEXT: ucvtf v2.2d, v3.2d465; CHECK-NEXT: ucvtf v3.2d, v4.2d466; CHECK-NEXT: ucvtf v4.2d, v5.2d467; CHECK-NEXT: ucvtf v5.2d, v6.2d468; CHECK-NEXT: ucvtf v6.2d, v7.2d469; CHECK-NEXT: ucvtf v7.2d, v16.2d470; CHECK-NEXT: ret471 %1 = uitofp <16 x i8> %a to <16 x double>472 ret <16 x double> %1473}474 475define <8 x double> @uitofp_i16_double(<8 x i16> %a) {476; CHECK-LABEL: uitofp_i16_double:477; CHECK: // %bb.0:478; CHECK-NEXT: ushll v1.4s, v0.4h, #0479; CHECK-NEXT: ushll2 v0.4s, v0.8h, #0480; CHECK-NEXT: ushll v2.2d, v1.2s, #0481; CHECK-NEXT: ushll2 v3.2d, v0.4s, #0482; CHECK-NEXT: ushll2 v1.2d, v1.4s, #0483; CHECK-NEXT: ushll v4.2d, v0.2s, #0484; CHECK-NEXT: ucvtf v0.2d, v2.2d485; CHECK-NEXT: ucvtf v3.2d, v3.2d486; CHECK-NEXT: ucvtf v1.2d, v1.2d487; CHECK-NEXT: ucvtf v2.2d, v4.2d488; CHECK-NEXT: ret489 %1 = uitofp <8 x i16> %a to <8 x double>490 ret <8 x double> %1491}492 493define <8 x double> @uitofp_i32_double(<8 x i32> %a) {494; CHECK-LABEL: uitofp_i32_double:495; CHECK: // %bb.0:496; CHECK-NEXT: ushll v2.2d, v0.2s, #0497; CHECK-NEXT: ushll2 v3.2d, v0.4s, #0498; CHECK-NEXT: ushll2 v4.2d, v1.4s, #0499; CHECK-NEXT: ushll v5.2d, v1.2s, #0500; CHECK-NEXT: ucvtf v0.2d, v2.2d501; CHECK-NEXT: ucvtf v1.2d, v3.2d502; CHECK-NEXT: ucvtf v3.2d, v4.2d503; CHECK-NEXT: ucvtf v2.2d, v5.2d504; CHECK-NEXT: ret505 %1 = uitofp <8 x i32> %a to <8 x double>506 ret <8 x double> %1507}508 509define <8 x double> @uitofp_i64_double(<8 x i64> %a) {510; CHECK-LABEL: uitofp_i64_double:511; CHECK: // %bb.0:512; CHECK-NEXT: ucvtf v0.2d, v0.2d513; CHECK-NEXT: ucvtf v1.2d, v1.2d514; CHECK-NEXT: ucvtf v2.2d, v2.2d515; CHECK-NEXT: ucvtf v3.2d, v3.2d516; CHECK-NEXT: ret517 %1 = uitofp <8 x i64> %a to <8 x double>518 ret <8 x double> %1519}520