brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.8 KiB · 91c4659 Raw
402 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s --check-prefixes=CHECK3 4; LEGAL INTEGER TYPES5 6define <vscale x 2 x i64> @stepvector_nxv2i64() {7; CHECK-LABEL: stepvector_nxv2i64:8; CHECK:       // %bb.0:9; CHECK-NEXT:    index z0.d, #0, #110; CHECK-NEXT:    ret11  %1 = call <vscale x 2 x i64> @llvm.stepvector.nxv2i64()12  ret <vscale x 2 x i64> %113}14 15define <vscale x 4 x i32> @stepvector_nxv4i32() {16; CHECK-LABEL: stepvector_nxv4i32:17; CHECK:       // %bb.0:18; CHECK-NEXT:    index z0.s, #0, #119; CHECK-NEXT:    ret20  %1 = call <vscale x 4 x i32> @llvm.stepvector.nxv4i32()21  ret <vscale x 4 x i32> %122}23 24define <vscale x 8 x i16> @stepvector_nxv8i16() {25; CHECK-LABEL: stepvector_nxv8i16:26; CHECK:       // %bb.0:27; CHECK-NEXT:    index z0.h, #0, #128; CHECK-NEXT:    ret29  %1 = call <vscale x 8 x i16> @llvm.stepvector.nxv8i16()30  ret <vscale x 8 x i16> %131}32 33define <vscale x 16 x i8> @stepvector_nxv16i8() {34; CHECK-LABEL: stepvector_nxv16i8:35; CHECK:       // %bb.0:36; CHECK-NEXT:    index z0.b, #0, #137; CHECK-NEXT:    ret38  %1 = call <vscale x 16 x i8> @llvm.stepvector.nxv16i8()39  ret <vscale x 16 x i8> %140}41 42; ILLEGAL INTEGER TYPES43 44define <vscale x 6 x i64> @stepvector_nxv6i64() {45; CHECK-LABEL: stepvector_nxv6i64:46; CHECK:       // %bb.0:47; CHECK-NEXT:    index z0.d, #0, #148; CHECK-NEXT:    mov z2.d, z0.d49; CHECK-NEXT:    mov z1.d, z0.d50; CHECK-NEXT:    incd z1.d51; CHECK-NEXT:    incd z2.d, all, mul #252; CHECK-NEXT:    ret53  %1 = call <vscale x 6 x i64> @llvm.stepvector.nxv6i64()54  ret <vscale x 6 x i64> %155}56 57define <vscale x 4 x i64> @stepvector_nxv4i64() {58; CHECK-LABEL: stepvector_nxv4i64:59; CHECK:       // %bb.0:60; CHECK-NEXT:    index z0.d, #0, #161; CHECK-NEXT:    mov z1.d, z0.d62; CHECK-NEXT:    incd z1.d63; CHECK-NEXT:    ret64  %1 = call <vscale x 4 x i64> @llvm.stepvector.nxv4i64()65  ret <vscale x 4 x i64> %166}67 68define <vscale x 16 x i32> @stepvector_nxv16i32() {69; CHECK-LABEL: stepvector_nxv16i32:70; CHECK:       // %bb.0:71; CHECK-NEXT:    index z0.s, #0, #172; CHECK-NEXT:    mov z1.d, z0.d73; CHECK-NEXT:    mov z2.d, z0.d74; CHECK-NEXT:    incw z1.s75; CHECK-NEXT:    incw z2.s, all, mul #276; CHECK-NEXT:    mov z3.d, z1.d77; CHECK-NEXT:    incw z3.s, all, mul #278; CHECK-NEXT:    ret79  %1 = call <vscale x 16 x i32> @llvm.stepvector.nxv16i32()80  ret <vscale x 16 x i32> %181}82 83define <vscale x 3 x i32> @stepvector_nxv3i32() {84; CHECK-LABEL: stepvector_nxv3i32:85; CHECK:       // %bb.0:86; CHECK-NEXT:    index z0.s, #0, #187; CHECK-NEXT:    ret88  %1 = call <vscale x 3 x i32> @llvm.stepvector.nxv3i32()89  ret <vscale x 3 x i32> %190}91 92define <vscale x 2 x i32> @stepvector_nxv2i32() {93; CHECK-LABEL: stepvector_nxv2i32:94; CHECK:       // %bb.0:95; CHECK-NEXT:    index z0.d, #0, #196; CHECK-NEXT:    ret97  %1 = call <vscale x 2 x i32> @llvm.stepvector.nxv2i32()98  ret <vscale x 2 x i32> %199}100 101define <vscale x 4 x i16> @stepvector_nxv4i16() {102; CHECK-LABEL: stepvector_nxv4i16:103; CHECK:       // %bb.0:104; CHECK-NEXT:    index z0.s, #0, #1105; CHECK-NEXT:    ret106  %1 = call <vscale x 4 x i16> @llvm.stepvector.nxv4i16()107  ret <vscale x 4 x i16> %1108}109 110define <vscale x 8 x i8> @stepvector_nxv8i8() {111; CHECK-LABEL: stepvector_nxv8i8:112; CHECK:       // %bb.0:113; CHECK-NEXT:    index z0.h, #0, #1114; CHECK-NEXT:    ret115  %1 = call <vscale x 8 x i8> @llvm.stepvector.nxv8i8()116  ret <vscale x 8 x i8> %1117}118 119define <vscale x 8 x i8> @add_stepvector_nxv8i8() {120; CHECK-LABEL: add_stepvector_nxv8i8:121; CHECK:       // %bb.0:122; CHECK-NEXT:    index z0.h, #0, #2123; CHECK-NEXT:    ret124  %1 = call <vscale x 8 x i8> @llvm.stepvector.nxv8i8()125  %2 = call <vscale x 8 x i8> @llvm.stepvector.nxv8i8()126  %3 = add <vscale x 8 x i8> %1, %2127  ret <vscale x 8 x i8> %3128}129 130define <vscale x 8 x i8> @add_stepvector_nxv8i8_1(<vscale x 8 x i8> %p) {131; CHECK-LABEL: add_stepvector_nxv8i8_1:132; CHECK:       // %bb.0:133; CHECK-NEXT:    index z1.h, #0, #2134; CHECK-NEXT:    add z0.h, z0.h, z1.h135; CHECK-NEXT:    ret136  %1 = call <vscale x 8 x i8> @llvm.stepvector.nxv8i8()137  %2 = add <vscale x 8 x i8> %p, %1138  %3 = call <vscale x 8 x i8> @llvm.stepvector.nxv8i8()139  %4 = add <vscale x 8 x i8> %2, %3140  ret <vscale x 8 x i8> %4141}142 143define <vscale x 8 x i8> @add_stepvector_nxv8i8_2() {144; CHECK-LABEL: add_stepvector_nxv8i8_2:145; CHECK:       // %bb.0:146; CHECK-NEXT:    index z0.h, #2, #1147; CHECK-NEXT:    ret148  %2 = call <vscale x 8 x i8> @llvm.stepvector.nxv8i8()149  %3 = add <vscale x 8 x i8> %2, splat(i8 2)150  ret <vscale x 8 x i8> %3151}152 153define <vscale x 8 x i8> @add_stepvector_nxv8i8_2_commutative() {154; CHECK-LABEL: add_stepvector_nxv8i8_2_commutative:155; CHECK:       // %bb.0:156; CHECK-NEXT:    index z0.h, #2, #1157; CHECK-NEXT:    ret158  %2 = call <vscale x 8 x i8> @llvm.stepvector.nxv8i8()159  %3 = add <vscale x 8 x i8> splat(i8 2), %2160  ret <vscale x 8 x i8> %3161}162 163define <vscale x 8 x i16> @add_stepvector_nxv8i16_1(i16 %data) {164; CHECK-LABEL: add_stepvector_nxv8i16_1:165; CHECK:       // %bb.0:166; CHECK-NEXT:    index z0.h, w0, #1167; CHECK-NEXT:    ret168  %1 = insertelement <vscale x 8 x i16> poison, i16 %data, i32 0169  %2 = shufflevector <vscale x 8 x i16> %1, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer170  %3 = call <vscale x 8 x i16> @llvm.stepvector.nxv8i16()171  %4 = add <vscale x 8 x i16> %3, %2172  ret <vscale x 8 x i16> %4173}174 175define <vscale x 4 x i32> @add_stepvector_nxv4i32_1(i32 %data) {176; CHECK-LABEL: add_stepvector_nxv4i32_1:177; CHECK:       // %bb.0:178; CHECK-NEXT:    index z0.s, w0, #1179; CHECK-NEXT:    ret180  %1 = insertelement <vscale x 4 x i32> poison, i32 %data, i32 0181  %2 = shufflevector <vscale x 4 x i32> %1, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer182  %3 = call <vscale x 4 x i32> @llvm.stepvector.nxv4i32()183  %4 = add <vscale x 4 x i32> %3, %2184  ret <vscale x 4 x i32> %4185}186 187define <vscale x 4 x i32> @multiple_use_stepvector_nxv4i32_1(i32 %data) {188; CHECK-LABEL: multiple_use_stepvector_nxv4i32_1:189; CHECK:       // %bb.0:190; CHECK-NEXT:    index z0.s, w0, #1191; CHECK-NEXT:    mov z1.s, w0192; CHECK-NEXT:    ptrue p0.s193; CHECK-NEXT:    mul z1.s, p0/m, z1.s, z0.s194; CHECK-NEXT:    sub z0.s, z1.s, z0.s195; CHECK-NEXT:    ret196  %1 = insertelement <vscale x 4 x i32> poison, i32 %data, i32 0197  %2 = shufflevector <vscale x 4 x i32> %1, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer198  %3 = call <vscale x 4 x i32> @llvm.stepvector.nxv4i32()199  %4 = add <vscale x 4 x i32> %3, %2200  %5 = mul <vscale x 4 x i32> %2, %4201  %6 = sub <vscale x 4 x i32> %5, %4202  ret <vscale x 4 x i32> %6203}204 205define <vscale x 2 x i64> @add_stepvector_nxv2i64_1(i64 %data) {206; CHECK-LABEL: add_stepvector_nxv2i64_1:207; CHECK:       // %bb.0:208; CHECK-NEXT:    index z0.d, x0, #1209; CHECK-NEXT:    ret210  %1 = insertelement <vscale x 2 x i64> poison, i64 %data, i32 0211  %2 = shufflevector <vscale x 2 x i64> %1, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer212  %3 = call <vscale x 2 x i64> @llvm.stepvector.nxv2i64()213  %4 = add <vscale x 2 x i64> %2, %3214  ret <vscale x 2 x i64> %4215}216 217define <vscale x 2 x i64> @multiple_use_stepvector_nxv2i64_1(i64 %data) {218; CHECK-LABEL: multiple_use_stepvector_nxv2i64_1:219; CHECK:       // %bb.0:220; CHECK-NEXT:    index z0.d, #0, #1221; CHECK-NEXT:    mov z1.d, x0222; CHECK-NEXT:    ptrue p0.d223; CHECK-NEXT:    add z1.d, z0.d, z1.d224; CHECK-NEXT:    mul z0.d, p0/m, z0.d, z1.d225; CHECK-NEXT:    ret226  %1 = insertelement <vscale x 2 x i64> poison, i64 %data, i32 0227  %2 = shufflevector <vscale x 2 x i64> %1, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer228  %3 = call <vscale x 2 x i64> @llvm.stepvector.nxv2i64()229  %4 = add <vscale x 2 x i64> %2, %3230  %5 = mul <vscale x 2 x i64> %4, %3231  ret <vscale x 2 x i64> %5232}233 234define <vscale x 8 x i8> @mul_stepvector_nxv8i8() {235; CHECK-LABEL: mul_stepvector_nxv8i8:236; CHECK:       // %bb.0:237; CHECK-NEXT:    index z0.h, #0, #2238; CHECK-NEXT:    ret239  %2 = call <vscale x 8 x i8> @llvm.stepvector.nxv8i8()240  %3 = mul <vscale x 8 x i8> %2, splat(i8 2)241  ret <vscale x 8 x i8> %3242}243 244define <vscale x 2 x i64> @mul_stepvector_nxv2i64() {245; CHECK-LABEL: mul_stepvector_nxv2i64:246; CHECK:       // %bb.0:247; CHECK-NEXT:    mov w8, #2222 // =0x8ae248; CHECK-NEXT:    index z0.d, #0, x8249; CHECK-NEXT:    ret250  %2 = call <vscale x 2 x i64> @llvm.stepvector.nxv2i64()251  %3 = mul <vscale x 2 x i64> %2, splat(i64 2222)252  ret <vscale x 2 x i64> %3253}254 255define <vscale x 2 x i64> @mul_stepvector_bigconst_nxv2i64() {256; CHECK-LABEL: mul_stepvector_bigconst_nxv2i64:257; CHECK:       // %bb.0:258; CHECK-NEXT:    mov x8, #146028888064 // =0x2200000000259; CHECK-NEXT:    index z0.d, #0, x8260; CHECK-NEXT:    ret261  %2 = call <vscale x 2 x i64> @llvm.stepvector.nxv2i64()262  %3 = mul <vscale x 2 x i64> %2, splat(i64 146028888064)263  ret <vscale x 2 x i64> %3264}265 266define <vscale x 2 x i64> @mul_add_stepvector_nxv2i64(i64 %x) {267; CHECK-LABEL: mul_add_stepvector_nxv2i64:268; CHECK:       // %bb.0:269; CHECK-NEXT:    mov w8, #2222 // =0x8ae270; CHECK-NEXT:    index z0.d, x0, x8271; CHECK-NEXT:    ret272  %2 = call <vscale x 2 x i64> @llvm.stepvector.nxv2i64()273  %3 = mul <vscale x 2 x i64> %2, splat(i64 2222)274  %4 = insertelement <vscale x 2 x i64> poison, i64 %x, i32 0275  %5 = shufflevector <vscale x 2 x i64> %4, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer276  %6 = add <vscale x 2 x i64> %3, %5277  ret <vscale x 2 x i64> %6278}279 280define <vscale x 2 x i64> @mul_add_stepvector_nxv2i64_commutative(i64 %x, i64 %y) {281; CHECK-LABEL: mul_add_stepvector_nxv2i64_commutative:282; CHECK:       // %bb.0:283; CHECK-NEXT:    index z0.d, x0, x1284; CHECK-NEXT:    ret285  %1 = insertelement <vscale x 2 x i64> poison, i64 %y, i32 0286  %2 = shufflevector <vscale x 2 x i64> %1, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer287  %3 = call <vscale x 2 x i64> @llvm.stepvector.nxv2i64()288  %4 = mul <vscale x 2 x i64> %2, %3289  %5 = insertelement <vscale x 2 x i64> poison, i64 %x, i32 0290  %6 = shufflevector <vscale x 2 x i64> %5, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer291  %7 = add <vscale x 2 x i64> %6, %4292  ret <vscale x 2 x i64> %7293}294 295define <vscale x 2 x i64> @mul_add_stepvector_bigconst_nxv2i64(i64 %x) {296; CHECK-LABEL: mul_add_stepvector_bigconst_nxv2i64:297; CHECK:       // %bb.0:298; CHECK-NEXT:    mov x8, #146028888064 // =0x2200000000299; CHECK-NEXT:    index z0.d, x0, x8300; CHECK-NEXT:    ret301  %2 = call <vscale x 2 x i64> @llvm.stepvector.nxv2i64()302  %3 = mul <vscale x 2 x i64> %2, splat(i64 146028888064)303  %4 = insertelement <vscale x 2 x i64> poison, i64 %x, i32 0304  %5 = shufflevector <vscale x 2 x i64> %4, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer305  %6 = add <vscale x 2 x i64> %3, %5306  ret <vscale x 2 x i64> %6307}308 309define <vscale x 2 x i64> @mul_mul_add_stepvector_nxv2i64(i64 %x, i64 %y) {310; CHECK-LABEL: mul_mul_add_stepvector_nxv2i64:311; CHECK:       // %bb.0:312; CHECK-NEXT:    add x8, x0, x0, lsl #1313; CHECK-NEXT:    index z0.d, x1, x8314; CHECK-NEXT:    ret315  %xmul = mul i64 %x, 3316  %1 = insertelement <vscale x 2 x i64> poison, i64 %xmul, i32 0317  %2 = shufflevector <vscale x 2 x i64> %1, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer318  %3 = call <vscale x 2 x i64> @llvm.stepvector.nxv2i64()319  %4 = mul <vscale x 2 x i64> %3, %2320  %5 = insertelement <vscale x 2 x i64> poison, i64 %y, i32 0321  %6 = shufflevector <vscale x 2 x i64> %5, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer322  %7 = add <vscale x 2 x i64> %4, %6323  ret <vscale x 2 x i64> %7324}325 326define <vscale x 8 x i8> @shl_stepvector_nxv8i8() {327; CHECK-LABEL: shl_stepvector_nxv8i8:328; CHECK:       // %bb.0:329; CHECK-NEXT:    index z0.h, #0, #4330; CHECK-NEXT:    ret331  %2 = call <vscale x 8 x i8> @llvm.stepvector.nxv8i8()332  %3 = shl <vscale x 8 x i8> %2, splat(i8 2)333  ret <vscale x 8 x i8> %3334}335 336define <vscale x 8 x i16> @sub_multiple_use_stepvector_nxv8i16() {337; CHECK-LABEL: sub_multiple_use_stepvector_nxv8i16:338; CHECK:       // %bb.0:339; CHECK-NEXT:    index z0.h, #0, #1340; CHECK-NEXT:    ptrue p0.h341; CHECK-NEXT:    mov z1.d, z0.d342; CHECK-NEXT:    subr z1.h, z1.h, #2 // =0x2343; CHECK-NEXT:    lsl z0.h, p0/m, z0.h, z1.h344; CHECK-NEXT:    ret345  %2 = call <vscale x 8 x i16> @llvm.stepvector.nxv8i16()346  %3 = sub <vscale x 8 x i16> splat(i16 2), %2347  %4 = shl <vscale x 8 x i16> %2, %3348  ret <vscale x 8 x i16> %4349}350 351define <vscale x 8 x i16> @sub_stepvector_nxv8i16() {352; CHECK-LABEL: sub_stepvector_nxv8i16:353; CHECK:       // %bb.0:354; CHECK-NEXT:    index z0.h, #2, #-1355; CHECK-NEXT:    ret356  %2 = call <vscale x 8 x i16> @llvm.stepvector.nxv8i16()357  %3 = sub <vscale x 8 x i16> splat(i16 2), %2358  ret <vscale x 8 x i16> %3359}360 361define <vscale x 8 x i8> @promote_sub_stepvector_nxv8i8() {362; CHECK-LABEL: promote_sub_stepvector_nxv8i8:363; CHECK:       // %bb.0:364; CHECK-NEXT:    index z0.h, #2, #-1365; CHECK-NEXT:    ret366  %2 = call <vscale x 8 x i8> @llvm.stepvector.nxv8i8()367  %3 = sub <vscale x 8 x i8> splat(i8 2), %2368  ret <vscale x 8 x i8> %3369}370 371define <vscale x 16 x i32> @split_sub_stepvector_nxv16i32() {372; CHECK-LABEL: split_sub_stepvector_nxv16i32:373; CHECK:       // %bb.0:374; CHECK-NEXT:    cntw x8375; CHECK-NEXT:    index z0.s, #0, #-1376; CHECK-NEXT:    neg x8, x8377; CHECK-NEXT:    mov z1.s, w8378; CHECK-NEXT:    cnth x8379; CHECK-NEXT:    neg x8, x8380; CHECK-NEXT:    mov z3.s, w8381; CHECK-NEXT:    add z1.s, z0.s, z1.s382; CHECK-NEXT:    add z2.s, z0.s, z3.s383; CHECK-NEXT:    add z3.s, z1.s, z3.s384; CHECK-NEXT:    ret385  %1 = call <vscale x 16 x i32> @llvm.stepvector.nxv16i32()386  %2 = sub <vscale x 16 x i32> zeroinitializer, %1387  ret <vscale x 16 x i32> %2388}389 390declare <vscale x 2 x i64> @llvm.stepvector.nxv2i64()391declare <vscale x 4 x i32> @llvm.stepvector.nxv4i32()392declare <vscale x 8 x i16> @llvm.stepvector.nxv8i16()393declare <vscale x 16 x i8> @llvm.stepvector.nxv16i8()394 395declare <vscale x 6 x i64> @llvm.stepvector.nxv6i64()396declare <vscale x 4 x i64> @llvm.stepvector.nxv4i64()397declare <vscale x 16 x i32> @llvm.stepvector.nxv16i32()398declare <vscale x 3 x i32> @llvm.stepvector.nxv3i32()399declare <vscale x 2 x i32> @llvm.stepvector.nxv2i32()400declare <vscale x 8 x i8> @llvm.stepvector.nxv8i8()401declare <vscale x 4 x i16> @llvm.stepvector.nxv4i16()402