brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.0 KiB · 0788d0a Raw
301 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -target-abi=ilp32d -mattr=+v,+zvfh,+f,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV323; RUN: llc -mtriple=riscv64 -target-abi=lp64d -mattr=+v,+zvfh,+f,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV644 5define void @fp2si_v2f32_v2i32(ptr %x, ptr %y) {6; CHECK-LABEL: fp2si_v2f32_v2i32:7; CHECK:       # %bb.0:8; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma9; CHECK-NEXT:    vle32.v v8, (a0)10; CHECK-NEXT:    vmfne.vv v0, v8, v811; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v812; CHECK-NEXT:    vmerge.vim v8, v8, 0, v013; CHECK-NEXT:    vse32.v v8, (a1)14; CHECK-NEXT:    ret15  %a = load <2 x float>, ptr %x16  %d = call <2 x i32> @llvm.fptosi.sat.v2i32.v2f32(<2 x float> %a)17  store <2 x i32> %d, ptr %y18  ret void19}20 21define void @fp2ui_v2f32_v2i32(ptr %x, ptr %y) {22; CHECK-LABEL: fp2ui_v2f32_v2i32:23; CHECK:       # %bb.0:24; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma25; CHECK-NEXT:    vle32.v v8, (a0)26; CHECK-NEXT:    vmfne.vv v0, v8, v827; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v828; CHECK-NEXT:    vmerge.vim v8, v8, 0, v029; CHECK-NEXT:    vse32.v v8, (a1)30; CHECK-NEXT:    ret31  %a = load <2 x float>, ptr %x32  %d = call <2 x i32> @llvm.fptoui.sat.v2i32.v2f32(<2 x float> %a)33  store <2 x i32> %d, ptr %y34  ret void35}36 37define void @fp2si_v8f32_v8i32(ptr %x, ptr %y) {38;39; CHECK-LABEL: fp2si_v8f32_v8i32:40; CHECK:       # %bb.0:41; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma42; CHECK-NEXT:    vle32.v v8, (a0)43; CHECK-NEXT:    vmfne.vv v0, v8, v844; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v845; CHECK-NEXT:    vmerge.vim v8, v8, 0, v046; CHECK-NEXT:    vse32.v v8, (a1)47; CHECK-NEXT:    ret48  %a = load <8 x float>, ptr %x49  %d = call <8 x i32> @llvm.fptosi.sat.v8i32.v8f32(<8 x float> %a)50  store <8 x i32> %d, ptr %y51  ret void52}53 54define void @fp2ui_v8f32_v8i32(ptr %x, ptr %y) {55;56; CHECK-LABEL: fp2ui_v8f32_v8i32:57; CHECK:       # %bb.0:58; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma59; CHECK-NEXT:    vle32.v v8, (a0)60; CHECK-NEXT:    vmfne.vv v0, v8, v861; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v862; CHECK-NEXT:    vmerge.vim v8, v8, 0, v063; CHECK-NEXT:    vse32.v v8, (a1)64; CHECK-NEXT:    ret65  %a = load <8 x float>, ptr %x66  %d = call <8 x i32> @llvm.fptosi.sat.v8i32.v8f32(<8 x float> %a)67  store <8 x i32> %d, ptr %y68  ret void69}70 71define void @fp2si_v2f32_v2i64(ptr %x, ptr %y) {72; CHECK-LABEL: fp2si_v2f32_v2i64:73; CHECK:       # %bb.0:74; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma75; CHECK-NEXT:    vle32.v v8, (a0)76; CHECK-NEXT:    vmfne.vv v0, v8, v877; CHECK-NEXT:    vfwcvt.rtz.x.f.v v9, v878; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, ma79; CHECK-NEXT:    vmerge.vim v8, v9, 0, v080; CHECK-NEXT:    vse64.v v8, (a1)81; CHECK-NEXT:    ret82  %a = load <2 x float>, ptr %x83  %d = call <2 x i64> @llvm.fptosi.sat.v2i64.v2f32(<2 x float> %a)84  store <2 x i64> %d, ptr %y85  ret void86}87 88define void @fp2ui_v2f32_v2i64(ptr %x, ptr %y) {89; CHECK-LABEL: fp2ui_v2f32_v2i64:90; CHECK:       # %bb.0:91; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma92; CHECK-NEXT:    vle32.v v8, (a0)93; CHECK-NEXT:    vmfne.vv v0, v8, v894; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v9, v895; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, ma96; CHECK-NEXT:    vmerge.vim v8, v9, 0, v097; CHECK-NEXT:    vse64.v v8, (a1)98; CHECK-NEXT:    ret99  %a = load <2 x float>, ptr %x100  %d = call <2 x i64> @llvm.fptoui.sat.v2i64.v2f32(<2 x float> %a)101  store <2 x i64> %d, ptr %y102  ret void103}104 105define void @fp2si_v8f32_v8i64(ptr %x, ptr %y) {106;107; CHECK-LABEL: fp2si_v8f32_v8i64:108; CHECK:       # %bb.0:109; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma110; CHECK-NEXT:    vle32.v v12, (a0)111; CHECK-NEXT:    vmfne.vv v0, v12, v12112; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v12113; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, ma114; CHECK-NEXT:    vmerge.vim v8, v8, 0, v0115; CHECK-NEXT:    vse64.v v8, (a1)116; CHECK-NEXT:    ret117  %a = load <8 x float>, ptr %x118  %d = call <8 x i64> @llvm.fptosi.sat.v8i64.v8f32(<8 x float> %a)119  store <8 x i64> %d, ptr %y120  ret void121}122 123define void @fp2ui_v8f32_v8i64(ptr %x, ptr %y) {124;125; CHECK-LABEL: fp2ui_v8f32_v8i64:126; CHECK:       # %bb.0:127; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma128; CHECK-NEXT:    vle32.v v12, (a0)129; CHECK-NEXT:    vmfne.vv v0, v12, v12130; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v8, v12131; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, ma132; CHECK-NEXT:    vmerge.vim v8, v8, 0, v0133; CHECK-NEXT:    vse64.v v8, (a1)134; CHECK-NEXT:    ret135  %a = load <8 x float>, ptr %x136  %d = call <8 x i64> @llvm.fptoui.sat.v8i64.v8f32(<8 x float> %a)137  store <8 x i64> %d, ptr %y138  ret void139}140 141define void @fp2si_v2f16_v2i64(ptr %x, ptr %y) {142; CHECK-LABEL: fp2si_v2f16_v2i64:143; CHECK:       # %bb.0:144; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma145; CHECK-NEXT:    vle16.v v8, (a0)146; CHECK-NEXT:    vmfne.vv v0, v8, v8147; CHECK-NEXT:    vfwcvt.f.f.v v9, v8148; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma149; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v9150; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, ma151; CHECK-NEXT:    vmerge.vim v8, v8, 0, v0152; CHECK-NEXT:    vse64.v v8, (a1)153; CHECK-NEXT:    ret154  %a = load <2 x half>, ptr %x155  %d = call <2 x i64> @llvm.fptosi.sat.v2i64.v2f16(<2 x half> %a)156  store <2 x i64> %d, ptr %y157  ret void158}159 160define void @fp2ui_v2f16_v2i64(ptr %x, ptr %y) {161; CHECK-LABEL: fp2ui_v2f16_v2i64:162; CHECK:       # %bb.0:163; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma164; CHECK-NEXT:    vle16.v v8, (a0)165; CHECK-NEXT:    vmfne.vv v0, v8, v8166; CHECK-NEXT:    vfwcvt.f.f.v v9, v8167; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma168; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v8, v9169; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, ma170; CHECK-NEXT:    vmerge.vim v8, v8, 0, v0171; CHECK-NEXT:    vse64.v v8, (a1)172; CHECK-NEXT:    ret173  %a = load <2 x half>, ptr %x174  %d = call <2 x i64> @llvm.fptoui.sat.v2i64.v2f16(<2 x half> %a)175  store <2 x i64> %d, ptr %y176  ret void177}178 179define void @fp2si_v2f64_v2i8(ptr %x, ptr %y) {180; CHECK-LABEL: fp2si_v2f64_v2i8:181; CHECK:       # %bb.0:182; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma183; CHECK-NEXT:    vle64.v v8, (a0)184; CHECK-NEXT:    vmfne.vv v0, v8, v8185; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma186; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8187; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma188; CHECK-NEXT:    vnclip.wi v8, v9, 0189; CHECK-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma190; CHECK-NEXT:    vnclip.wi v8, v8, 0191; CHECK-NEXT:    vmerge.vim v8, v8, 0, v0192; CHECK-NEXT:    vse8.v v8, (a1)193; CHECK-NEXT:    ret194  %a = load <2 x double>, ptr %x195  %d = call <2 x i8> @llvm.fptosi.sat.v2i8.v2f64(<2 x double> %a)196  store <2 x i8> %d, ptr %y197  ret void198}199 200define void @fp2ui_v2f64_v2i8(ptr %x, ptr %y) {201; CHECK-LABEL: fp2ui_v2f64_v2i8:202; CHECK:       # %bb.0:203; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma204; CHECK-NEXT:    vle64.v v8, (a0)205; CHECK-NEXT:    vmfne.vv v0, v8, v8206; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma207; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8208; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma209; CHECK-NEXT:    vnclipu.wi v8, v9, 0210; CHECK-NEXT:    vsetvli zero, zero, e8, mf8, ta, ma211; CHECK-NEXT:    vnclipu.wi v8, v8, 0212; CHECK-NEXT:    vmerge.vim v8, v8, 0, v0213; CHECK-NEXT:    vse8.v v8, (a1)214; CHECK-NEXT:    ret215  %a = load <2 x double>, ptr %x216  %d = call <2 x i8> @llvm.fptoui.sat.v2i8.v2f64(<2 x double> %a)217  store <2 x i8> %d, ptr %y218  ret void219}220 221define void @fp2si_v8f64_v8i8(ptr %x, ptr %y) {222;223; CHECK-LABEL: fp2si_v8f64_v8i8:224; CHECK:       # %bb.0:225; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma226; CHECK-NEXT:    vle64.v v8, (a0)227; CHECK-NEXT:    vmfne.vv v0, v8, v8228; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma229; CHECK-NEXT:    vfncvt.rtz.x.f.w v12, v8230; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma231; CHECK-NEXT:    vnclip.wi v8, v12, 0232; CHECK-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma233; CHECK-NEXT:    vnclip.wi v8, v8, 0234; CHECK-NEXT:    vmerge.vim v8, v8, 0, v0235; CHECK-NEXT:    vse8.v v8, (a1)236; CHECK-NEXT:    ret237  %a = load <8 x double>, ptr %x238  %d = call <8 x i8> @llvm.fptosi.sat.v8i8.v8f64(<8 x double> %a)239  store <8 x i8> %d, ptr %y240  ret void241}242 243define void @fp2ui_v8f64_v8i8(ptr %x, ptr %y) {244;245; CHECK-LABEL: fp2ui_v8f64_v8i8:246; CHECK:       # %bb.0:247; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma248; CHECK-NEXT:    vle64.v v8, (a0)249; CHECK-NEXT:    vmfne.vv v0, v8, v8250; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma251; CHECK-NEXT:    vfncvt.rtz.xu.f.w v12, v8252; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma253; CHECK-NEXT:    vnclipu.wi v8, v12, 0254; CHECK-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma255; CHECK-NEXT:    vnclipu.wi v8, v8, 0256; CHECK-NEXT:    vmerge.vim v8, v8, 0, v0257; CHECK-NEXT:    vse8.v v8, (a1)258; CHECK-NEXT:    ret259  %a = load <8 x double>, ptr %x260  %d = call <8 x i8> @llvm.fptoui.sat.v8i8.v8f64(<8 x double> %a)261  store <8 x i8> %d, ptr %y262  ret void263}264 265define void @fp2si_v2f64_v2i32(ptr %x, ptr %y) {266; CHECK-LABEL: fp2si_v2f64_v2i32:267; CHECK:       # %bb.0:268; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma269; CHECK-NEXT:    vle64.v v8, (a0)270; CHECK-NEXT:    vmfne.vv v0, v8, v8271; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma272; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8273; CHECK-NEXT:    vmerge.vim v8, v9, 0, v0274; CHECK-NEXT:    vse32.v v8, (a1)275; CHECK-NEXT:    ret276  %a = load <2 x double>, ptr %x277  %d = call <2 x i32> @llvm.fptosi.sat.v2i32.v2f64(<2 x double> %a)278  store <2 x i32> %d, ptr %y279  ret void280}281 282define void @fp2ui_v2f64_v2i32(ptr %x, ptr %y) {283; CHECK-LABEL: fp2ui_v2f64_v2i32:284; CHECK:       # %bb.0:285; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma286; CHECK-NEXT:    vle64.v v8, (a0)287; CHECK-NEXT:    vmfne.vv v0, v8, v8288; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma289; CHECK-NEXT:    vfncvt.rtz.xu.f.w v9, v8290; CHECK-NEXT:    vmerge.vim v8, v9, 0, v0291; CHECK-NEXT:    vse32.v v8, (a1)292; CHECK-NEXT:    ret293  %a = load <2 x double>, ptr %x294  %d = call <2 x i32> @llvm.fptoui.sat.v2i32.v2f64(<2 x double> %a)295  store <2 x i32> %d, ptr %y296  ret void297}298;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:299; RV32: {{.*}}300; RV64: {{.*}}301