950 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx --verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,LA323; RUN: llc --mtriple=loongarch64 --mattr=+lsx --verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,LA644 5define i16 @vmsk_eq_allzeros_i8(<16 x i8 > %a) {6; CHECK-LABEL: vmsk_eq_allzeros_i8:7; CHECK: # %bb.0: # %entry8; CHECK-NEXT: vmsknz.b $vr0, $vr09; CHECK-NEXT: vnor.v $vr0, $vr0, $vr010; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 011; CHECK-NEXT: ret12entry:13 %1 = icmp eq <16 x i8> %a, splat (i8 0)14 %2 = bitcast <16 x i1> %1 to i1615 ret i16 %216}17 18define i16 @vmsk_sgt_allzeros_i8(<16 x i8 > %a) {19; CHECK-LABEL: vmsk_sgt_allzeros_i8:20; CHECK: # %bb.0: # %entry21; CHECK-NEXT: vrepli.b $vr1, 022; CHECK-NEXT: vslt.b $vr0, $vr1, $vr023; CHECK-NEXT: vmskltz.b $vr0, $vr024; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 025; CHECK-NEXT: ret26entry:27 %1 = icmp sgt <16 x i8> %a, splat (i8 0)28 %2 = bitcast <16 x i1> %1 to i1629 ret i16 %230}31 32define i16 @vmsk_sgt_allones_i8(<16 x i8 > %a) {33; CHECK-LABEL: vmsk_sgt_allones_i8:34; CHECK: # %bb.0: # %entry35; CHECK-NEXT: vmskgez.b $vr0, $vr036; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 037; CHECK-NEXT: ret38entry:39 %1 = icmp sgt <16 x i8> %a, splat (i8 -1)40 %2 = bitcast <16 x i1> %1 to i1641 ret i16 %242}43 44define i16 @vmsk_sge_allzeros_i8(<16 x i8 > %a) {45; CHECK-LABEL: vmsk_sge_allzeros_i8:46; CHECK: # %bb.0: # %entry47; CHECK-NEXT: vmskgez.b $vr0, $vr048; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 049; CHECK-NEXT: ret50entry:51 %1 = icmp sge <16 x i8> %a, splat (i8 0)52 %2 = bitcast <16 x i1> %1 to i1653 ret i16 %254}55 56define i16 @vmsk_slt_allzeros_i8(<16 x i8 > %a) {57; CHECK-LABEL: vmsk_slt_allzeros_i8:58; CHECK: # %bb.0: # %entry59; CHECK-NEXT: vmskltz.b $vr0, $vr060; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 061; CHECK-NEXT: ret62entry:63 %1 = icmp slt <16 x i8> %a, splat (i8 0)64 %2 = bitcast <16 x i1> %1 to i1665 ret i16 %266}67 68define i8 @vmsk_slt_allzeros_i16(<8 x i16 > %a) {69; CHECK-LABEL: vmsk_slt_allzeros_i16:70; CHECK: # %bb.0: # %entry71; CHECK-NEXT: vmskltz.h $vr0, $vr072; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 073; CHECK-NEXT: ret74entry:75 %1 = icmp slt <8 x i16> %a, splat (i16 0)76 %2 = bitcast <8 x i1> %1 to i877 ret i8 %278}79 80define i4 @vmsk_slt_allzeros_i32(<4 x i32 > %a) {81; CHECK-LABEL: vmsk_slt_allzeros_i32:82; CHECK: # %bb.0: # %entry83; CHECK-NEXT: vmskltz.w $vr0, $vr084; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 085; CHECK-NEXT: ret86entry:87 %1 = icmp slt <4 x i32> %a, splat (i32 0)88 %2 = bitcast <4 x i1> %1 to i489 ret i4 %290}91 92define i2 @vmsk_slt_allzeros_i64(<2 x i64 > %a) {93; CHECK-LABEL: vmsk_slt_allzeros_i64:94; CHECK: # %bb.0: # %entry95; CHECK-NEXT: vmskltz.d $vr0, $vr096; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 097; CHECK-NEXT: ret98entry:99 %1 = icmp slt <2 x i64> %a, splat (i64 0)100 %2 = bitcast <2 x i1> %1 to i2101 ret i2 %2102}103 104define i16 @vmsk_sle_allzeros_i8(<16 x i8 > %a) {105; CHECK-LABEL: vmsk_sle_allzeros_i8:106; CHECK: # %bb.0: # %entry107; CHECK-NEXT: vslei.b $vr0, $vr0, 0108; CHECK-NEXT: vmskltz.b $vr0, $vr0109; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0110; CHECK-NEXT: ret111entry:112 %1 = icmp sle <16 x i8> %a, splat (i8 0)113 %2 = bitcast <16 x i1> %1 to i16114 ret i16 %2115}116 117define i16 @vmsk_sle_allones_i8(<16 x i8 > %a) {118; CHECK-LABEL: vmsk_sle_allones_i8:119; CHECK: # %bb.0: # %entry120; CHECK-NEXT: vmskltz.b $vr0, $vr0121; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0122; CHECK-NEXT: ret123entry:124 %1 = icmp sle <16 x i8> %a, splat (i8 -1)125 %2 = bitcast <16 x i1> %1 to i16126 ret i16 %2127}128 129define i8 @vmsk_sle_allones_i16(<8 x i16 > %a) {130; CHECK-LABEL: vmsk_sle_allones_i16:131; CHECK: # %bb.0: # %entry132; CHECK-NEXT: vmskltz.h $vr0, $vr0133; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0134; CHECK-NEXT: ret135entry:136 %1 = icmp sle <8 x i16> %a, splat (i16 -1)137 %2 = bitcast <8 x i1> %1 to i8138 ret i8 %2139}140 141define i4 @vmsk_sle_allones_i32(<4 x i32 > %a) {142; CHECK-LABEL: vmsk_sle_allones_i32:143; CHECK: # %bb.0: # %entry144; CHECK-NEXT: vmskltz.w $vr0, $vr0145; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0146; CHECK-NEXT: ret147entry:148 %1 = icmp sle <4 x i32> %a, splat (i32 -1)149 %2 = bitcast <4 x i1> %1 to i4150 ret i4 %2151}152 153define i2 @vmsk_sle_allones_i64(<2 x i64 > %a) {154; CHECK-LABEL: vmsk_sle_allones_i64:155; CHECK: # %bb.0: # %entry156; CHECK-NEXT: vmskltz.d $vr0, $vr0157; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0158; CHECK-NEXT: ret159entry:160 %1 = icmp sle <2 x i64> %a, splat (i64 -1)161 %2 = bitcast <2 x i1> %1 to i2162 ret i2 %2163}164 165define i16 @vmsk_ne_allzeros_i8(<16 x i8 > %a) {166; CHECK-LABEL: vmsk_ne_allzeros_i8:167; CHECK: # %bb.0: # %entry168; CHECK-NEXT: vmsknz.b $vr0, $vr0169; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0170; CHECK-NEXT: ret171entry:172 %1 = icmp ne <16 x i8> %a, splat (i8 0)173 %2 = bitcast <16 x i1> %1 to i16174 ret i16 %2175}176 177define i2 @vmsk_sgt_v2i8(<2 x i8> %a, <2 x i8> %b) {178; CHECK-LABEL: vmsk_sgt_v2i8:179; CHECK: # %bb.0:180; CHECK-NEXT: vslt.b $vr0, $vr1, $vr0181; CHECK-NEXT: vilvl.b $vr0, $vr0, $vr0182; CHECK-NEXT: vilvl.h $vr0, $vr0, $vr0183; CHECK-NEXT: vilvl.w $vr0, $vr0, $vr0184; CHECK-NEXT: vslli.d $vr0, $vr0, 56185; CHECK-NEXT: vmskltz.d $vr0, $vr0186; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0187; CHECK-NEXT: ret188 %x = icmp sgt <2 x i8> %a, %b189 %res = bitcast <2 x i1> %x to i2190 ret i2 %res191}192 193define i2 @vmsk_sgt_v2i16(<2 x i16> %a, <2 x i16> %b) {194; CHECK-LABEL: vmsk_sgt_v2i16:195; CHECK: # %bb.0:196; CHECK-NEXT: vslt.h $vr0, $vr1, $vr0197; CHECK-NEXT: vilvl.h $vr0, $vr0, $vr0198; CHECK-NEXT: vilvl.w $vr0, $vr0, $vr0199; CHECK-NEXT: vslli.d $vr0, $vr0, 48200; CHECK-NEXT: vmskltz.d $vr0, $vr0201; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0202; CHECK-NEXT: ret203 %x = icmp sgt <2 x i16> %a, %b204 %res = bitcast <2 x i1> %x to i2205 ret i2 %res206}207 208define i2 @vmsk_sgt_v2i32(<2 x i32> %a, <2 x i32> %b) {209; CHECK-LABEL: vmsk_sgt_v2i32:210; CHECK: # %bb.0:211; CHECK-NEXT: vslt.w $vr0, $vr1, $vr0212; CHECK-NEXT: vshuf4i.w $vr0, $vr0, 16213; CHECK-NEXT: vslli.d $vr0, $vr0, 32214; CHECK-NEXT: vmskltz.d $vr0, $vr0215; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0216; CHECK-NEXT: ret217 %x = icmp sgt <2 x i32> %a, %b218 %res = bitcast <2 x i1> %x to i2219 ret i2 %res220}221 222define i2 @vmsk_sgt_v2i64(<2 x i64> %a, <2 x i64> %b) {223; CHECK-LABEL: vmsk_sgt_v2i64:224; CHECK: # %bb.0:225; CHECK-NEXT: vslt.d $vr0, $vr1, $vr0226; CHECK-NEXT: vmskltz.d $vr0, $vr0227; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0228; CHECK-NEXT: ret229 %x = icmp sgt <2 x i64> %a, %b230 %res = bitcast <2 x i1> %x to i2231 ret i2 %res232}233 234define i2 @vmsk_ogt_v2f64(<2 x double> %a, <2 x double> %b) {235; CHECK-LABEL: vmsk_ogt_v2f64:236; CHECK: # %bb.0:237; CHECK-NEXT: vfcmp.clt.d $vr0, $vr1, $vr0238; CHECK-NEXT: vmskltz.d $vr0, $vr0239; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0240; CHECK-NEXT: ret241 %x = fcmp ogt <2 x double> %a, %b242 %res = bitcast <2 x i1> %x to i2243 ret i2 %res244}245 246define i4 @vmsk_sgt_v4i8(<4 x i8> %a, <4 x i8> %b) {247; CHECK-LABEL: vmsk_sgt_v4i8:248; CHECK: # %bb.0:249; CHECK-NEXT: vslt.b $vr0, $vr1, $vr0250; CHECK-NEXT: vilvl.b $vr0, $vr0, $vr0251; CHECK-NEXT: vilvl.h $vr0, $vr0, $vr0252; CHECK-NEXT: vslli.w $vr0, $vr0, 24253; CHECK-NEXT: vmskltz.w $vr0, $vr0254; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0255; CHECK-NEXT: ret256 %x = icmp sgt <4 x i8> %a, %b257 %res = bitcast <4 x i1> %x to i4258 ret i4 %res259}260 261define i4 @vmsk_sgt_v4i16(<4 x i16> %a, <4 x i16> %b) {262; CHECK-LABEL: vmsk_sgt_v4i16:263; CHECK: # %bb.0:264; CHECK-NEXT: vslt.h $vr0, $vr1, $vr0265; CHECK-NEXT: vilvl.h $vr0, $vr0, $vr0266; CHECK-NEXT: vslli.w $vr0, $vr0, 16267; CHECK-NEXT: vmskltz.w $vr0, $vr0268; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0269; CHECK-NEXT: ret270 %x = icmp sgt <4 x i16> %a, %b271 %res = bitcast <4 x i1> %x to i4272 ret i4 %res273}274 275define i4 @vmsk_sgt_v4i32(<4 x i32> %a, <4 x i32> %b) {276; CHECK-LABEL: vmsk_sgt_v4i32:277; CHECK: # %bb.0:278; CHECK-NEXT: vslt.w $vr0, $vr1, $vr0279; CHECK-NEXT: vmskltz.w $vr0, $vr0280; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0281; CHECK-NEXT: ret282 %x = icmp sgt <4 x i32> %a, %b283 %res = bitcast <4 x i1> %x to i4284 ret i4 %res285}286 287define i4 @vmsk_ogt_v4f32(<4 x float> %a, <4 x float> %b) {288; CHECK-LABEL: vmsk_ogt_v4f32:289; CHECK: # %bb.0:290; CHECK-NEXT: vfcmp.clt.s $vr0, $vr1, $vr0291; CHECK-NEXT: vmskltz.w $vr0, $vr0292; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0293; CHECK-NEXT: ret294 %x = fcmp ogt <4 x float> %a, %b295 %res = bitcast <4 x i1> %x to i4296 ret i4 %res297}298 299define i8 @vmsk_sgt_v8i8(<8 x i8> %a, <8 x i8> %b) {300; CHECK-LABEL: vmsk_sgt_v8i8:301; CHECK: # %bb.0:302; CHECK-NEXT: vslt.b $vr0, $vr1, $vr0303; CHECK-NEXT: vilvl.b $vr0, $vr0, $vr0304; CHECK-NEXT: vslli.h $vr0, $vr0, 8305; CHECK-NEXT: vmskltz.h $vr0, $vr0306; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0307; CHECK-NEXT: ret308 %x = icmp sgt <8 x i8> %a, %b309 %res = bitcast <8 x i1> %x to i8310 ret i8 %res311}312 313define i8 @vmsk_sgt_v8i16(<8 x i16> %a, <8 x i16> %b) {314; CHECK-LABEL: vmsk_sgt_v8i16:315; CHECK: # %bb.0:316; CHECK-NEXT: vslt.h $vr0, $vr1, $vr0317; CHECK-NEXT: vmskltz.h $vr0, $vr0318; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0319; CHECK-NEXT: ret320 %x = icmp sgt <8 x i16> %a, %b321 %res = bitcast <8 x i1> %x to i8322 ret i8 %res323}324 325define i16 @vmsk_sgt_v16i8(<16 x i8> %a, <16 x i8> %b) {326; CHECK-LABEL: vmsk_sgt_v16i8:327; CHECK: # %bb.0:328; CHECK-NEXT: vslt.b $vr0, $vr1, $vr0329; CHECK-NEXT: vmskltz.b $vr0, $vr0330; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0331; CHECK-NEXT: ret332 %x = icmp sgt <16 x i8> %a, %b333 %res = bitcast <16 x i1> %x to i16334 ret i16 %res335}336 337define i2 @vmsk_sgt_and_sgt_v2i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i8> %d) {338; CHECK-LABEL: vmsk_sgt_and_sgt_v2i8:339; CHECK: # %bb.0:340; CHECK-NEXT: vslt.b $vr0, $vr1, $vr0341; CHECK-NEXT: vslt.b $vr1, $vr3, $vr2342; CHECK-NEXT: vand.v $vr0, $vr0, $vr1343; CHECK-NEXT: vilvl.b $vr0, $vr0, $vr0344; CHECK-NEXT: vilvl.h $vr0, $vr0, $vr0345; CHECK-NEXT: vilvl.w $vr0, $vr0, $vr0346; CHECK-NEXT: vslli.d $vr0, $vr0, 56347; CHECK-NEXT: vmskltz.d $vr0, $vr0348; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0349; CHECK-NEXT: ret350 %x0 = icmp sgt <2 x i8> %a, %b351 %x1 = icmp sgt <2 x i8> %c, %d352 %y = and <2 x i1> %x0, %x1353 %res = bitcast <2 x i1> %y to i2354 ret i2 %res355}356 357define i2 @vmsk_sgt_and_sgt_v2i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i16> %d) {358; CHECK-LABEL: vmsk_sgt_and_sgt_v2i16:359; CHECK: # %bb.0:360; CHECK-NEXT: vslt.h $vr0, $vr1, $vr0361; CHECK-NEXT: vslt.h $vr1, $vr3, $vr2362; CHECK-NEXT: vand.v $vr0, $vr0, $vr1363; CHECK-NEXT: vilvl.h $vr0, $vr0, $vr0364; CHECK-NEXT: vilvl.w $vr0, $vr0, $vr0365; CHECK-NEXT: vslli.d $vr0, $vr0, 48366; CHECK-NEXT: vmskltz.d $vr0, $vr0367; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0368; CHECK-NEXT: ret369 %x0 = icmp sgt <2 x i16> %a, %b370 %x1 = icmp sgt <2 x i16> %c, %d371 %y = and <2 x i1> %x0, %x1372 %res = bitcast <2 x i1> %y to i2373 ret i2 %res374}375 376define i2 @vmsk_sgt_and_sgt_v2i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c, <2 x i32> %d) {377; CHECK-LABEL: vmsk_sgt_and_sgt_v2i32:378; CHECK: # %bb.0:379; CHECK-NEXT: vslt.w $vr0, $vr1, $vr0380; CHECK-NEXT: vslt.w $vr1, $vr3, $vr2381; CHECK-NEXT: vand.v $vr0, $vr0, $vr1382; CHECK-NEXT: vshuf4i.w $vr0, $vr0, 16383; CHECK-NEXT: vslli.d $vr0, $vr0, 32384; CHECK-NEXT: vmskltz.d $vr0, $vr0385; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0386; CHECK-NEXT: ret387 %x0 = icmp sgt <2 x i32> %a, %b388 %x1 = icmp sgt <2 x i32> %c, %d389 %y = and <2 x i1> %x0, %x1390 %res = bitcast <2 x i1> %y to i2391 ret i2 %res392}393 394define i2 @vmsk_sgt_and_sgt_v2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c, <2 x i64> %d) {395; CHECK-LABEL: vmsk_sgt_and_sgt_v2i64:396; CHECK: # %bb.0:397; CHECK-NEXT: vslt.d $vr0, $vr1, $vr0398; CHECK-NEXT: vslt.d $vr1, $vr3, $vr2399; CHECK-NEXT: vand.v $vr0, $vr0, $vr1400; CHECK-NEXT: vmskltz.d $vr0, $vr0401; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0402; CHECK-NEXT: ret403 %x0 = icmp sgt <2 x i64> %a, %b404 %x1 = icmp sgt <2 x i64> %c, %d405 %y = and <2 x i1> %x0, %x1406 %res = bitcast <2 x i1> %y to i2407 ret i2 %res408}409 410define i2 @vmsk_ogt_and_ogt_v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x double> %d) {411; CHECK-LABEL: vmsk_ogt_and_ogt_v2f64:412; CHECK: # %bb.0:413; CHECK-NEXT: vfcmp.clt.d $vr0, $vr1, $vr0414; CHECK-NEXT: vfcmp.clt.d $vr1, $vr3, $vr2415; CHECK-NEXT: vand.v $vr0, $vr0, $vr1416; CHECK-NEXT: vmskltz.d $vr0, $vr0417; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0418; CHECK-NEXT: ret419 %x0 = fcmp ogt <2 x double> %a, %b420 %x1 = fcmp ogt <2 x double> %c, %d421 %y = and <2 x i1> %x0, %x1422 %res = bitcast <2 x i1> %y to i2423 ret i2 %res424}425 426define i4 @vmsk_sgt_and_sgt_v4i8(<4 x i8> %a, <4 x i8> %b, <4 x i8> %c, <4 x i8> %d) {427; CHECK-LABEL: vmsk_sgt_and_sgt_v4i8:428; CHECK: # %bb.0:429; CHECK-NEXT: vslt.b $vr0, $vr1, $vr0430; CHECK-NEXT: vslt.b $vr1, $vr3, $vr2431; CHECK-NEXT: vand.v $vr0, $vr0, $vr1432; CHECK-NEXT: vilvl.b $vr0, $vr0, $vr0433; CHECK-NEXT: vilvl.h $vr0, $vr0, $vr0434; CHECK-NEXT: vslli.w $vr0, $vr0, 24435; CHECK-NEXT: vmskltz.w $vr0, $vr0436; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0437; CHECK-NEXT: ret438 %x0 = icmp sgt <4 x i8> %a, %b439 %x1 = icmp sgt <4 x i8> %c, %d440 %y = and <4 x i1> %x0, %x1441 %res = bitcast <4 x i1> %y to i4442 ret i4 %res443}444 445define i4 @vmsk_sgt_and_sgt_v4i16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c, <4 x i16> %d) {446; CHECK-LABEL: vmsk_sgt_and_sgt_v4i16:447; CHECK: # %bb.0:448; CHECK-NEXT: vslt.h $vr0, $vr1, $vr0449; CHECK-NEXT: vslt.h $vr1, $vr3, $vr2450; CHECK-NEXT: vand.v $vr0, $vr0, $vr1451; CHECK-NEXT: vilvl.h $vr0, $vr0, $vr0452; CHECK-NEXT: vslli.w $vr0, $vr0, 16453; CHECK-NEXT: vmskltz.w $vr0, $vr0454; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0455; CHECK-NEXT: ret456 %x0 = icmp sgt <4 x i16> %a, %b457 %x1 = icmp sgt <4 x i16> %c, %d458 %y = and <4 x i1> %x0, %x1459 %res = bitcast <4 x i1> %y to i4460 ret i4 %res461}462 463define i4 @vmsk_sgt_and_sgt_v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i32> %d) {464; CHECK-LABEL: vmsk_sgt_and_sgt_v4i32:465; CHECK: # %bb.0:466; CHECK-NEXT: vslt.w $vr0, $vr1, $vr0467; CHECK-NEXT: vslt.w $vr1, $vr3, $vr2468; CHECK-NEXT: vand.v $vr0, $vr0, $vr1469; CHECK-NEXT: vmskltz.w $vr0, $vr0470; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0471; CHECK-NEXT: ret472 %x0 = icmp sgt <4 x i32> %a, %b473 %x1 = icmp sgt <4 x i32> %c, %d474 %y = and <4 x i1> %x0, %x1475 %res = bitcast <4 x i1> %y to i4476 ret i4 %res477}478 479define i4 @vmsk_ogt_and_ogt_v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d) {480; CHECK-LABEL: vmsk_ogt_and_ogt_v4f32:481; CHECK: # %bb.0:482; CHECK-NEXT: vfcmp.clt.s $vr0, $vr1, $vr0483; CHECK-NEXT: vfcmp.clt.s $vr1, $vr3, $vr2484; CHECK-NEXT: vand.v $vr0, $vr0, $vr1485; CHECK-NEXT: vmskltz.w $vr0, $vr0486; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0487; CHECK-NEXT: ret488 %x0 = fcmp ogt <4 x float> %a, %b489 %x1 = fcmp ogt <4 x float> %c, %d490 %y = and <4 x i1> %x0, %x1491 %res = bitcast <4 x i1> %y to i4492 ret i4 %res493}494 495define i8 @vmsk_sgt_and_sgt_v8i8(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c, <8 x i8> %d) {496; CHECK-LABEL: vmsk_sgt_and_sgt_v8i8:497; CHECK: # %bb.0:498; CHECK-NEXT: vslt.b $vr0, $vr1, $vr0499; CHECK-NEXT: vslt.b $vr1, $vr3, $vr2500; CHECK-NEXT: vand.v $vr0, $vr0, $vr1501; CHECK-NEXT: vilvl.b $vr0, $vr0, $vr0502; CHECK-NEXT: vslli.h $vr0, $vr0, 8503; CHECK-NEXT: vmskltz.h $vr0, $vr0504; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0505; CHECK-NEXT: ret506 %x0 = icmp sgt <8 x i8> %a, %b507 %x1 = icmp sgt <8 x i8> %c, %d508 %y = and <8 x i1> %x0, %x1509 %res = bitcast <8 x i1> %y to i8510 ret i8 %res511}512 513define i8 @vmsk_sgt_and_sgt_v8i16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c, <8 x i16> %d) {514; CHECK-LABEL: vmsk_sgt_and_sgt_v8i16:515; CHECK: # %bb.0:516; CHECK-NEXT: vslt.h $vr0, $vr1, $vr0517; CHECK-NEXT: vslt.h $vr1, $vr3, $vr2518; CHECK-NEXT: vand.v $vr0, $vr0, $vr1519; CHECK-NEXT: vmskltz.h $vr0, $vr0520; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0521; CHECK-NEXT: ret522 %x0 = icmp sgt <8 x i16> %a, %b523 %x1 = icmp sgt <8 x i16> %c, %d524 %y = and <8 x i1> %x0, %x1525 %res = bitcast <8 x i1> %y to i8526 ret i8 %res527}528 529define i16 @vmsk_sgt_and_sgt_v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i8> %d) {530; CHECK-LABEL: vmsk_sgt_and_sgt_v16i8:531; CHECK: # %bb.0:532; CHECK-NEXT: vslt.b $vr0, $vr1, $vr0533; CHECK-NEXT: vslt.b $vr1, $vr3, $vr2534; CHECK-NEXT: vand.v $vr0, $vr0, $vr1535; CHECK-NEXT: vmskltz.b $vr0, $vr0536; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0537; CHECK-NEXT: ret538 %x0 = icmp sgt <16 x i8> %a, %b539 %x1 = icmp sgt <16 x i8> %c, %d540 %y = and <16 x i1> %x0, %x1541 %res = bitcast <16 x i1> %y to i16542 ret i16 %res543}544 545define i16 @vmsk_trunc_i8(<16 x i8> %a) {546; CHECK-LABEL: vmsk_trunc_i8:547; CHECK: # %bb.0:548; CHECK-NEXT: vslli.b $vr0, $vr0, 7549; CHECK-NEXT: vmskltz.b $vr0, $vr0550; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0551; CHECK-NEXT: ret552 %y = trunc <16 x i8> %a to <16 x i1>553 %res = bitcast <16 x i1> %y to i16554 ret i16 %res555}556 557define i8 @vmsk_trunc_i16(<8 x i16> %a) {558; CHECK-LABEL: vmsk_trunc_i16:559; CHECK: # %bb.0:560; CHECK-NEXT: vslli.h $vr0, $vr0, 15561; CHECK-NEXT: vmskltz.h $vr0, $vr0562; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0563; CHECK-NEXT: ret564 %y = trunc <8 x i16> %a to <8 x i1>565 %res = bitcast <8 x i1> %y to i8566 ret i8 %res567}568 569define i4 @vmsk_trunc_i32(<4 x i32> %a) {570; CHECK-LABEL: vmsk_trunc_i32:571; CHECK: # %bb.0:572; CHECK-NEXT: vslli.w $vr0, $vr0, 31573; CHECK-NEXT: vmskltz.w $vr0, $vr0574; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0575; CHECK-NEXT: ret576 %y = trunc <4 x i32> %a to <4 x i1>577 %res = bitcast <4 x i1> %y to i4578 ret i4 %res579}580 581define i2 @vmsk_trunc_i64(<2 x i64> %a) {582; CHECK-LABEL: vmsk_trunc_i64:583; CHECK: # %bb.0:584; CHECK-NEXT: vslli.d $vr0, $vr0, 63585; CHECK-NEXT: vmskltz.d $vr0, $vr0586; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0587; CHECK-NEXT: ret588 %y = trunc <2 x i64> %a to <2 x i1>589 %res = bitcast <2 x i1> %y to i2590 ret i2 %res591}592 593define i4 @vmsk_eq_allzeros_v4i8(<4 x i8> %a) {594; CHECK-LABEL: vmsk_eq_allzeros_v4i8:595; CHECK: # %bb.0:596; CHECK-NEXT: vseqi.b $vr0, $vr0, 0597; CHECK-NEXT: vilvl.b $vr0, $vr0, $vr0598; CHECK-NEXT: vilvl.h $vr0, $vr0, $vr0599; CHECK-NEXT: vslli.w $vr0, $vr0, 24600; CHECK-NEXT: vmskltz.w $vr0, $vr0601; CHECK-NEXT: vpickve2gr.hu $a0, $vr0, 0602; CHECK-NEXT: ret603 %1 = icmp eq <4 x i8> %a, zeroinitializer604 %2 = bitcast <4 x i1> %1 to i4605 ret i4 %2606}607 608define i32 @vmsk2_eq_allzeros_i8(<32 x i8> %a) {609; LA32-LABEL: vmsk2_eq_allzeros_i8:610; LA32: # %bb.0: # %entry611; LA32-NEXT: vseqi.b $vr0, $vr0, 0612; LA32-NEXT: vmskltz.b $vr0, $vr0613; LA32-NEXT: vpickve2gr.hu $a0, $vr0, 0614; LA32-NEXT: vseqi.b $vr0, $vr1, 0615; LA32-NEXT: vmskltz.b $vr0, $vr0616; LA32-NEXT: vpickve2gr.hu $a1, $vr0, 0617; LA32-NEXT: slli.w $a1, $a1, 16618; LA32-NEXT: or $a0, $a0, $a1619; LA32-NEXT: ret620;621; LA64-LABEL: vmsk2_eq_allzeros_i8:622; LA64: # %bb.0: # %entry623; LA64-NEXT: vseqi.b $vr0, $vr0, 0624; LA64-NEXT: vmskltz.b $vr0, $vr0625; LA64-NEXT: vpickve2gr.hu $a0, $vr0, 0626; LA64-NEXT: vseqi.b $vr0, $vr1, 0627; LA64-NEXT: vmskltz.b $vr0, $vr0628; LA64-NEXT: vpickve2gr.hu $a1, $vr0, 0629; LA64-NEXT: slli.d $a1, $a1, 16630; LA64-NEXT: or $a0, $a0, $a1631; LA64-NEXT: ret632entry:633 %1 = icmp eq <32 x i8> %a, splat (i8 0)634 %2 = bitcast <32 x i1> %1 to i32635 ret i32 %2636}637 638define i32 @vmsk2_sgt_allzeros_i8(<32 x i8> %a) {639; LA32-LABEL: vmsk2_sgt_allzeros_i8:640; LA32: # %bb.0: # %entry641; LA32-NEXT: vrepli.b $vr2, 0642; LA32-NEXT: vslt.b $vr0, $vr2, $vr0643; LA32-NEXT: vmskltz.b $vr0, $vr0644; LA32-NEXT: vpickve2gr.hu $a0, $vr0, 0645; LA32-NEXT: vslt.b $vr0, $vr2, $vr1646; LA32-NEXT: vmskltz.b $vr0, $vr0647; LA32-NEXT: vpickve2gr.hu $a1, $vr0, 0648; LA32-NEXT: slli.w $a1, $a1, 16649; LA32-NEXT: or $a0, $a0, $a1650; LA32-NEXT: ret651;652; LA64-LABEL: vmsk2_sgt_allzeros_i8:653; LA64: # %bb.0: # %entry654; LA64-NEXT: vrepli.b $vr2, 0655; LA64-NEXT: vslt.b $vr0, $vr2, $vr0656; LA64-NEXT: vmskltz.b $vr0, $vr0657; LA64-NEXT: vpickve2gr.hu $a0, $vr0, 0658; LA64-NEXT: vslt.b $vr0, $vr2, $vr1659; LA64-NEXT: vmskltz.b $vr0, $vr0660; LA64-NEXT: vpickve2gr.hu $a1, $vr0, 0661; LA64-NEXT: slli.d $a1, $a1, 16662; LA64-NEXT: or $a0, $a0, $a1663; LA64-NEXT: ret664entry:665 %1 = icmp sgt <32 x i8> %a, splat (i8 0)666 %2 = bitcast <32 x i1> %1 to i32667 ret i32 %2668}669 670define i32 @vmsk2_sgt_allones_i8(<32 x i8> %a) {671; LA32-LABEL: vmsk2_sgt_allones_i8:672; LA32: # %bb.0: # %entry673; LA32-NEXT: vrepli.b $vr2, -1674; LA32-NEXT: vslt.b $vr0, $vr2, $vr0675; LA32-NEXT: vmskltz.b $vr0, $vr0676; LA32-NEXT: vpickve2gr.hu $a0, $vr0, 0677; LA32-NEXT: vslt.b $vr0, $vr2, $vr1678; LA32-NEXT: vmskltz.b $vr0, $vr0679; LA32-NEXT: vpickve2gr.hu $a1, $vr0, 0680; LA32-NEXT: slli.w $a1, $a1, 16681; LA32-NEXT: or $a0, $a0, $a1682; LA32-NEXT: ret683;684; LA64-LABEL: vmsk2_sgt_allones_i8:685; LA64: # %bb.0: # %entry686; LA64-NEXT: vrepli.b $vr2, -1687; LA64-NEXT: vslt.b $vr0, $vr2, $vr0688; LA64-NEXT: vmskltz.b $vr0, $vr0689; LA64-NEXT: vpickve2gr.hu $a0, $vr0, 0690; LA64-NEXT: vslt.b $vr0, $vr2, $vr1691; LA64-NEXT: vmskltz.b $vr0, $vr0692; LA64-NEXT: vpickve2gr.hu $a1, $vr0, 0693; LA64-NEXT: slli.d $a1, $a1, 16694; LA64-NEXT: or $a0, $a0, $a1695; LA64-NEXT: ret696entry:697 %1 = icmp sgt <32 x i8> %a, splat (i8 -1)698 %2 = bitcast <32 x i1> %1 to i32699 ret i32 %2700}701 702define i32 @vmsk2_sge_allzeros_i8(<32 x i8> %a) {703; LA32-LABEL: vmsk2_sge_allzeros_i8:704; LA32: # %bb.0: # %entry705; LA32-NEXT: vrepli.b $vr2, 0706; LA32-NEXT: vsle.b $vr0, $vr2, $vr0707; LA32-NEXT: vmskltz.b $vr0, $vr0708; LA32-NEXT: vpickve2gr.hu $a0, $vr0, 0709; LA32-NEXT: vsle.b $vr0, $vr2, $vr1710; LA32-NEXT: vmskltz.b $vr0, $vr0711; LA32-NEXT: vpickve2gr.hu $a1, $vr0, 0712; LA32-NEXT: slli.w $a1, $a1, 16713; LA32-NEXT: or $a0, $a0, $a1714; LA32-NEXT: ret715;716; LA64-LABEL: vmsk2_sge_allzeros_i8:717; LA64: # %bb.0: # %entry718; LA64-NEXT: vrepli.b $vr2, 0719; LA64-NEXT: vsle.b $vr0, $vr2, $vr0720; LA64-NEXT: vmskltz.b $vr0, $vr0721; LA64-NEXT: vpickve2gr.hu $a0, $vr0, 0722; LA64-NEXT: vsle.b $vr0, $vr2, $vr1723; LA64-NEXT: vmskltz.b $vr0, $vr0724; LA64-NEXT: vpickve2gr.hu $a1, $vr0, 0725; LA64-NEXT: slli.d $a1, $a1, 16726; LA64-NEXT: or $a0, $a0, $a1727; LA64-NEXT: ret728entry:729 %1 = icmp sge <32 x i8> %a, splat (i8 0)730 %2 = bitcast <32 x i1> %1 to i32731 ret i32 %2732}733 734define i32 @vmsk2_slt_allzeros_i8(<32 x i8> %a) {735; LA32-LABEL: vmsk2_slt_allzeros_i8:736; LA32: # %bb.0: # %entry737; LA32-NEXT: vmskltz.b $vr0, $vr0738; LA32-NEXT: vpickve2gr.hu $a0, $vr0, 0739; LA32-NEXT: vmskltz.b $vr0, $vr1740; LA32-NEXT: vpickve2gr.hu $a1, $vr0, 0741; LA32-NEXT: slli.w $a1, $a1, 16742; LA32-NEXT: or $a0, $a0, $a1743; LA32-NEXT: ret744;745; LA64-LABEL: vmsk2_slt_allzeros_i8:746; LA64: # %bb.0: # %entry747; LA64-NEXT: vmskltz.b $vr0, $vr0748; LA64-NEXT: vpickve2gr.hu $a0, $vr0, 0749; LA64-NEXT: vmskltz.b $vr0, $vr1750; LA64-NEXT: vpickve2gr.hu $a1, $vr0, 0751; LA64-NEXT: slli.d $a1, $a1, 16752; LA64-NEXT: or $a0, $a0, $a1753; LA64-NEXT: ret754entry:755 %1 = icmp slt <32 x i8> %a, splat (i8 0)756 %2 = bitcast <32 x i1> %1 to i32757 ret i32 %2758}759 760define i32 @vmsk2_sle_allzeros_i8(<32 x i8> %a) {761; LA32-LABEL: vmsk2_sle_allzeros_i8:762; LA32: # %bb.0: # %entry763; LA32-NEXT: vslei.b $vr0, $vr0, 0764; LA32-NEXT: vmskltz.b $vr0, $vr0765; LA32-NEXT: vpickve2gr.hu $a0, $vr0, 0766; LA32-NEXT: vslei.b $vr0, $vr1, 0767; LA32-NEXT: vmskltz.b $vr0, $vr0768; LA32-NEXT: vpickve2gr.hu $a1, $vr0, 0769; LA32-NEXT: slli.w $a1, $a1, 16770; LA32-NEXT: or $a0, $a0, $a1771; LA32-NEXT: ret772;773; LA64-LABEL: vmsk2_sle_allzeros_i8:774; LA64: # %bb.0: # %entry775; LA64-NEXT: vslei.b $vr0, $vr0, 0776; LA64-NEXT: vmskltz.b $vr0, $vr0777; LA64-NEXT: vpickve2gr.hu $a0, $vr0, 0778; LA64-NEXT: vslei.b $vr0, $vr1, 0779; LA64-NEXT: vmskltz.b $vr0, $vr0780; LA64-NEXT: vpickve2gr.hu $a1, $vr0, 0781; LA64-NEXT: slli.d $a1, $a1, 16782; LA64-NEXT: or $a0, $a0, $a1783; LA64-NEXT: ret784entry:785 %1 = icmp sle <32 x i8> %a, splat (i8 0)786 %2 = bitcast <32 x i1> %1 to i32787 ret i32 %2788}789 790define i32 @vmsk2_sle_allones_i8(<32 x i8> %a) {791; LA32-LABEL: vmsk2_sle_allones_i8:792; LA32: # %bb.0: # %entry793; LA32-NEXT: vslei.b $vr0, $vr0, -1794; LA32-NEXT: vmskltz.b $vr0, $vr0795; LA32-NEXT: vpickve2gr.hu $a0, $vr0, 0796; LA32-NEXT: vslei.b $vr0, $vr1, -1797; LA32-NEXT: vmskltz.b $vr0, $vr0798; LA32-NEXT: vpickve2gr.hu $a1, $vr0, 0799; LA32-NEXT: slli.w $a1, $a1, 16800; LA32-NEXT: or $a0, $a0, $a1801; LA32-NEXT: ret802;803; LA64-LABEL: vmsk2_sle_allones_i8:804; LA64: # %bb.0: # %entry805; LA64-NEXT: vslei.b $vr0, $vr0, -1806; LA64-NEXT: vmskltz.b $vr0, $vr0807; LA64-NEXT: vpickve2gr.hu $a0, $vr0, 0808; LA64-NEXT: vslei.b $vr0, $vr1, -1809; LA64-NEXT: vmskltz.b $vr0, $vr0810; LA64-NEXT: vpickve2gr.hu $a1, $vr0, 0811; LA64-NEXT: slli.d $a1, $a1, 16812; LA64-NEXT: or $a0, $a0, $a1813; LA64-NEXT: ret814entry:815 %1 = icmp sle <32 x i8> %a, splat (i8 -1)816 %2 = bitcast <32 x i1> %1 to i32817 ret i32 %2818}819 820define i32 @vmsk2_ne_allzeros_i8(<32 x i8> %a) {821; LA32-LABEL: vmsk2_ne_allzeros_i8:822; LA32: # %bb.0: # %entry823; LA32-NEXT: vseqi.b $vr0, $vr0, 0824; LA32-NEXT: vxori.b $vr0, $vr0, 255825; LA32-NEXT: vmskltz.b $vr0, $vr0826; LA32-NEXT: vpickve2gr.hu $a0, $vr0, 0827; LA32-NEXT: vseqi.b $vr0, $vr1, 0828; LA32-NEXT: vxori.b $vr0, $vr0, 255829; LA32-NEXT: vmskltz.b $vr0, $vr0830; LA32-NEXT: vpickve2gr.hu $a1, $vr0, 0831; LA32-NEXT: slli.w $a1, $a1, 16832; LA32-NEXT: or $a0, $a0, $a1833; LA32-NEXT: ret834;835; LA64-LABEL: vmsk2_ne_allzeros_i8:836; LA64: # %bb.0: # %entry837; LA64-NEXT: vseqi.b $vr0, $vr0, 0838; LA64-NEXT: vxori.b $vr0, $vr0, 255839; LA64-NEXT: vmskltz.b $vr0, $vr0840; LA64-NEXT: vpickve2gr.hu $a0, $vr0, 0841; LA64-NEXT: vseqi.b $vr0, $vr1, 0842; LA64-NEXT: vxori.b $vr0, $vr0, 255843; LA64-NEXT: vmskltz.b $vr0, $vr0844; LA64-NEXT: vpickve2gr.hu $a1, $vr0, 0845; LA64-NEXT: slli.d $a1, $a1, 16846; LA64-NEXT: or $a0, $a0, $a1847; LA64-NEXT: ret848entry:849 %1 = icmp ne <32 x i8> %a, splat (i8 0)850 %2 = bitcast <32 x i1> %1 to i32851 ret i32 %2852}853 854define i32 @vmsk2_sgt_v32i8(<32 x i8> %a, <32 x i8> %b) {855; LA32-LABEL: vmsk2_sgt_v32i8:856; LA32: # %bb.0:857; LA32-NEXT: vslt.b $vr0, $vr2, $vr0858; LA32-NEXT: vmskltz.b $vr0, $vr0859; LA32-NEXT: vpickve2gr.hu $a0, $vr0, 0860; LA32-NEXT: vslt.b $vr0, $vr3, $vr1861; LA32-NEXT: vmskltz.b $vr0, $vr0862; LA32-NEXT: vpickve2gr.hu $a1, $vr0, 0863; LA32-NEXT: slli.w $a1, $a1, 16864; LA32-NEXT: or $a0, $a0, $a1865; LA32-NEXT: ret866;867; LA64-LABEL: vmsk2_sgt_v32i8:868; LA64: # %bb.0:869; LA64-NEXT: vslt.b $vr0, $vr2, $vr0870; LA64-NEXT: vmskltz.b $vr0, $vr0871; LA64-NEXT: vpickve2gr.hu $a0, $vr0, 0872; LA64-NEXT: vslt.b $vr0, $vr3, $vr1873; LA64-NEXT: vmskltz.b $vr0, $vr0874; LA64-NEXT: vpickve2gr.hu $a1, $vr0, 0875; LA64-NEXT: slli.d $a1, $a1, 16876; LA64-NEXT: or $a0, $a0, $a1877; LA64-NEXT: ret878 %x = icmp sgt <32 x i8> %a, %b879 %res = bitcast <32 x i1> %x to i32880 ret i32 %res881}882 883define i32 @vmsk2_sgt_and_sgt_v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %c, <32 x i8> %d) {884; LA32-LABEL: vmsk2_sgt_and_sgt_v32i8:885; LA32: # %bb.0:886; LA32-NEXT: vslt.b $vr0, $vr2, $vr0887; LA32-NEXT: vslt.b $vr1, $vr3, $vr1888; LA32-NEXT: vslt.b $vr2, $vr6, $vr4889; LA32-NEXT: vslt.b $vr3, $vr7, $vr5890; LA32-NEXT: vand.v $vr1, $vr1, $vr3891; LA32-NEXT: vand.v $vr0, $vr0, $vr2892; LA32-NEXT: vmskltz.b $vr0, $vr0893; LA32-NEXT: vpickve2gr.hu $a0, $vr0, 0894; LA32-NEXT: vmskltz.b $vr0, $vr1895; LA32-NEXT: vpickve2gr.hu $a1, $vr0, 0896; LA32-NEXT: slli.w $a1, $a1, 16897; LA32-NEXT: or $a0, $a0, $a1898; LA32-NEXT: ret899;900; LA64-LABEL: vmsk2_sgt_and_sgt_v32i8:901; LA64: # %bb.0:902; LA64-NEXT: vslt.b $vr0, $vr2, $vr0903; LA64-NEXT: vslt.b $vr1, $vr3, $vr1904; LA64-NEXT: vslt.b $vr2, $vr6, $vr4905; LA64-NEXT: vslt.b $vr3, $vr7, $vr5906; LA64-NEXT: vand.v $vr1, $vr1, $vr3907; LA64-NEXT: vand.v $vr0, $vr0, $vr2908; LA64-NEXT: vmskltz.b $vr0, $vr0909; LA64-NEXT: vpickve2gr.hu $a0, $vr0, 0910; LA64-NEXT: vmskltz.b $vr0, $vr1911; LA64-NEXT: vpickve2gr.hu $a1, $vr0, 0912; LA64-NEXT: slli.d $a1, $a1, 16913; LA64-NEXT: or $a0, $a0, $a1914; LA64-NEXT: ret915 %x0 = icmp sgt <32 x i8> %a, %b916 %x1 = icmp sgt <32 x i8> %c, %d917 %y = and <32 x i1> %x0, %x1918 %res = bitcast <32 x i1> %y to i32919 ret i32 %res920}921 922define i32 @vmsk2_trunc_i8(<32 x i8> %a) {923; LA32-LABEL: vmsk2_trunc_i8:924; LA32: # %bb.0:925; LA32-NEXT: vslli.b $vr0, $vr0, 7926; LA32-NEXT: vmskltz.b $vr0, $vr0927; LA32-NEXT: vpickve2gr.hu $a0, $vr0, 0928; LA32-NEXT: vslli.b $vr0, $vr1, 7929; LA32-NEXT: vmskltz.b $vr0, $vr0930; LA32-NEXT: vpickve2gr.hu $a1, $vr0, 0931; LA32-NEXT: slli.w $a1, $a1, 16932; LA32-NEXT: or $a0, $a0, $a1933; LA32-NEXT: ret934;935; LA64-LABEL: vmsk2_trunc_i8:936; LA64: # %bb.0:937; LA64-NEXT: vslli.b $vr0, $vr0, 7938; LA64-NEXT: vmskltz.b $vr0, $vr0939; LA64-NEXT: vpickve2gr.hu $a0, $vr0, 0940; LA64-NEXT: vslli.b $vr0, $vr1, 7941; LA64-NEXT: vmskltz.b $vr0, $vr0942; LA64-NEXT: vpickve2gr.hu $a1, $vr0, 0943; LA64-NEXT: slli.d $a1, $a1, 16944; LA64-NEXT: or $a0, $a0, $a1945; LA64-NEXT: ret946 %y = trunc <32 x i8> %a to <32 x i1>947 %res = bitcast <32 x i1> %y to i32948 ret i32 %res949}950