brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.0 KiB · ff7b81d Raw
289 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v -target-abi=ilp32d \3; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK324; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \5; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK646 7; Float8 9define <vscale x 2 x i32> @test_signed_v2f32_v2i32(<vscale x 2 x float> %f) {10; CHECK-LABEL: test_signed_v2f32_v2i32:11; CHECK:       # %bb.0:12; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma13; CHECK-NEXT:    vmfne.vv v0, v8, v814; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v815; CHECK-NEXT:    vmerge.vim v8, v8, 0, v016; CHECK-NEXT:    ret17    %x = call <vscale x 2 x i32> @llvm.fptoui.sat.nxv2f32.nxv2i32(<vscale x 2 x float> %f)18    ret <vscale x 2 x i32> %x19}20 21define <vscale x 4 x i32> @test_signed_v4f32_v4i32(<vscale x 4 x float> %f) {22; CHECK-LABEL: test_signed_v4f32_v4i32:23; CHECK:       # %bb.0:24; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma25; CHECK-NEXT:    vmfne.vv v0, v8, v826; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v827; CHECK-NEXT:    vmerge.vim v8, v8, 0, v028; CHECK-NEXT:    ret29    %x = call <vscale x 4 x i32> @llvm.fptoui.sat.nxv4f32.nxv4i32(<vscale x 4 x float> %f)30    ret <vscale x 4 x i32> %x31}32 33define <vscale x 8 x i32> @test_signed_v8f32_v8i32(<vscale x 8 x float> %f) {34; CHECK-LABEL: test_signed_v8f32_v8i32:35; CHECK:       # %bb.0:36; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma37; CHECK-NEXT:    vmfne.vv v0, v8, v838; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v839; CHECK-NEXT:    vmerge.vim v8, v8, 0, v040; CHECK-NEXT:    ret41    %x = call <vscale x 8 x i32> @llvm.fptoui.sat.nxv8f32.nxv8i32(<vscale x 8 x float> %f)42    ret <vscale x 8 x i32> %x43}44 45define <vscale x 4 x i16> @test_signed_v4f32_v4i16(<vscale x 4 x float> %f) {46; CHECK-LABEL: test_signed_v4f32_v4i16:47; CHECK:       # %bb.0:48; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma49; CHECK-NEXT:    vmfne.vv v0, v8, v850; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma51; CHECK-NEXT:    vfncvt.rtz.xu.f.w v10, v852; CHECK-NEXT:    vmerge.vim v8, v10, 0, v053; CHECK-NEXT:    ret54    %x = call <vscale x 4 x i16> @llvm.fptoui.sat.nxv4f32.nxv4i16(<vscale x 4 x float> %f)55    ret <vscale x 4 x i16> %x56}57 58define <vscale x 8 x i16> @test_signed_v8f32_v8i16(<vscale x 8 x float> %f) {59; CHECK-LABEL: test_signed_v8f32_v8i16:60; CHECK:       # %bb.0:61; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma62; CHECK-NEXT:    vmfne.vv v0, v8, v863; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma64; CHECK-NEXT:    vfncvt.rtz.xu.f.w v12, v865; CHECK-NEXT:    vmerge.vim v8, v12, 0, v066; CHECK-NEXT:    ret67    %x = call <vscale x 8 x i16> @llvm.fptoui.sat.nxv8f32.nxv8i16(<vscale x 8 x float> %f)68    ret <vscale x 8 x i16> %x69}70 71define <vscale x 2 x i64> @test_signed_v2f32_v2i64(<vscale x 2 x float> %f) {72; CHECK-LABEL: test_signed_v2f32_v2i64:73; CHECK:       # %bb.0:74; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma75; CHECK-NEXT:    vmfne.vv v0, v8, v876; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v10, v877; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma78; CHECK-NEXT:    vmerge.vim v8, v10, 0, v079; CHECK-NEXT:    ret80    %x = call <vscale x 2 x i64> @llvm.fptoui.sat.nxv2f32.nxv2i64(<vscale x 2 x float> %f)81    ret <vscale x 2 x i64> %x82}83 84define <vscale x 4 x i64> @test_signed_v4f32_v4i64(<vscale x 4 x float> %f) {85; CHECK-LABEL: test_signed_v4f32_v4i64:86; CHECK:       # %bb.0:87; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma88; CHECK-NEXT:    vmfne.vv v0, v8, v889; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v12, v890; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, ma91; CHECK-NEXT:    vmerge.vim v8, v12, 0, v092; CHECK-NEXT:    ret93    %x = call <vscale x 4 x i64> @llvm.fptoui.sat.nxv4f32.nxv4i64(<vscale x 4 x float> %f)94    ret <vscale x 4 x i64> %x95}96 97; Double98 99define <vscale x 2 x i32> @test_signed_v2f64_v2i32(<vscale x 2 x double> %f) {100; CHECK-LABEL: test_signed_v2f64_v2i32:101; CHECK:       # %bb.0:102; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma103; CHECK-NEXT:    vmfne.vv v0, v8, v8104; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma105; CHECK-NEXT:    vfncvt.rtz.xu.f.w v10, v8106; CHECK-NEXT:    vmerge.vim v8, v10, 0, v0107; CHECK-NEXT:    ret108    %x = call <vscale x 2 x i32> @llvm.fptoui.sat.nxv2f64.nxv2i32(<vscale x 2 x double> %f)109    ret <vscale x 2 x i32> %x110}111 112define <vscale x 4 x i32> @test_signed_v4f64_v4i32(<vscale x 4 x double> %f) {113; CHECK-LABEL: test_signed_v4f64_v4i32:114; CHECK:       # %bb.0:115; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma116; CHECK-NEXT:    vmfne.vv v0, v8, v8117; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma118; CHECK-NEXT:    vfncvt.rtz.xu.f.w v12, v8119; CHECK-NEXT:    vmerge.vim v8, v12, 0, v0120; CHECK-NEXT:    ret121    %x = call <vscale x 4 x i32> @llvm.fptoui.sat.nxv4f64.nxv4i32(<vscale x 4 x double> %f)122    ret <vscale x 4 x i32> %x123}124 125define <vscale x 8 x i32> @test_signed_v8f64_v8i32(<vscale x 8 x double> %f) {126; CHECK-LABEL: test_signed_v8f64_v8i32:127; CHECK:       # %bb.0:128; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma129; CHECK-NEXT:    vmfne.vv v0, v8, v8130; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma131; CHECK-NEXT:    vfncvt.rtz.xu.f.w v16, v8132; CHECK-NEXT:    vmerge.vim v8, v16, 0, v0133; CHECK-NEXT:    ret134    %x = call <vscale x 8 x i32> @llvm.fptoui.sat.nxv8f64.nxv8i32(<vscale x 8 x double> %f)135    ret <vscale x 8 x i32> %x136}137 138define <vscale x 4 x i16> @test_signed_v4f64_v4i16(<vscale x 4 x double> %f) {139; CHECK-LABEL: test_signed_v4f64_v4i16:140; CHECK:       # %bb.0:141; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma142; CHECK-NEXT:    vmfne.vv v0, v8, v8143; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma144; CHECK-NEXT:    vfncvt.rtz.xu.f.w v12, v8145; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma146; CHECK-NEXT:    vnclipu.wi v8, v12, 0147; CHECK-NEXT:    vmerge.vim v8, v8, 0, v0148; CHECK-NEXT:    ret149    %x = call <vscale x 4 x i16> @llvm.fptoui.sat.nxv4f64.nxv4i16(<vscale x 4 x double> %f)150    ret <vscale x 4 x i16> %x151}152 153define <vscale x 8 x i16> @test_signed_v8f64_v8i16(<vscale x 8 x double> %f) {154; CHECK-LABEL: test_signed_v8f64_v8i16:155; CHECK:       # %bb.0:156; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma157; CHECK-NEXT:    vmfne.vv v0, v8, v8158; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma159; CHECK-NEXT:    vfncvt.rtz.xu.f.w v16, v8160; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma161; CHECK-NEXT:    vnclipu.wi v8, v16, 0162; CHECK-NEXT:    vmerge.vim v8, v8, 0, v0163; CHECK-NEXT:    ret164    %x = call <vscale x 8 x i16> @llvm.fptoui.sat.nxv8f64.nxv8i16(<vscale x 8 x double> %f)165    ret <vscale x 8 x i16> %x166}167 168define <vscale x 2 x i64> @test_signed_v2f64_v2i64(<vscale x 2 x double> %f) {169; CHECK-LABEL: test_signed_v2f64_v2i64:170; CHECK:       # %bb.0:171; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma172; CHECK-NEXT:    vmfne.vv v0, v8, v8173; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8174; CHECK-NEXT:    vmerge.vim v8, v8, 0, v0175; CHECK-NEXT:    ret176    %x = call <vscale x 2 x i64> @llvm.fptoui.sat.nxv2f64.nxv2i64(<vscale x 2 x double> %f)177    ret <vscale x 2 x i64> %x178}179 180define <vscale x 4 x i64> @test_signed_v4f64_v4i64(<vscale x 4 x double> %f) {181; CHECK-LABEL: test_signed_v4f64_v4i64:182; CHECK:       # %bb.0:183; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma184; CHECK-NEXT:    vmfne.vv v0, v8, v8185; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8186; CHECK-NEXT:    vmerge.vim v8, v8, 0, v0187; CHECK-NEXT:    ret188    %x = call <vscale x 4 x i64> @llvm.fptoui.sat.nxv4f64.nxv4i64(<vscale x 4 x double> %f)189    ret <vscale x 4 x i64> %x190}191 192; half193 194define <vscale x 2 x i32> @test_signed_v2f16_v2i32(<vscale x 2 x half> %f) {195; CHECK-LABEL: test_signed_v2f16_v2i32:196; CHECK:       # %bb.0:197; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma198; CHECK-NEXT:    vmfne.vv v0, v8, v8199; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v9, v8200; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma201; CHECK-NEXT:    vmerge.vim v8, v9, 0, v0202; CHECK-NEXT:    ret203    %x = call <vscale x 2 x i32> @llvm.fptoui.sat.nxv2f16.nxv2i32(<vscale x 2 x half> %f)204    ret <vscale x 2 x i32> %x205}206 207define <vscale x 4 x i32> @test_signed_v4f16_v4i32(<vscale x 4 x half> %f) {208; CHECK-LABEL: test_signed_v4f16_v4i32:209; CHECK:       # %bb.0:210; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma211; CHECK-NEXT:    vmfne.vv v0, v8, v8212; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v10, v8213; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma214; CHECK-NEXT:    vmerge.vim v8, v10, 0, v0215; CHECK-NEXT:    ret216    %x = call <vscale x 4 x i32> @llvm.fptoui.sat.nxv4f16.nxv4i32(<vscale x 4 x half> %f)217    ret <vscale x 4 x i32> %x218}219 220define <vscale x 8 x i32> @test_signed_v8f16_v8i32(<vscale x 8 x half> %f) {221; CHECK-LABEL: test_signed_v8f16_v8i32:222; CHECK:       # %bb.0:223; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma224; CHECK-NEXT:    vmfne.vv v0, v8, v8225; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v12, v8226; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma227; CHECK-NEXT:    vmerge.vim v8, v12, 0, v0228; CHECK-NEXT:    ret229    %x = call <vscale x 8 x i32> @llvm.fptoui.sat.nxv8f16.nxv8i32(<vscale x 8 x half> %f)230    ret <vscale x 8 x i32> %x231}232 233define <vscale x 4 x i16> @test_signed_v4f16_v4i16(<vscale x 4 x half> %f) {234; CHECK-LABEL: test_signed_v4f16_v4i16:235; CHECK:       # %bb.0:236; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma237; CHECK-NEXT:    vmfne.vv v0, v8, v8238; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8239; CHECK-NEXT:    vmerge.vim v8, v8, 0, v0240; CHECK-NEXT:    ret241    %x = call <vscale x 4 x i16> @llvm.fptoui.sat.nxv4f16.nxv4i16(<vscale x 4 x half> %f)242    ret <vscale x 4 x i16> %x243}244 245define <vscale x 8 x i16> @test_signed_v8f16_v8i16(<vscale x 8 x half> %f) {246; CHECK-LABEL: test_signed_v8f16_v8i16:247; CHECK:       # %bb.0:248; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma249; CHECK-NEXT:    vmfne.vv v0, v8, v8250; CHECK-NEXT:    vfcvt.rtz.xu.f.v v8, v8251; CHECK-NEXT:    vmerge.vim v8, v8, 0, v0252; CHECK-NEXT:    ret253    %x = call <vscale x 8 x i16> @llvm.fptoui.sat.nxv8f16.nxv8i16(<vscale x 8 x half> %f)254    ret <vscale x 8 x i16> %x255}256 257define <vscale x 2 x i64> @test_signed_v2f16_v2i64(<vscale x 2 x half> %f) {258; CHECK-LABEL: test_signed_v2f16_v2i64:259; CHECK:       # %bb.0:260; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma261; CHECK-NEXT:    vmfne.vv v0, v8, v8262; CHECK-NEXT:    vfwcvt.f.f.v v10, v8263; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma264; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v8, v10265; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma266; CHECK-NEXT:    vmerge.vim v8, v8, 0, v0267; CHECK-NEXT:    ret268    %x = call <vscale x 2 x i64> @llvm.fptoui.sat.nxv2f16.nxv2i64(<vscale x 2 x half> %f)269    ret <vscale x 2 x i64> %x270}271 272define <vscale x 4 x i64> @test_signed_v4f16_v4i64(<vscale x 4 x half> %f) {273; CHECK-LABEL: test_signed_v4f16_v4i64:274; CHECK:       # %bb.0:275; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma276; CHECK-NEXT:    vmfne.vv v0, v8, v8277; CHECK-NEXT:    vfwcvt.f.f.v v12, v8278; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma279; CHECK-NEXT:    vfwcvt.rtz.xu.f.v v8, v12280; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, ma281; CHECK-NEXT:    vmerge.vim v8, v8, 0, v0282; CHECK-NEXT:    ret283    %x = call <vscale x 4 x i64> @llvm.fptoui.sat.nxv4f16.nxv4i64(<vscale x 4 x half> %f)284    ret <vscale x 4 x i64> %x285}286;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:287; CHECK32: {{.*}}288; CHECK64: {{.*}}289