================
@@ -108,3 +111,39 @@ void test_mm_pause(void) {
// LLVM: call void @llvm.x86.sse2.pause()
// OGCG: call void @llvm.x86.sse2.pause()
}
+
+__m128i test_mm_shufflelo_epi16(__m128i A) {
+ // CIR-LABEL: _mm_shufflelo_epi16
+ // CIR: %{{.*}} = cir.vec.shuffle(%{{.*}}, %{{.*}} : !cir.vector<8 x !s16i>)
[#cir.int<0> : !s32i, #cir.int<0> : !s32i, #cir.int<0> : !s32i, #cir.int<0> :
!s32i, #cir.int<4> : !s32i, #cir.int<5> : !s32i, #cir.int<6> : !s32i,
#cir.int<7> : !s32i] : !cir.vector<8 x !s16i>
+
+ // LLVM-LABEL: test_mm_shufflelo_epi16
+ // LLVM: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <8 x i32> <i32
0, i32 0, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7>
+
+ // OGCG-LABEL: test_mm_shufflelo_epi16
+ // OGCG: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <8 x i32> <i32
0, i32 0, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7>
+ return _mm_shufflelo_epi16(A, 0);
+}
+
+__m128i test_mm_shufflehi_epi16(__m128i A) {
+ // CIR-LABEL: _mm_shufflehi_epi16
+ // CIR: %{{.*}} = cir.vec.shuffle(%{{.*}}, %{{.*}} : !cir.vector<8 x !s16i>)
[#cir.int<0> : !s32i, #cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<3> :
!s32i, #cir.int<4> : !s32i, #cir.int<4> : !s32i, #cir.int<4> : !s32i,
#cir.int<4> : !s32i] : !cir.vector<8 x !s16i>
+
+ // LLVM-LABEL: test_mm_shufflehi_epi16
+ // LLVM: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <8 x i32> <i32
0, i32 1, i32 2, i32 3, i32 4, i32 4, i32 4, i32 4>
+
+ // OGCG-LABEL: test_mm_shufflehi_epi16
+ // OGCG: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <8 x i32> <i32
0, i32 1, i32 2, i32 3, i32 4, i32 4, i32 4, i32 4>
+ return _mm_shufflehi_epi16(A, 0);
+}
+
+__m128d test_mm_shuffle_pd(__m128d A, __m128d B) {
+ // CIR-LABEL: test_mm_shuffle_pd
+ // CIR: %{{.*}} = cir.vec.shuffle(%{{.*}}, %{{.*}} : !cir.vector<2 x
!cir.double>) [#cir.int<1> : !s32i, #cir.int<2> : !s32i] : !cir.vector<2 x
!cir.double>
+
+ // CHECK-LABEL: test_mm_shuffle_pd
+ // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x
i32> <i32 1, i32 2>
+
+ // OGCG-LABEL: test_mm_shuffle_pd
+ // OGCG: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32>
<i32 1, i32 2>
+ return _mm_shuffle_pd(A, B, 1);
+}
----------------
Thibault-Monnier wrote:
Great, thanks for the explanation!
https://github.com/llvm/llvm-project/pull/169178
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits