brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.4 KiB · 620aca1 Raw
282 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=riscv32 -mattr=+m,+v,+f,+d,+zvfh,+zfbfmin,+zvfbfmin -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH,RV323; RUN: llc -mtriple=riscv64 -mattr=+m,+v,+f,+d,+zvfh,+zfbfmin,+zvfbfmin -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH,RV644; RUN: llc -mtriple=riscv32 -mattr=+m,+v,+f,+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,RV325; RUN: llc -mtriple=riscv64 -mattr=+m,+v,+f,+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,RV646 7target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"8 9define <2 x i8> @vslide1down_2xi8(<2 x i8> %v, i8 %b) {10; CHECK-LABEL: vslide1down_2xi8:11; CHECK:       # %bb.0:12; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma13; CHECK-NEXT:    vslide1down.vx v8, v8, a014; CHECK-NEXT:    ret15  %vb = insertelement <2 x i8> poison, i8 %b, i64 016  %v1 = shufflevector <2 x i8> %v, <2 x i8> %vb, <2 x i32> <i32 1, i32 2>17  ret <2 x i8> %v118}19 20define <4 x i8> @vslide1down_4xi8(<4 x i8> %v, i8 %b) {21; CHECK-LABEL: vslide1down_4xi8:22; CHECK:       # %bb.0:23; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma24; CHECK-NEXT:    vslide1down.vx v8, v8, a025; CHECK-NEXT:    ret26  %vb = insertelement <4 x i8> poison, i8 %b, i64 027  %v1 = shufflevector <4 x i8> %v, <4 x i8> %vb, <4 x i32> <i32 1, i32 2, i32 3, i32 4>28  ret <4 x i8> %v129}30 31define <4 x i8> @vslide1down_4xi8_swapped(<4 x i8> %v, i8 %b) {32; CHECK-LABEL: vslide1down_4xi8_swapped:33; CHECK:       # %bb.0:34; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma35; CHECK-NEXT:    vslide1down.vx v8, v8, a036; CHECK-NEXT:    ret37  %vb = insertelement <4 x i8> poison, i8 %b, i64 038  %v1 = shufflevector <4 x i8> %vb, <4 x i8> %v, <4 x i32> <i32 5, i32 6, i32 7, i32 0>39  ret <4 x i8> %v140}41 42define <2 x i16> @vslide1down_2xi16(<2 x i16> %v, i16 %b) {43; CHECK-LABEL: vslide1down_2xi16:44; CHECK:       # %bb.0:45; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma46; CHECK-NEXT:    vslide1down.vx v8, v8, a047; CHECK-NEXT:    ret48  %vb = insertelement <2 x i16> poison, i16 %b, i64 049  %v1 = shufflevector <2 x i16> %v, <2 x i16> %vb, <2 x i32> <i32 1, i32 2>50  ret <2 x i16> %v151}52 53define <4 x i16> @vslide1down_4xi16(<4 x i16> %v, i16 %b) {54; CHECK-LABEL: vslide1down_4xi16:55; CHECK:       # %bb.0:56; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma57; CHECK-NEXT:    vslide1down.vx v8, v8, a058; CHECK-NEXT:    ret59  %vb = insertelement <4 x i16> poison, i16 %b, i64 060  %v1 = shufflevector <4 x i16> %v, <4 x i16> %vb, <4 x i32> <i32 1, i32 2, i32 3, i32 4>61  ret <4 x i16> %v162}63 64define <2 x i32> @vslide1down_2xi32(<2 x i32> %v, i32 %b) {65; CHECK-LABEL: vslide1down_2xi32:66; CHECK:       # %bb.0:67; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma68; CHECK-NEXT:    vslide1down.vx v8, v8, a069; CHECK-NEXT:    ret70  %vb = insertelement <2 x i32> poison, i32 %b, i64 071  %v1 = shufflevector <2 x i32> %v, <2 x i32> %vb, <2 x i32> <i32 1, i32 2>72  ret <2 x i32> %v173}74 75define <4 x i32> @vslide1down_4xi32(<4 x i32> %v, i32 %b) {76; CHECK-LABEL: vslide1down_4xi32:77; CHECK:       # %bb.0:78; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma79; CHECK-NEXT:    vslide1down.vx v8, v8, a080; CHECK-NEXT:    ret81  %vb = insertelement <4 x i32> poison, i32 %b, i64 082  %v1 = shufflevector <4 x i32> %v, <4 x i32> %vb, <4 x i32> <i32 1, i32 2, i32 3, i32 4>83  ret <4 x i32> %v184}85 86define <2 x i64> @vslide1down_2xi64(<2 x i64> %v, i64 %b) {87; RV32-LABEL: vslide1down_2xi64:88; RV32:       # %bb.0:89; RV32-NEXT:    addi sp, sp, -1690; RV32-NEXT:    .cfi_def_cfa_offset 1691; RV32-NEXT:    sw a0, 8(sp)92; RV32-NEXT:    sw a1, 12(sp)93; RV32-NEXT:    addi a0, sp, 894; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma95; RV32-NEXT:    vlse64.v v9, (a0), zero96; RV32-NEXT:    vslidedown.vi v8, v8, 197; RV32-NEXT:    vslideup.vi v8, v9, 198; RV32-NEXT:    addi sp, sp, 1699; RV32-NEXT:    .cfi_def_cfa_offset 0100; RV32-NEXT:    ret101;102; RV64-LABEL: vslide1down_2xi64:103; RV64:       # %bb.0:104; RV64-NEXT:    vsetivli zero, 2, e64, m1, ta, ma105; RV64-NEXT:    vslide1down.vx v8, v8, a0106; RV64-NEXT:    ret107  %vb = insertelement <2 x i64> poison, i64 %b, i64 0108  %v1 = shufflevector <2 x i64> %v, <2 x i64> %vb, <2 x i32> <i32 1, i32 2>109  ret <2 x i64> %v1110}111 112define <4 x i64> @vslide1down_4xi64(<4 x i64> %v, i64 %b) {113; RV32-LABEL: vslide1down_4xi64:114; RV32:       # %bb.0:115; RV32-NEXT:    addi sp, sp, -16116; RV32-NEXT:    .cfi_def_cfa_offset 16117; RV32-NEXT:    sw a0, 8(sp)118; RV32-NEXT:    sw a1, 12(sp)119; RV32-NEXT:    addi a0, sp, 8120; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma121; RV32-NEXT:    vlse64.v v10, (a0), zero122; RV32-NEXT:    vslidedown.vi v8, v8, 1123; RV32-NEXT:    vslideup.vi v8, v10, 3124; RV32-NEXT:    addi sp, sp, 16125; RV32-NEXT:    .cfi_def_cfa_offset 0126; RV32-NEXT:    ret127;128; RV64-LABEL: vslide1down_4xi64:129; RV64:       # %bb.0:130; RV64-NEXT:    vsetivli zero, 4, e64, m2, ta, ma131; RV64-NEXT:    vslide1down.vx v8, v8, a0132; RV64-NEXT:    ret133  %vb = insertelement <4 x i64> poison, i64 %b, i64 0134  %v1 = shufflevector <4 x i64> %v, <4 x i64> %vb, <4 x i32> <i32 1, i32 2, i32 3, i32 4>135  ret <4 x i64> %v1136}137 138define <2 x bfloat> @vslide1down_2xbf16(<2 x bfloat> %v, bfloat %b) {139; CHECK-LABEL: vslide1down_2xbf16:140; CHECK:       # %bb.0:141; CHECK-NEXT:    fmv.x.h a0, fa0142; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma143; CHECK-NEXT:    vslide1down.vx v8, v8, a0144; CHECK-NEXT:    ret145  %vb = insertelement <2 x bfloat> poison, bfloat %b, i64 0146  %v1 = shufflevector <2 x bfloat> %v, <2 x bfloat> %vb, <2 x i32> <i32 1, i32 2>147  ret <2 x bfloat> %v1148}149 150define <4 x bfloat> @vslide1down_4xbf16(<4 x bfloat> %v, bfloat %b) {151; CHECK-LABEL: vslide1down_4xbf16:152; CHECK:       # %bb.0:153; CHECK-NEXT:    fmv.x.h a0, fa0154; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma155; CHECK-NEXT:    vslide1down.vx v8, v8, a0156; CHECK-NEXT:    ret157  %vb = insertelement <4 x bfloat> poison, bfloat %b, i64 0158  %v1 = shufflevector <4 x bfloat> %v, <4 x bfloat> %vb, <4 x i32> <i32 1, i32 2, i32 3, i32 4>159  ret <4 x bfloat> %v1160}161 162define <2 x half> @vslide1down_2xf16(<2 x half> %v, half %b) {163; ZVFH-LABEL: vslide1down_2xf16:164; ZVFH:       # %bb.0:165; ZVFH-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma166; ZVFH-NEXT:    vfslide1down.vf v8, v8, fa0167; ZVFH-NEXT:    ret168;169; ZVFHMIN-LABEL: vslide1down_2xf16:170; ZVFHMIN:       # %bb.0:171; ZVFHMIN-NEXT:    fmv.x.h a0, fa0172; ZVFHMIN-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma173; ZVFHMIN-NEXT:    vslide1down.vx v8, v8, a0174; ZVFHMIN-NEXT:    ret175  %vb = insertelement <2 x half> poison, half %b, i64 0176  %v1 = shufflevector <2 x half> %v, <2 x half> %vb, <2 x i32> <i32 1, i32 2>177  ret <2 x half> %v1178}179 180define <4 x half> @vslide1down_4xf16(<4 x half> %v, half %b) {181; ZVFH-LABEL: vslide1down_4xf16:182; ZVFH:       # %bb.0:183; ZVFH-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma184; ZVFH-NEXT:    vfslide1down.vf v8, v8, fa0185; ZVFH-NEXT:    ret186;187; ZVFHMIN-LABEL: vslide1down_4xf16:188; ZVFHMIN:       # %bb.0:189; ZVFHMIN-NEXT:    fmv.x.h a0, fa0190; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma191; ZVFHMIN-NEXT:    vslide1down.vx v8, v8, a0192; ZVFHMIN-NEXT:    ret193  %vb = insertelement <4 x half> poison, half %b, i64 0194  %v1 = shufflevector <4 x half> %v, <4 x half> %vb, <4 x i32> <i32 1, i32 2, i32 3, i32 4>195  ret <4 x half> %v1196}197 198define <2 x float> @vslide1down_2xf32(<2 x float> %v, float %b) {199; CHECK-LABEL: vslide1down_2xf32:200; CHECK:       # %bb.0:201; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma202; CHECK-NEXT:    vfslide1down.vf v8, v8, fa0203; CHECK-NEXT:    ret204  %vb = insertelement <2 x float> poison, float %b, i64 0205  %v1 = shufflevector <2 x float> %v, <2 x float> %vb, <2 x i32> <i32 1, i32 2>206  ret <2 x float> %v1207}208 209define <4 x float> @vslide1down_4xf32(<4 x float> %v, float %b) {210; CHECK-LABEL: vslide1down_4xf32:211; CHECK:       # %bb.0:212; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma213; CHECK-NEXT:    vfslide1down.vf v8, v8, fa0214; CHECK-NEXT:    ret215  %vb = insertelement <4 x float> poison, float %b, i64 0216  %v1 = shufflevector <4 x float> %v, <4 x float> %vb, <4 x i32> <i32 1, i32 2, i32 3, i32 4>217  ret <4 x float> %v1218}219 220define <2 x double> @vslide1down_2xf64(<2 x double> %v, double %b) {221; CHECK-LABEL: vslide1down_2xf64:222; CHECK:       # %bb.0:223; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma224; CHECK-NEXT:    vfslide1down.vf v8, v8, fa0225; CHECK-NEXT:    ret226  %vb = insertelement <2 x double> poison, double %b, i64 0227  %v1 = shufflevector <2 x double> %v, <2 x double> %vb, <2 x i32> <i32 1, i32 2>228  ret <2 x double> %v1229}230 231define <4 x double> @vslide1down_4xf64(<4 x double> %v, double %b) {232; CHECK-LABEL: vslide1down_4xf64:233; CHECK:       # %bb.0:234; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma235; CHECK-NEXT:    vfslide1down.vf v8, v8, fa0236; CHECK-NEXT:    ret237  %vb = insertelement <4 x double> poison, double %b, i64 0238  %v1 = shufflevector <4 x double> %v, <4 x double> %vb, <4 x i32> <i32 1, i32 2, i32 3, i32 4>239  ret <4 x double> %v1240}241 242define <4 x i8> @vslide1down_4xi8_with_splat(<4 x i8> %v, i8 %b) {243; CHECK-LABEL: vslide1down_4xi8_with_splat:244; CHECK:       # %bb.0:245; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma246; CHECK-NEXT:    vslide1down.vx v8, v8, a0247; CHECK-NEXT:    ret248  %vb = insertelement <4 x i8> poison, i8 %b, i64 0249  %v1 = shufflevector <4 x i8> %vb, <4 x i8> poison, <4 x i32> zeroinitializer250  %v2 = shufflevector <4 x i8> %v1, <4 x i8> %v, <4 x i32> <i32 5, i32 6, i32 7, i32 1>251  ret <4 x i8> %v2252}253 254define <2 x double> @vslide1down_v2f64_inverted(<2 x double> %v, double %b) {255; CHECK-LABEL: vslide1down_v2f64_inverted:256; CHECK:       # %bb.0:257; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma258; CHECK-NEXT:    vrgather.vi v9, v8, 0259; CHECK-NEXT:    vfmv.s.f v8, fa0260; CHECK-NEXT:    vslideup.vi v9, v8, 1261; CHECK-NEXT:    vmv.v.v v8, v9262; CHECK-NEXT:    ret263  %v1 = shufflevector <2 x double> %v, <2 x double> poison, <2 x i32> <i32 0, i32 0>264  %v2 = insertelement <2 x double> %v1, double %b, i64 1265  ret <2 x double> %v2266}267 268define <4 x i8> @vslide1down_4xi8_inverted(<4 x i8> %v, i8 %b) {269; CHECK-LABEL: vslide1down_4xi8_inverted:270; CHECK:       # %bb.0:271; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma272; CHECK-NEXT:    vslideup.vi v9, v8, 1273; CHECK-NEXT:    vmv.s.x v8, a0274; CHECK-NEXT:    vsetivli zero, 2, e8, mf4, tu, ma275; CHECK-NEXT:    vslideup.vi v9, v8, 1276; CHECK-NEXT:    vmv1r.v v8, v9277; CHECK-NEXT:    ret278  %v1 = shufflevector <4 x i8> %v, <4 x i8> poison, <4 x i32> <i32 poison, i32 0, i32 1, i32 2>279  %v2 = insertelement <4 x i8> %v1, i8 %b, i64 1280  ret <4 x i8> %v2281}282