brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.3 KiB · 006713c Raw
304 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx < %s | FileCheck %s3; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s4 5declare <8 x float> @llvm.loongarch.lasx.cast.128.s(<4 x float>)6 7define void @lasx_cast_128_s(ptr %vd, ptr %va) {8; CHECK-LABEL: lasx_cast_128_s:9; CHECK:       # %bb.0: # %entry10; CHECK-NEXT:    vld $vr0, $a1, 011; CHECK-NEXT:    xvst $xr0, $a0, 012; CHECK-NEXT:    ret13entry:14  %a = load <4 x float>, ptr %va15  %b = call <8 x float> @llvm.loongarch.lasx.cast.128.s(<4 x float> %a)16  store <8 x float> %b, ptr %vd17  ret void18}19 20declare <4 x double> @llvm.loongarch.lasx.cast.128.d(<2 x double>)21 22define void @lasx_cast_128_d(ptr %vd, ptr %va) {23; CHECK-LABEL: lasx_cast_128_d:24; CHECK:       # %bb.0: # %entry25; CHECK-NEXT:    vld $vr0, $a1, 026; CHECK-NEXT:    xvst $xr0, $a0, 027; CHECK-NEXT:    ret28entry:29  %a = load <2 x double>, ptr %va30  %b = call <4 x double> @llvm.loongarch.lasx.cast.128.d(<2 x double> %a)31  store <4 x double> %b, ptr %vd32  ret void33}34 35declare <4 x i64> @llvm.loongarch.lasx.cast.128(<2 x i64>)36 37define void @lasx_cast_128(ptr %vd, ptr %va) {38; CHECK-LABEL: lasx_cast_128:39; CHECK:       # %bb.0: # %entry40; CHECK-NEXT:    vld $vr0, $a1, 041; CHECK-NEXT:    xvst $xr0, $a0, 042; CHECK-NEXT:    ret43entry:44  %a = load <2 x i64>, ptr %va45  %b = call <4 x i64> @llvm.loongarch.lasx.cast.128(<2 x i64> %a)46  store <4 x i64> %b, ptr %vd47  ret void48}49 50declare <8 x float> @llvm.loongarch.lasx.concat.128.s(<4 x float>, <4 x float>)51 52define void @lasx_concat_128_s(ptr %vd, ptr %va, ptr %vb) {53; CHECK-LABEL: lasx_concat_128_s:54; CHECK:       # %bb.0: # %entry55; CHECK-NEXT:    vld $vr0, $a1, 056; CHECK-NEXT:    vld $vr1, $a2, 057; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 258; CHECK-NEXT:    xvst $xr0, $a0, 059; CHECK-NEXT:    ret60entry:61  %a = load <4 x float>, ptr %va62  %b = load <4 x float>, ptr %vb63  %c = call <8 x float> @llvm.loongarch.lasx.concat.128.s(<4 x float> %a, <4 x float> %b)64  store <8 x float> %c, ptr %vd65  ret void66}67 68declare <4 x double> @llvm.loongarch.lasx.concat.128.d(<2 x double>, <2 x double>)69 70define void @lasx_concat_128_d(ptr %vd, ptr %va, ptr %vb) {71; CHECK-LABEL: lasx_concat_128_d:72; CHECK:       # %bb.0: # %entry73; CHECK-NEXT:    vld $vr0, $a1, 074; CHECK-NEXT:    vld $vr1, $a2, 075; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 276; CHECK-NEXT:    xvst $xr0, $a0, 077; CHECK-NEXT:    ret78entry:79  %a = load <2 x double>, ptr %va80  %b = load <2 x double>, ptr %vb81  %c = call <4 x double> @llvm.loongarch.lasx.concat.128.d(<2 x double> %a, <2 x double> %b)82  store <4 x double> %c, ptr %vd83  ret void84}85 86declare <4 x i64> @llvm.loongarch.lasx.concat.128(<2 x i64>, <2 x i64>)87 88define void @lasx_concat_128(ptr %vd, ptr %va, ptr %vb) {89; CHECK-LABEL: lasx_concat_128:90; CHECK:       # %bb.0: # %entry91; CHECK-NEXT:    vld $vr0, $a1, 092; CHECK-NEXT:    vld $vr1, $a2, 093; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 294; CHECK-NEXT:    xvst $xr0, $a0, 095; CHECK-NEXT:    ret96entry:97  %a = load <2 x i64>, ptr %va98  %b = load <2 x i64>, ptr %vb99  %c = call <4 x i64> @llvm.loongarch.lasx.concat.128(<2 x i64> %a, <2 x i64> %b)100  store <4 x i64> %c, ptr %vd101  ret void102}103 104declare <4 x float> @llvm.loongarch.lasx.extract.128.lo.s(<8 x float>)105 106define void @lasx_extract_128_lo_s(ptr %vd, ptr %va) {107; CHECK-LABEL: lasx_extract_128_lo_s:108; CHECK:       # %bb.0: # %entry109; CHECK-NEXT:    xvld $xr0, $a1, 0110; CHECK-NEXT:    vst $vr0, $a0, 0111; CHECK-NEXT:    ret112entry:113  %a = load <8 x float>, ptr %va114  %c = call <4 x float> @llvm.loongarch.lasx.extract.128.lo.s(<8 x float> %a)115  store <4 x float> %c, ptr %vd116  ret void117}118 119declare <2 x double> @llvm.loongarch.lasx.extract.128.lo.d(<4 x double>)120 121define void @lasx_extract_128_lo_d(ptr %vd, ptr %va) {122; CHECK-LABEL: lasx_extract_128_lo_d:123; CHECK:       # %bb.0: # %entry124; CHECK-NEXT:    xvld $xr0, $a1, 0125; CHECK-NEXT:    vst $vr0, $a0, 0126; CHECK-NEXT:    ret127entry:128  %a = load <4 x double>, ptr %va129  %c = call <2 x double> @llvm.loongarch.lasx.extract.128.lo.d(<4 x double> %a)130  store <2 x double> %c, ptr %vd131  ret void132}133 134declare <2 x i64> @llvm.loongarch.lasx.extract.128.lo(<4 x i64>)135 136define void @lasx_extract_128_lo(ptr %vd, ptr %va) {137; CHECK-LABEL: lasx_extract_128_lo:138; CHECK:       # %bb.0: # %entry139; CHECK-NEXT:    xvld $xr0, $a1, 0140; CHECK-NEXT:    vst $vr0, $a0, 0141; CHECK-NEXT:    ret142entry:143  %a = load <4 x i64>, ptr %va144  %c = call <2 x i64> @llvm.loongarch.lasx.extract.128.lo(<4 x i64> %a)145  store <2 x i64> %c, ptr %vd146  ret void147}148 149declare <4 x float> @llvm.loongarch.lasx.extract.128.hi.s(<8 x float>)150 151define void @lasx_extract_128_hi_s(ptr %vd, ptr %va) {152; CHECK-LABEL: lasx_extract_128_hi_s:153; CHECK:       # %bb.0: # %entry154; CHECK-NEXT:    xvld $xr0, $a1, 0155; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 1156; CHECK-NEXT:    vst $vr0, $a0, 0157; CHECK-NEXT:    ret158entry:159  %a = load <8 x float>, ptr %va160  %c = call <4 x float> @llvm.loongarch.lasx.extract.128.hi.s(<8 x float> %a)161  store <4 x float> %c, ptr %vd162  ret void163}164 165declare <2 x double> @llvm.loongarch.lasx.extract.128.hi.d(<4 x double>)166 167define void @lasx_extract_128_hi_d(ptr %vd, ptr %va) {168; CHECK-LABEL: lasx_extract_128_hi_d:169; CHECK:       # %bb.0: # %entry170; CHECK-NEXT:    xvld $xr0, $a1, 0171; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 1172; CHECK-NEXT:    vst $vr0, $a0, 0173; CHECK-NEXT:    ret174entry:175  %a = load <4 x double>, ptr %va176  %c = call <2 x double> @llvm.loongarch.lasx.extract.128.hi.d(<4 x double> %a)177  store <2 x double> %c, ptr %vd178  ret void179}180 181declare <2 x i64> @llvm.loongarch.lasx.extract.128.hi(<4 x i64>)182 183define void @lasx_extract_128_hi(ptr %vd, ptr %va) {184; CHECK-LABEL: lasx_extract_128_hi:185; CHECK:       # %bb.0: # %entry186; CHECK-NEXT:    xvld $xr0, $a1, 0187; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 1188; CHECK-NEXT:    vst $vr0, $a0, 0189; CHECK-NEXT:    ret190entry:191  %a = load <4 x i64>, ptr %va192  %c = call <2 x i64> @llvm.loongarch.lasx.extract.128.hi(<4 x i64> %a)193  store <2 x i64> %c, ptr %vd194  ret void195}196 197declare <8 x float> @llvm.loongarch.lasx.insert.128.lo.s(<8 x float>, <4 x float>)198 199define void @lasx_insert_128_lo_s(ptr %vd, ptr %va, ptr %vb) {200; CHECK-LABEL: lasx_insert_128_lo_s:201; CHECK:       # %bb.0: # %entry202; CHECK-NEXT:    xvld $xr0, $a1, 0203; CHECK-NEXT:    vld $vr1, $a2, 0204; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 48205; CHECK-NEXT:    xvst $xr0, $a0, 0206; CHECK-NEXT:    ret207entry:208  %a = load <8 x float>, ptr %va209  %b = load <4 x float>, ptr %vb210  %c = call <8 x float> @llvm.loongarch.lasx.insert.128.lo.s(<8 x float> %a, <4 x float> %b)211  store <8 x float> %c, ptr %vd212  ret void213}214 215declare <4 x double> @llvm.loongarch.lasx.insert.128.lo.d(<4 x double>, <2 x double>)216 217define void @lasx_insert_128_lo_d(ptr %vd, ptr %va, ptr %vb) {218; CHECK-LABEL: lasx_insert_128_lo_d:219; CHECK:       # %bb.0: # %entry220; CHECK-NEXT:    xvld $xr0, $a1, 0221; CHECK-NEXT:    vld $vr1, $a2, 0222; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 48223; CHECK-NEXT:    xvst $xr0, $a0, 0224; CHECK-NEXT:    ret225entry:226  %a = load <4 x double>, ptr %va227  %b = load <2 x double>, ptr %vb228  %c = call <4 x double> @llvm.loongarch.lasx.insert.128.lo.d(<4 x double> %a, <2 x double> %b)229  store <4 x double> %c, ptr %vd230  ret void231}232 233declare <4 x i64> @llvm.loongarch.lasx.insert.128.lo(<4 x i64>, <2 x i64>)234 235define void @lasx_insert_128_lo(ptr %vd, ptr %va, ptr %vb) {236; CHECK-LABEL: lasx_insert_128_lo:237; CHECK:       # %bb.0: # %entry238; CHECK-NEXT:    xvld $xr0, $a1, 0239; CHECK-NEXT:    vld $vr1, $a2, 0240; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 48241; CHECK-NEXT:    xvst $xr0, $a0, 0242; CHECK-NEXT:    ret243entry:244  %a = load <4 x i64>, ptr %va245  %b = load <2 x i64>, ptr %vb246  %c = call <4 x i64> @llvm.loongarch.lasx.insert.128.lo(<4 x i64> %a, <2 x i64> %b)247  store <4 x i64> %c, ptr %vd248  ret void249}250 251declare <8 x float> @llvm.loongarch.lasx.insert.128.hi.s(<8 x float>, <4 x float>)252 253define void @lasx_insert_128_hi_s(ptr %vd, ptr %va, ptr %vb) {254; CHECK-LABEL: lasx_insert_128_hi_s:255; CHECK:       # %bb.0: # %entry256; CHECK-NEXT:    xvld $xr0, $a1, 0257; CHECK-NEXT:    vld $vr1, $a2, 0258; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2259; CHECK-NEXT:    xvst $xr0, $a0, 0260; CHECK-NEXT:    ret261entry:262  %a = load <8 x float>, ptr %va263  %b = load <4 x float>, ptr %vb264  %c = call <8 x float> @llvm.loongarch.lasx.insert.128.hi.s(<8 x float> %a, <4 x float> %b)265  store <8 x float> %c, ptr %vd266  ret void267}268 269declare <4 x double> @llvm.loongarch.lasx.insert.128.hi.d(<4 x double>, <2 x double>)270 271define void @lasx_insert_128_hi_d(ptr %vd, ptr %va, ptr %vb) {272; CHECK-LABEL: lasx_insert_128_hi_d:273; CHECK:       # %bb.0: # %entry274; CHECK-NEXT:    xvld $xr0, $a1, 0275; CHECK-NEXT:    vld $vr1, $a2, 0276; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2277; CHECK-NEXT:    xvst $xr0, $a0, 0278; CHECK-NEXT:    ret279entry:280  %a = load <4 x double>, ptr %va281  %b = load <2 x double>, ptr %vb282  %c = call <4 x double> @llvm.loongarch.lasx.insert.128.hi.d(<4 x double> %a, <2 x double> %b)283  store <4 x double> %c, ptr %vd284  ret void285}286 287declare <4 x i64> @llvm.loongarch.lasx.insert.128.hi(<4 x i64>, <2 x i64>)288 289define void @lasx_insert_128_hi(ptr %vd, ptr %va, ptr %vb) {290; CHECK-LABEL: lasx_insert_128_hi:291; CHECK:       # %bb.0: # %entry292; CHECK-NEXT:    xvld $xr0, $a1, 0293; CHECK-NEXT:    vld $vr1, $a2, 0294; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2295; CHECK-NEXT:    xvst $xr0, $a0, 0296; CHECK-NEXT:    ret297entry:298  %a = load <4 x i64>, ptr %va299  %b = load <2 x i64>, ptr %vb300  %c = call <4 x i64> @llvm.loongarch.lasx.insert.128.hi(<4 x i64> %a, <2 x i64> %b)301  store <4 x i64> %c, ptr %vd302  ret void303}304