@@ -1368,3 +1368,38 @@ define <16 x i32> @shuffle_m2_prefix(<16 x i32> %a) {
13681368 %out = shufflevector <16 x i32 > %a , <16 x i32 > poison, <16 x i32 > <i32 2 , i32 3 , i32 5 , i32 2 , i32 3 , i32 5 , i32 7 , i32 4 , i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
13691369 ret <16 x i32 > %out
13701370}
1371+
1372+ define <4 x i16 > @vmerge_1 (<4 x i16 > %x ) {
1373+ ; CHECK-LABEL: vmerge_1:
1374+ ; CHECK: # %bb.0:
1375+ ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
1376+ ; CHECK-NEXT: vmv.v.i v0, 6
1377+ ; CHECK-NEXT: vmerge.vim v8, v8, 5, v0
1378+ ; CHECK-NEXT: ret
1379+ %s = shufflevector <4 x i16 > %x , <4 x i16 > <i16 5 , i16 5 , i16 5 , i16 5 >, <4 x i32 > <i32 0 , i32 5 , i32 6 , i32 3 >
1380+ ret <4 x i16 > %s
1381+ }
1382+
1383+ define <4 x i16 > @vmerge_2 (<4 x i16 > %x ) {
1384+ ; CHECK-LABEL: vmerge_2:
1385+ ; CHECK: # %bb.0:
1386+ ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
1387+ ; CHECK-NEXT: vmv.v.i v0, 9
1388+ ; CHECK-NEXT: vmv.v.i v9, 5
1389+ ; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0
1390+ ; CHECK-NEXT: ret
1391+ %s = shufflevector <4 x i16 > %x , <4 x i16 > <i16 poison, i16 5 , i16 5 , i16 poison>, <4 x i32 > <i32 0 , i32 5 , i32 6 , i32 3 >
1392+ ret <4 x i16 > %s
1393+ }
1394+
1395+ define <4 x i16 > @vmerge_3 (<4 x i16 > %x ) {
1396+ ; CHECK-LABEL: vmerge_3:
1397+ ; CHECK: # %bb.0:
1398+ ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
1399+ ; CHECK-NEXT: vmv.v.i v0, 6
1400+ ; CHECK-NEXT: vmv.v.i v9, 5
1401+ ; CHECK-NEXT: vrgather.vi v8, v9, 1, v0.t
1402+ ; CHECK-NEXT: ret
1403+ %s = shufflevector <4 x i16 > %x , <4 x i16 > <i16 poison, i16 5 , i16 poison, i16 poison>, <4 x i32 > <i32 0 , i32 5 , i32 5 , i32 3 >
1404+ ret <4 x i16 > %s
1405+ }
0 commit comments