@@ -12,6 +12,18 @@ define <32 x i8> @shufflevector_v32i8(<32 x i8> %a, <32 x i8> %b) {
1212 ret <32 x i8 > %c
1313}
1414
15+ ;; xvrepl128vei.b
16+ define <32 x i8 > @shufflevector_v32i8_undef (<32 x i8 > %a ) {
17+ ; CHECK-LABEL: shufflevector_v32i8_undef:
18+ ; CHECK: # %bb.0:
19+ ; CHECK-NEXT: xvpermi.d $xr0, $xr0, 68
20+ ; CHECK-NEXT: xvrepl128vei.b $xr0, $xr0, 1
21+ ; CHECK-NEXT: ret
22+ %c = shufflevector <32 x i8 > %a , <32 x i8 > poison, <32 x i32 > <i32 1 , i32 1 , i32 1 , i32 1 , i32 1 , i32 1 , i32 1 , i32 1 , i32 1 , i32 1 , i32 1 , i32 1 , i32 1 , i32 1 , i32 1 , i32 1 ,
23+ i32 33 , i32 33 , i32 33 , i32 33 , i32 33 , i32 33 , i32 33 , i32 33 , i32 33 , i32 33 , i32 33 , i32 33 , i32 33 , i32 33 , i32 33 , i32 33 >
24+ ret <32 x i8 > %c
25+ }
26+
1527;; xvrepl128vei.h
1628define <16 x i16 > @shufflevector_v16i16 (<16 x i16 > %a , <16 x i16 > %b ) {
1729; CHECK-LABEL: shufflevector_v16i16:
@@ -23,6 +35,18 @@ define <16 x i16> @shufflevector_v16i16(<16 x i16> %a, <16 x i16> %b) {
2335 ret <16 x i16 > %c
2436}
2537
38+ ;; xvrepl128vei.h
39+ define <16 x i16 > @shufflevector_v16i16_undef (<16 x i16 > %a ) {
40+ ; CHECK-LABEL: shufflevector_v16i16_undef:
41+ ; CHECK: # %bb.0:
42+ ; CHECK-NEXT: xvpermi.d $xr0, $xr0, 68
43+ ; CHECK-NEXT: xvrepl128vei.h $xr0, $xr0, 3
44+ ; CHECK-NEXT: ret
45+ %c = shufflevector <16 x i16 > %a , <16 x i16 > poison, <16 x i32 > <i32 3 , i32 3 , i32 3 , i32 3 , i32 3 , i32 3 , i32 3 , i32 3 ,
46+ i32 17 , i32 17 , i32 17 , i32 17 , i32 17 , i32 17 , i32 17 , i32 17 >
47+ ret <16 x i16 > %c
48+ }
49+
2650;; xvrepl128vei.w
2751define <8 x i32 > @shufflevector_v8i32 (<8 x i32 > %a , <8 x i32 > %b ) {
2852; CHECK-LABEL: shufflevector_v8i32:
@@ -34,6 +58,17 @@ define <8 x i32> @shufflevector_v8i32(<8 x i32> %a, <8 x i32> %b) {
3458 ret <8 x i32 > %c
3559}
3660
61+ ;; xvrepl128vei.w
62+ define <8 x i32 > @shufflevector_v8i32_undef (<8 x i32 > %a ) {
63+ ; CHECK-LABEL: shufflevector_v8i32_undef:
64+ ; CHECK: # %bb.0:
65+ ; CHECK-NEXT: xvpermi.d $xr0, $xr0, 68
66+ ; CHECK-NEXT: xvrepl128vei.w $xr0, $xr0, 2
67+ ; CHECK-NEXT: ret
68+ %c = shufflevector <8 x i32 > %a , <8 x i32 > poison, <8 x i32 > <i32 2 , i32 2 , i32 2 , i32 2 , i32 8 , i32 8 , i32 8 , i32 8 >
69+ ret <8 x i32 > %c
70+ }
71+
3772;; xvrepl128vei.d
3873define <4 x i64 > @shufflevector_v4i64 (<4 x i64 > %a , <4 x i64 > %b ) {
3974; CHECK-LABEL: shufflevector_v4i64:
@@ -44,6 +79,17 @@ define <4 x i64> @shufflevector_v4i64(<4 x i64> %a, <4 x i64> %b) {
4479 ret <4 x i64 > %c
4580}
4681
82+ ;; xvrepl128vei.d
83+ define <4 x i64 > @shufflevector_v4i64_undef (<4 x i64 > %a ) {
84+ ; CHECK-LABEL: shufflevector_v4i64_undef:
85+ ; CHECK: # %bb.0:
86+ ; CHECK-NEXT: xvpermi.d $xr0, $xr0, 68
87+ ; CHECK-NEXT: xvrepl128vei.d $xr0, $xr0, 1
88+ ; CHECK-NEXT: ret
89+ %c = shufflevector <4 x i64 > %a , <4 x i64 > poison, <4 x i32 > <i32 1 , i32 1 , i32 5 , i32 5 >
90+ ret <4 x i64 > %c
91+ }
92+
4793;; xvrepl128vei.w
4894define <8 x float > @shufflevector_v8f32 (<8 x float > %a , <8 x float > %b ) {
4995; CHECK-LABEL: shufflevector_v8f32:
@@ -54,6 +100,17 @@ define <8 x float> @shufflevector_v8f32(<8 x float> %a, <8 x float> %b) {
54100 ret <8 x float > %c
55101}
56102
103+ ;; xvrepl128vei.w
104+ define <8 x float > @shufflevector_v8f32_undef (<8 x float > %a ) {
105+ ; CHECK-LABEL: shufflevector_v8f32_undef:
106+ ; CHECK: # %bb.0:
107+ ; CHECK-NEXT: xvpermi.d $xr0, $xr0, 78
108+ ; CHECK-NEXT: xvrepl128vei.w $xr0, $xr0, 1
109+ ; CHECK-NEXT: ret
110+ %c = shufflevector <8 x float > %a , <8 x float > poison, <8 x i32 > <i32 5 , i32 5 , i32 5 , i32 5 , i32 9 , i32 9 , i32 9 , i32 9 >
111+ ret <8 x float > %c
112+ }
113+
57114;; xvrepl128vei.d
58115define <4 x double > @shufflevector_v4f64 (<4 x double > %a , <4 x double > %b ) {
59116; CHECK-LABEL: shufflevector_v4f64:
@@ -63,3 +120,14 @@ define <4 x double> @shufflevector_v4f64(<4 x double> %a, <4 x double> %b) {
63120 %c = shufflevector <4 x double > %a , <4 x double > %b , <4 x i32 > <i32 5 , i32 5 , i32 7 , i32 7 >
64121 ret <4 x double > %c
65122}
123+
124+ ;; xvrepl128vei.d
125+ define <4 x double > @shufflevector_v4f64_undef (<4 x double > %a ) {
126+ ; CHECK-LABEL: shufflevector_v4f64_undef:
127+ ; CHECK: # %bb.0:
128+ ; CHECK-NEXT: xvpermi.d $xr0, $xr0, 68
129+ ; CHECK-NEXT: xvrepl128vei.d $xr0, $xr0, 0
130+ ; CHECK-NEXT: ret
131+ %c = shufflevector <4 x double > %a , <4 x double > poison, <4 x i32 > <i32 0 , i32 0 , i32 7 , i32 7 >
132+ ret <4 x double > %c
133+ }
0 commit comments