brintos

brintos / llvm-project-archived public Read only

0
0
Text · 28.8 KiB · 8bdeebe Raw
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