brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.1 KiB · d945cf5 Raw
346 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -target-abi=ilp32d \3; RUN:   -verify-machineinstrs < %s | FileCheck %s4; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \5; RUN:   -verify-machineinstrs < %s | FileCheck %s6; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfhmin,+v,+m -target-abi=ilp32d -riscv-v-vector-bits-min=128 \7; RUN:   -verify-machineinstrs < %s | FileCheck %s8; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfhmin,+v,+m -target-abi=lp64d -riscv-v-vector-bits-min=128 \9; RUN:   -verify-machineinstrs < %s | FileCheck %s10 11define <2 x half> @select_v2f16(i1 zeroext %c, <2 x half> %a, <2 x half> %b) {12; CHECK-LABEL: select_v2f16:13; CHECK:       # %bb.0:14; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma15; CHECK-NEXT:    vmv.v.x v10, a016; CHECK-NEXT:    vmsne.vi v0, v10, 017; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma18; CHECK-NEXT:    vmerge.vvm v8, v9, v8, v019; CHECK-NEXT:    ret20  %v = select i1 %c, <2 x half> %a, <2 x half> %b21  ret <2 x half> %v22}23 24define <2 x half> @selectcc_v2f16(half %a, half %b, <2 x half> %c, <2 x half> %d) {25; CHECK-LABEL: selectcc_v2f16:26; CHECK:       # %bb.0:27; CHECK-NEXT:    feq.h a0, fa0, fa128; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma29; CHECK-NEXT:    vmv.v.x v10, a030; CHECK-NEXT:    vmsne.vi v0, v10, 031; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma32; CHECK-NEXT:    vmerge.vvm v8, v9, v8, v033; CHECK-NEXT:    ret34  %cmp = fcmp oeq half %a, %b35  %v = select i1 %cmp, <2 x half> %c, <2 x half> %d36  ret <2 x half> %v37}38 39define <4 x half> @select_v4f16(i1 zeroext %c, <4 x half> %a, <4 x half> %b) {40; CHECK-LABEL: select_v4f16:41; CHECK:       # %bb.0:42; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma43; CHECK-NEXT:    vmv.v.x v10, a044; CHECK-NEXT:    vmsne.vi v0, v10, 045; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma46; CHECK-NEXT:    vmerge.vvm v8, v9, v8, v047; CHECK-NEXT:    ret48  %v = select i1 %c, <4 x half> %a, <4 x half> %b49  ret <4 x half> %v50}51 52define <4 x half> @selectcc_v4f16(half %a, half %b, <4 x half> %c, <4 x half> %d) {53; CHECK-LABEL: selectcc_v4f16:54; CHECK:       # %bb.0:55; CHECK-NEXT:    feq.h a0, fa0, fa156; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma57; CHECK-NEXT:    vmv.v.x v10, a058; CHECK-NEXT:    vmsne.vi v0, v10, 059; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma60; CHECK-NEXT:    vmerge.vvm v8, v9, v8, v061; CHECK-NEXT:    ret62  %cmp = fcmp oeq half %a, %b63  %v = select i1 %cmp, <4 x half> %c, <4 x half> %d64  ret <4 x half> %v65}66 67define <8 x half> @select_v8f16(i1 zeroext %c, <8 x half> %a, <8 x half> %b) {68; CHECK-LABEL: select_v8f16:69; CHECK:       # %bb.0:70; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma71; CHECK-NEXT:    vmv.v.x v10, a072; CHECK-NEXT:    vmsne.vi v0, v10, 073; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma74; CHECK-NEXT:    vmerge.vvm v8, v9, v8, v075; CHECK-NEXT:    ret76  %v = select i1 %c, <8 x half> %a, <8 x half> %b77  ret <8 x half> %v78}79 80define <8 x half> @selectcc_v8f16(half %a, half %b, <8 x half> %c, <8 x half> %d) {81; CHECK-LABEL: selectcc_v8f16:82; CHECK:       # %bb.0:83; CHECK-NEXT:    feq.h a0, fa0, fa184; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma85; CHECK-NEXT:    vmv.v.x v10, a086; CHECK-NEXT:    vmsne.vi v0, v10, 087; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma88; CHECK-NEXT:    vmerge.vvm v8, v9, v8, v089; CHECK-NEXT:    ret90  %cmp = fcmp oeq half %a, %b91  %v = select i1 %cmp, <8 x half> %c, <8 x half> %d92  ret <8 x half> %v93}94 95define <16 x half> @select_v16f16(i1 zeroext %c, <16 x half> %a, <16 x half> %b) {96; CHECK-LABEL: select_v16f16:97; CHECK:       # %bb.0:98; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma99; CHECK-NEXT:    vmv.v.x v12, a0100; CHECK-NEXT:    vmsne.vi v0, v12, 0101; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma102; CHECK-NEXT:    vmerge.vvm v8, v10, v8, v0103; CHECK-NEXT:    ret104  %v = select i1 %c, <16 x half> %a, <16 x half> %b105  ret <16 x half> %v106}107 108define <16 x half> @selectcc_v16f16(half %a, half %b, <16 x half> %c, <16 x half> %d) {109; CHECK-LABEL: selectcc_v16f16:110; CHECK:       # %bb.0:111; CHECK-NEXT:    feq.h a0, fa0, fa1112; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma113; CHECK-NEXT:    vmv.v.x v12, a0114; CHECK-NEXT:    vmsne.vi v0, v12, 0115; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma116; CHECK-NEXT:    vmerge.vvm v8, v10, v8, v0117; CHECK-NEXT:    ret118  %cmp = fcmp oeq half %a, %b119  %v = select i1 %cmp, <16 x half> %c, <16 x half> %d120  ret <16 x half> %v121}122 123define <2 x float> @select_v2f32(i1 zeroext %c, <2 x float> %a, <2 x float> %b) {124; CHECK-LABEL: select_v2f32:125; CHECK:       # %bb.0:126; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma127; CHECK-NEXT:    vmv.v.x v10, a0128; CHECK-NEXT:    vmsne.vi v0, v10, 0129; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma130; CHECK-NEXT:    vmerge.vvm v8, v9, v8, v0131; CHECK-NEXT:    ret132  %v = select i1 %c, <2 x float> %a, <2 x float> %b133  ret <2 x float> %v134}135 136define <2 x float> @selectcc_v2f32(float %a, float %b, <2 x float> %c, <2 x float> %d) {137; CHECK-LABEL: selectcc_v2f32:138; CHECK:       # %bb.0:139; CHECK-NEXT:    feq.s a0, fa0, fa1140; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma141; CHECK-NEXT:    vmv.v.x v10, a0142; CHECK-NEXT:    vmsne.vi v0, v10, 0143; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma144; CHECK-NEXT:    vmerge.vvm v8, v9, v8, v0145; CHECK-NEXT:    ret146  %cmp = fcmp oeq float %a, %b147  %v = select i1 %cmp, <2 x float> %c, <2 x float> %d148  ret <2 x float> %v149}150 151define <4 x float> @select_v4f32(i1 zeroext %c, <4 x float> %a, <4 x float> %b) {152; CHECK-LABEL: select_v4f32:153; CHECK:       # %bb.0:154; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma155; CHECK-NEXT:    vmv.v.x v10, a0156; CHECK-NEXT:    vmsne.vi v0, v10, 0157; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma158; CHECK-NEXT:    vmerge.vvm v8, v9, v8, v0159; CHECK-NEXT:    ret160  %v = select i1 %c, <4 x float> %a, <4 x float> %b161  ret <4 x float> %v162}163 164define <4 x float> @selectcc_v4f32(float %a, float %b, <4 x float> %c, <4 x float> %d) {165; CHECK-LABEL: selectcc_v4f32:166; CHECK:       # %bb.0:167; CHECK-NEXT:    feq.s a0, fa0, fa1168; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma169; CHECK-NEXT:    vmv.v.x v10, a0170; CHECK-NEXT:    vmsne.vi v0, v10, 0171; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma172; CHECK-NEXT:    vmerge.vvm v8, v9, v8, v0173; CHECK-NEXT:    ret174  %cmp = fcmp oeq float %a, %b175  %v = select i1 %cmp, <4 x float> %c, <4 x float> %d176  ret <4 x float> %v177}178 179define <8 x float> @select_v8f32(i1 zeroext %c, <8 x float> %a, <8 x float> %b) {180; CHECK-LABEL: select_v8f32:181; CHECK:       # %bb.0:182; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma183; CHECK-NEXT:    vmv.v.x v12, a0184; CHECK-NEXT:    vmsne.vi v0, v12, 0185; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma186; CHECK-NEXT:    vmerge.vvm v8, v10, v8, v0187; CHECK-NEXT:    ret188  %v = select i1 %c, <8 x float> %a, <8 x float> %b189  ret <8 x float> %v190}191 192define <8 x float> @selectcc_v8f32(float %a, float %b, <8 x float> %c, <8 x float> %d) {193; CHECK-LABEL: selectcc_v8f32:194; CHECK:       # %bb.0:195; CHECK-NEXT:    feq.s a0, fa0, fa1196; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma197; CHECK-NEXT:    vmv.v.x v12, a0198; CHECK-NEXT:    vmsne.vi v0, v12, 0199; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma200; CHECK-NEXT:    vmerge.vvm v8, v10, v8, v0201; CHECK-NEXT:    ret202  %cmp = fcmp oeq float %a, %b203  %v = select i1 %cmp, <8 x float> %c, <8 x float> %d204  ret <8 x float> %v205}206 207define <16 x float> @select_v16f32(i1 zeroext %c, <16 x float> %a, <16 x float> %b) {208; CHECK-LABEL: select_v16f32:209; CHECK:       # %bb.0:210; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma211; CHECK-NEXT:    vmv.v.x v16, a0212; CHECK-NEXT:    vmsne.vi v0, v16, 0213; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma214; CHECK-NEXT:    vmerge.vvm v8, v12, v8, v0215; CHECK-NEXT:    ret216  %v = select i1 %c, <16 x float> %a, <16 x float> %b217  ret <16 x float> %v218}219 220define <16 x float> @selectcc_v16f32(float %a, float %b, <16 x float> %c, <16 x float> %d) {221; CHECK-LABEL: selectcc_v16f32:222; CHECK:       # %bb.0:223; CHECK-NEXT:    feq.s a0, fa0, fa1224; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma225; CHECK-NEXT:    vmv.v.x v16, a0226; CHECK-NEXT:    vmsne.vi v0, v16, 0227; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma228; CHECK-NEXT:    vmerge.vvm v8, v12, v8, v0229; CHECK-NEXT:    ret230  %cmp = fcmp oeq float %a, %b231  %v = select i1 %cmp, <16 x float> %c, <16 x float> %d232  ret <16 x float> %v233}234 235define <2 x double> @select_v2f64(i1 zeroext %c, <2 x double> %a, <2 x double> %b) {236; CHECK-LABEL: select_v2f64:237; CHECK:       # %bb.0:238; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma239; CHECK-NEXT:    vmv.v.x v10, a0240; CHECK-NEXT:    vmsne.vi v0, v10, 0241; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, ma242; CHECK-NEXT:    vmerge.vvm v8, v9, v8, v0243; CHECK-NEXT:    ret244  %v = select i1 %c, <2 x double> %a, <2 x double> %b245  ret <2 x double> %v246}247 248define <2 x double> @selectcc_v2f64(double %a, double %b, <2 x double> %c, <2 x double> %d) {249; CHECK-LABEL: selectcc_v2f64:250; CHECK:       # %bb.0:251; CHECK-NEXT:    feq.d a0, fa0, fa1252; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma253; CHECK-NEXT:    vmv.v.x v10, a0254; CHECK-NEXT:    vmsne.vi v0, v10, 0255; CHECK-NEXT:    vsetvli zero, zero, e64, m1, ta, ma256; CHECK-NEXT:    vmerge.vvm v8, v9, v8, v0257; CHECK-NEXT:    ret258  %cmp = fcmp oeq double %a, %b259  %v = select i1 %cmp, <2 x double> %c, <2 x double> %d260  ret <2 x double> %v261}262 263define <4 x double> @select_v4f64(i1 zeroext %c, <4 x double> %a, <4 x double> %b) {264; CHECK-LABEL: select_v4f64:265; CHECK:       # %bb.0:266; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma267; CHECK-NEXT:    vmv.v.x v12, a0268; CHECK-NEXT:    vmsne.vi v0, v12, 0269; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma270; CHECK-NEXT:    vmerge.vvm v8, v10, v8, v0271; CHECK-NEXT:    ret272  %v = select i1 %c, <4 x double> %a, <4 x double> %b273  ret <4 x double> %v274}275 276define <4 x double> @selectcc_v4f64(double %a, double %b, <4 x double> %c, <4 x double> %d) {277; CHECK-LABEL: selectcc_v4f64:278; CHECK:       # %bb.0:279; CHECK-NEXT:    feq.d a0, fa0, fa1280; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma281; CHECK-NEXT:    vmv.v.x v12, a0282; CHECK-NEXT:    vmsne.vi v0, v12, 0283; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma284; CHECK-NEXT:    vmerge.vvm v8, v10, v8, v0285; CHECK-NEXT:    ret286  %cmp = fcmp oeq double %a, %b287  %v = select i1 %cmp, <4 x double> %c, <4 x double> %d288  ret <4 x double> %v289}290 291define <8 x double> @select_v8f64(i1 zeroext %c, <8 x double> %a, <8 x double> %b) {292; CHECK-LABEL: select_v8f64:293; CHECK:       # %bb.0:294; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma295; CHECK-NEXT:    vmv.v.x v16, a0296; CHECK-NEXT:    vmsne.vi v0, v16, 0297; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, ma298; CHECK-NEXT:    vmerge.vvm v8, v12, v8, v0299; CHECK-NEXT:    ret300  %v = select i1 %c, <8 x double> %a, <8 x double> %b301  ret <8 x double> %v302}303 304define <8 x double> @selectcc_v8f64(double %a, double %b, <8 x double> %c, <8 x double> %d) {305; CHECK-LABEL: selectcc_v8f64:306; CHECK:       # %bb.0:307; CHECK-NEXT:    feq.d a0, fa0, fa1308; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma309; CHECK-NEXT:    vmv.v.x v16, a0310; CHECK-NEXT:    vmsne.vi v0, v16, 0311; CHECK-NEXT:    vsetvli zero, zero, e64, m4, ta, ma312; CHECK-NEXT:    vmerge.vvm v8, v12, v8, v0313; CHECK-NEXT:    ret314  %cmp = fcmp oeq double %a, %b315  %v = select i1 %cmp, <8 x double> %c, <8 x double> %d316  ret <8 x double> %v317}318 319define <16 x double> @select_v16f64(i1 zeroext %c, <16 x double> %a, <16 x double> %b) {320; CHECK-LABEL: select_v16f64:321; CHECK:       # %bb.0:322; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma323; CHECK-NEXT:    vmv.v.x v24, a0324; CHECK-NEXT:    vmsne.vi v0, v24, 0325; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, ma326; CHECK-NEXT:    vmerge.vvm v8, v16, v8, v0327; CHECK-NEXT:    ret328  %v = select i1 %c, <16 x double> %a, <16 x double> %b329  ret <16 x double> %v330}331 332define <16 x double> @selectcc_v16f64(double %a, double %b, <16 x double> %c, <16 x double> %d) {333; CHECK-LABEL: selectcc_v16f64:334; CHECK:       # %bb.0:335; CHECK-NEXT:    feq.d a0, fa0, fa1336; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma337; CHECK-NEXT:    vmv.v.x v24, a0338; CHECK-NEXT:    vmsne.vi v0, v24, 0339; CHECK-NEXT:    vsetvli zero, zero, e64, m8, ta, ma340; CHECK-NEXT:    vmerge.vvm v8, v16, v8, v0341; CHECK-NEXT:    ret342  %cmp = fcmp oeq double %a, %b343  %v = select i1 %cmp, <16 x double> %c, <16 x double> %d344  ret <16 x double> %v345}346