brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.0 KiB · 6df8d2b Raw
214 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=arm64-apple-ios -mattr=+sve -o - %s | FileCheck %s --check-prefix=CHECK-LE-SD3; RUN: llc -mtriple=aarch64_be-unknown-linux -mattr=+sve -o - %s | FileCheck %s --check-prefix=CHECK-BE4; RUN: llc -mtriple=arm64-apple-ios -global-isel -mattr=+sve -o - %s | FileCheck %s --check-prefix=CHECK-LE-GI5 6define void @zext_of_concat(ptr %a, ptr %b, ptr %c, ptr %d) nounwind {7; CHECK-LE-SD-LABEL: zext_of_concat:8; CHECK-LE-SD:       ; %bb.0:9; CHECK-LE-SD-NEXT:    ldr d0, [x0]10; CHECK-LE-SD-NEXT:    ldr d1, [x1]11; CHECK-LE-SD-NEXT:    add.2s v0, v0, v112; CHECK-LE-SD-NEXT:    ldr q1, [x2]13; CHECK-LE-SD-NEXT:    ushll.2d v0, v0, #014; CHECK-LE-SD-NEXT:    add.4s v0, v0, v115; CHECK-LE-SD-NEXT:    str q0, [x2]16; CHECK-LE-SD-NEXT:    ret17;18; CHECK-BE-LABEL: zext_of_concat:19; CHECK-BE:       // %bb.0:20; CHECK-BE-NEXT:    ld1 { v0.2s }, [x0]21; CHECK-BE-NEXT:    ld1 { v1.2s }, [x1]22; CHECK-BE-NEXT:    add v0.2s, v0.2s, v1.2s23; CHECK-BE-NEXT:    movi v1.2d, #000000000000000024; CHECK-BE-NEXT:    zip1 v0.4s, v0.4s, v0.4s25; CHECK-BE-NEXT:    trn2 v0.4s, v0.4s, v1.4s26; CHECK-BE-NEXT:    ld1 { v1.4s }, [x2]27; CHECK-BE-NEXT:    add v0.4s, v0.4s, v1.4s28; CHECK-BE-NEXT:    st1 { v0.4s }, [x2]29; CHECK-BE-NEXT:    ret30;31; CHECK-LE-GI-LABEL: zext_of_concat:32; CHECK-LE-GI:       ; %bb.0:33; CHECK-LE-GI-NEXT:    ldr d0, [x0]34; CHECK-LE-GI-NEXT:    ldr d1, [x1]35; CHECK-LE-GI-NEXT:    movi.2d v3, #000000000000000036; CHECK-LE-GI-NEXT:  Lloh0:37; CHECK-LE-GI-NEXT:    adrp x8, lCPI0_0@PAGE38; CHECK-LE-GI-NEXT:    add.2s v2, v0, v139; CHECK-LE-GI-NEXT:  Lloh1:40; CHECK-LE-GI-NEXT:    ldr q0, [x8, lCPI0_0@PAGEOFF]41; CHECK-LE-GI-NEXT:    ldr q1, [x2]42; CHECK-LE-GI-NEXT:    tbl.16b v0, { v2, v3 }, v043; CHECK-LE-GI-NEXT:    add.4s v0, v0, v144; CHECK-LE-GI-NEXT:    str q0, [x2]45; CHECK-LE-GI-NEXT:    ret46; CHECK-LE-GI-NEXT:    .loh AdrpLdr Lloh0, Lloh147  %i0.a = load <2 x i32>, ptr %a48  %i0.b = load <2 x i32>, ptr %b49  %i0 = add <2 x i32> %i0.a, %i0.b50  %i1 = shufflevector <2 x i32> %i0, <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>51  %i2 = shufflevector <4 x i32> %i1, <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 1, i32 7>52  %i3 = load <4 x i32>, ptr %c53  %i4 = add <4 x i32> %i2, %i354  store <4 x i32> %i4, ptr %c55  ret void56}57 58define void @zext_of_concat_extrause(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e) nounwind {59; CHECK-LE-SD-LABEL: zext_of_concat_extrause:60; CHECK-LE-SD:       ; %bb.0:61; CHECK-LE-SD-NEXT:    ldr d0, [x1]62; CHECK-LE-SD-NEXT:    ldr d1, [x0]63; CHECK-LE-SD-NEXT:    add.2s v0, v1, v064; CHECK-LE-SD-NEXT:    movi.2d v1, #000000000000000065; CHECK-LE-SD-NEXT:    mov.d v0[1], v0[0]66; CHECK-LE-SD-NEXT:    zip1.4s v1, v0, v167; CHECK-LE-SD-NEXT:    str q0, [x4]68; CHECK-LE-SD-NEXT:    ldr q0, [x2]69; CHECK-LE-SD-NEXT:    add.4s v0, v1, v070; CHECK-LE-SD-NEXT:    str q0, [x2]71; CHECK-LE-SD-NEXT:    ret72;73; CHECK-BE-LABEL: zext_of_concat_extrause:74; CHECK-BE:       // %bb.0:75; CHECK-BE-NEXT:    ld1 { v0.2s }, [x1]76; CHECK-BE-NEXT:    ld1 { v1.2s }, [x0]77; CHECK-BE-NEXT:    movi v2.2d, #000000000000000078; CHECK-BE-NEXT:    add v0.2s, v1.2s, v0.2s79; CHECK-BE-NEXT:    mov v0.d[1], v0.d[0]80; CHECK-BE-NEXT:    zip1 v1.4s, v0.4s, v0.4s81; CHECK-BE-NEXT:    st1 { v0.4s }, [x4]82; CHECK-BE-NEXT:    trn2 v0.4s, v1.4s, v2.4s83; CHECK-BE-NEXT:    ld1 { v1.4s }, [x2]84; CHECK-BE-NEXT:    add v0.4s, v0.4s, v1.4s85; CHECK-BE-NEXT:    st1 { v0.4s }, [x2]86; CHECK-BE-NEXT:    ret87;88; CHECK-LE-GI-LABEL: zext_of_concat_extrause:89; CHECK-LE-GI:       ; %bb.0:90; CHECK-LE-GI-NEXT:    ldr d0, [x0]91; CHECK-LE-GI-NEXT:    ldr d1, [x1]92; CHECK-LE-GI-NEXT:    movi.2d v3, #000000000000000093; CHECK-LE-GI-NEXT:  Lloh2:94; CHECK-LE-GI-NEXT:    adrp x8, lCPI1_0@PAGE95; CHECK-LE-GI-NEXT:    add.2s v2, v0, v196; CHECK-LE-GI-NEXT:  Lloh3:97; CHECK-LE-GI-NEXT:    ldr q0, [x8, lCPI1_0@PAGEOFF]98; CHECK-LE-GI-NEXT:    mov.d v2[1], v2[0]99; CHECK-LE-GI-NEXT:    tbl.16b v0, { v2, v3 }, v0100; CHECK-LE-GI-NEXT:    str q2, [x4]101; CHECK-LE-GI-NEXT:    ldr q1, [x2]102; CHECK-LE-GI-NEXT:    add.4s v0, v0, v1103; CHECK-LE-GI-NEXT:    str q0, [x2]104; CHECK-LE-GI-NEXT:    ret105; CHECK-LE-GI-NEXT:    .loh AdrpLdr Lloh2, Lloh3106  %i0.a = load <2 x i32>, ptr %a107  %i0.b = load <2 x i32>, ptr %b108  %i0 = add <2 x i32> %i0.a, %i0.b109  %i1 = shufflevector <2 x i32> %i0, <2 x i32> %i0, <4 x i32> <i32 0, i32 1, i32 2, i32 3>110  store <4 x i32> %i1, ptr %e111  %i2 = shufflevector <4 x i32> %i1, <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 1, i32 7>112  %i3 = load <4 x i32>, ptr %c113  %i4 = add <4 x i32> %i2, %i3114  store <4 x i32> %i4, ptr %c115  ret void116}117 118define void @aext_of_concat(ptr %a, ptr %b, ptr %c, ptr %d) nounwind {119; CHECK-LE-SD-LABEL: aext_of_concat:120; CHECK-LE-SD:       ; %bb.0:121; CHECK-LE-SD-NEXT:    ldr d0, [x0]122; CHECK-LE-SD-NEXT:    ldr d1, [x1]123; CHECK-LE-SD-NEXT:    add.2s v0, v0, v1124; CHECK-LE-SD-NEXT:    ldr q1, [x2]125; CHECK-LE-SD-NEXT:    ushll.2d v0, v0, #0126; CHECK-LE-SD-NEXT:    add.4s v0, v0, v1127; CHECK-LE-SD-NEXT:    str q0, [x2]128; CHECK-LE-SD-NEXT:    ret129;130; CHECK-BE-LABEL: aext_of_concat:131; CHECK-BE:       // %bb.0:132; CHECK-BE-NEXT:    ld1 { v0.2s }, [x0]133; CHECK-BE-NEXT:    ld1 { v1.2s }, [x1]134; CHECK-BE-NEXT:    add v0.2s, v0.2s, v1.2s135; CHECK-BE-NEXT:    ld1 { v1.4s }, [x2]136; CHECK-BE-NEXT:    zip1 v0.4s, v0.4s, v0.4s137; CHECK-BE-NEXT:    add v0.4s, v0.4s, v1.4s138; CHECK-BE-NEXT:    st1 { v0.4s }, [x2]139; CHECK-BE-NEXT:    ret140;141; CHECK-LE-GI-LABEL: aext_of_concat:142; CHECK-LE-GI:       ; %bb.0:143; CHECK-LE-GI-NEXT:    ldr d0, [x0]144; CHECK-LE-GI-NEXT:    ldr d1, [x1]145; CHECK-LE-GI-NEXT:    add.2s v0, v0, v1146; CHECK-LE-GI-NEXT:    ldr q1, [x2]147; CHECK-LE-GI-NEXT:    zip1.4s v0, v0, v0148; CHECK-LE-GI-NEXT:    add.4s v0, v0, v1149; CHECK-LE-GI-NEXT:    str q0, [x2]150; CHECK-LE-GI-NEXT:    ret151  %i0.a = load <2 x i32>, ptr %a152  %i0.b = load <2 x i32>, ptr %b153  %i0 = add <2 x i32> %i0.a, %i0.b154  %i1 = shufflevector <2 x i32> %i0, <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>155  %i2 = shufflevector <4 x i32> %i1, <4 x i32> poison, <4 x i32> <i32 0, i32 undef, i32 1, i32 undef>156  %i3 = load <4 x i32>, ptr %c157  %i4 = add <4 x i32> %i2, %i3158  store <4 x i32> %i4, ptr %c159  ret void160}161 162define void @aext_of_concat_extrause(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e) nounwind {163; CHECK-LE-SD-LABEL: aext_of_concat_extrause:164; CHECK-LE-SD:       ; %bb.0:165; CHECK-LE-SD-NEXT:    ldr d0, [x1]166; CHECK-LE-SD-NEXT:    ldr d1, [x0]167; CHECK-LE-SD-NEXT:    add.2s v0, v1, v0168; CHECK-LE-SD-NEXT:    mov.16b v1, v0169; CHECK-LE-SD-NEXT:    mov.d v1[1], v0[0]170; CHECK-LE-SD-NEXT:    zip1.4s v0, v0, v0171; CHECK-LE-SD-NEXT:    str q1, [x4]172; CHECK-LE-SD-NEXT:    ldr q1, [x2]173; CHECK-LE-SD-NEXT:    add.4s v0, v0, v1174; CHECK-LE-SD-NEXT:    str q0, [x2]175; CHECK-LE-SD-NEXT:    ret176;177; CHECK-BE-LABEL: aext_of_concat_extrause:178; CHECK-BE:       // %bb.0:179; CHECK-BE-NEXT:    ld1 { v0.2s }, [x1]180; CHECK-BE-NEXT:    ld1 { v1.2s }, [x0]181; CHECK-BE-NEXT:    add v0.2s, v1.2s, v0.2s182; CHECK-BE-NEXT:    mov v1.16b, v0.16b183; CHECK-BE-NEXT:    mov v1.d[1], v0.d[0]184; CHECK-BE-NEXT:    zip1 v0.4s, v0.4s, v0.4s185; CHECK-BE-NEXT:    st1 { v1.4s }, [x4]186; CHECK-BE-NEXT:    ld1 { v1.4s }, [x2]187; CHECK-BE-NEXT:    add v0.4s, v0.4s, v1.4s188; CHECK-BE-NEXT:    st1 { v0.4s }, [x2]189; CHECK-BE-NEXT:    ret190;191; CHECK-LE-GI-LABEL: aext_of_concat_extrause:192; CHECK-LE-GI:       ; %bb.0:193; CHECK-LE-GI-NEXT:    ldr d0, [x0]194; CHECK-LE-GI-NEXT:    ldr d1, [x1]195; CHECK-LE-GI-NEXT:    add.2s v0, v0, v1196; CHECK-LE-GI-NEXT:    mov.d v0[1], v0[0]197; CHECK-LE-GI-NEXT:    zip1.4s v1, v0, v0198; CHECK-LE-GI-NEXT:    str q0, [x4]199; CHECK-LE-GI-NEXT:    ldr q0, [x2]200; CHECK-LE-GI-NEXT:    add.4s v0, v1, v0201; CHECK-LE-GI-NEXT:    str q0, [x2]202; CHECK-LE-GI-NEXT:    ret203  %i0.a = load <2 x i32>, ptr %a204  %i0.b = load <2 x i32>, ptr %b205  %i0 = add <2 x i32> %i0.a, %i0.b206  %i1 = shufflevector <2 x i32> %i0, <2 x i32> %i0, <4 x i32> <i32 0, i32 1, i32 2, i32 3>207  store <4 x i32> %i1, ptr %e208  %i2 = shufflevector <4 x i32> %i1, <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 undef, i32 1, i32 undef>209  %i3 = load <4 x i32>, ptr %c210  %i4 = add <4 x i32> %i2, %i3211  store <4 x i32> %i4, ptr %c212  ret void213}214