brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.8 KiB · c3b7161 Raw
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