@@ -695,3 +695,181 @@ void test_mm512_mask_i64scatter_epi32(void *__addr, __mmask8 __mask, __m512i __i
695695 // OGCG: @llvm.x86.avx512.mask.scatter.qpi.512
696696 return _mm512_mask_i64scatter_epi32 (__addr , __mask , __index , __v1 , 2 );
697697}
698+
699+ __m256d test_mm512_extractf64x4_pd (__m512d a )
700+ {
701+ // CIR-LABEL: test_mm512_extractf64x4_pd
702+ // CIR: [[ZERO:%.*]] = cir.const #cir.zero : !cir.vector<8 x !cir.double>
703+ // CIR: cir.vec.shuffle(%{{.*}}, [[ZERO]] : !cir.vector<8 x !cir.double>) [#cir.int<4> : !s32i, #cir.int<5> : !s32i, #cir.int<6> : !s32i, #cir.int<7> : !s32i] : !cir.vector<4 x !cir.double>
704+
705+ // LLVM-LABEL: test_mm512_extractf64x4_pd
706+ // LLVM: shufflevector <8 x double> %{{.*}}, <8 x double> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
707+
708+ // OGCG-LABEL: test_mm512_extractf64x4_pd
709+ // OGCG: shufflevector <8 x double> %{{.*}}, <8 x double> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
710+ return _mm512_extractf64x4_pd (a , 1 );
711+ }
712+
713+ __m256d test_mm512_mask_extractf64x4_pd (__m256d __W ,__mmask8 __U ,__m512d __A ){
714+ // CIR-LABEL: test_mm512_mask_extractf64x4_pd
715+ // CIR: [[ZERO:%.*]] = cir.const #cir.zero : !cir.vector<8 x !cir.double>
716+ // CIR: cir.vec.shuffle(%{{.*}}, [[ZERO]] : !cir.vector<8 x !cir.double>) [#cir.int<4> : !s32i, #cir.int<5> : !s32i, #cir.int<6> : !s32i, #cir.int<7> : !s32i] : !cir.vector<4 x !cir.double>
717+ // CIR: cir.select if %{{.*}} then %{{.*}} else %{{.*}} : (!cir.vector<4 x !cir.bool>, !cir.vector<4 x !cir.double>, !cir.vector<4 x !cir.double>) -> !cir.vector<4 x !cir.double>
718+
719+ // LLVM-LABEL: test_mm512_mask_extractf64x4_pd
720+ // LLVM: shufflevector <8 x double> %{{.*}}, <8 x double> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
721+ // LLVM: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
722+
723+ // OGCG-LABEL: test_mm512_mask_extractf64x4_pd
724+ // OGCG: shufflevector <8 x double> %{{.*}}, <8 x double> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
725+ // OGCG: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
726+ return _mm512_mask_extractf64x4_pd ( __W , __U , __A , 1 );
727+ }
728+
729+ __m256d test_mm512_maskz_extractf64x4_pd (__mmask8 __U ,__m512d __A ){
730+ // CIR-LABEL: test_mm512_maskz_extractf64x4_pd
731+ // CIR: [[ZERO:%.*]] = cir.const #cir.zero : !cir.vector<8 x !cir.double>
732+ // CIR: cir.vec.shuffle(%{{.*}}, [[ZERO]] : !cir.vector<8 x !cir.double>) [#cir.int<4> : !s32i, #cir.int<5> : !s32i, #cir.int<6> : !s32i, #cir.int<7> : !s32i] : !cir.vector<4 x !cir.double>
733+ // CIR: cir.select if %{{.*}} then %{{.*}} else %{{.*}} : (!cir.vector<4 x !cir.bool>, !cir.vector<4 x !cir.double>, !cir.vector<4 x !cir.double>) -> !cir.vector<4 x !cir.double>
734+
735+ // LLVM-LABEL: test_mm512_maskz_extractf64x4_pd
736+ // LLVM: shufflevector <8 x double> %{{.*}}, <8 x double> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
737+ // LLVM: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
738+
739+ // OGCG-LABEL: test_mm512_maskz_extractf64x4_pd
740+ // OGCG: shufflevector <8 x double> %{{.*}}, <8 x double> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
741+ // OGCG: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}
742+ return _mm512_maskz_extractf64x4_pd ( __U , __A , 1 );
743+ }
744+
745+ __m128 test_mm512_extractf32x4_ps (__m512 a )
746+ {
747+ // CIR-LABEL: test_mm512_extractf32x4_ps
748+ // CIR: [[ZERO:%.*]] = cir.const #cir.zero : !cir.vector<16 x !cir.float>
749+ // CIR: cir.vec.shuffle(%{{.*}}, [[ZERO]] : !cir.vector<16 x !cir.float>) [#cir.int<4> : !s32i, #cir.int<5> : !s32i, #cir.int<6> : !s32i, #cir.int<7> : !s32i] : !cir.vector<4 x !cir.float>
750+
751+ // LLVM-LABEL: test_mm512_extractf32x4_ps
752+ // LLVM: shufflevector <16 x float> %{{.*}}, <16 x float> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
753+
754+ // OGCG-LABEL: test_mm512_extractf32x4_ps
755+ // OGCG: shufflevector <16 x float> %{{.*}}, <16 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
756+ return _mm512_extractf32x4_ps (a , 1 );
757+ }
758+
759+ __m128 test_mm512_mask_extractf32x4_ps (__m128 __W , __mmask8 __U ,__m512 __A ){
760+ // CIR-LABEL: test_mm512_mask_extractf32x4_ps
761+ // CIR: [[ZERO:%.*]] = cir.const #cir.zero : !cir.vector<16 x !cir.float>
762+ // CIR: cir.vec.shuffle(%{{.*}}, [[ZERO]] : !cir.vector<16 x !cir.float>) [#cir.int<4> : !s32i, #cir.int<5> : !s32i, #cir.int<6> : !s32i, #cir.int<7> : !s32i] : !cir.vector<4 x !cir.float>
763+
764+ // LLVM-LABEL: test_mm512_mask_extractf32x4_ps
765+ // LLVM: shufflevector <16 x float> %{{.*}}, <16 x float> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
766+ // LLVM: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
767+
768+ // OGCG-LABEL: test_mm512_mask_extractf32x4_ps
769+ // OGCG: shufflevector <16 x float> %{{.*}}, <16 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
770+ // OGCG: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
771+ return _mm512_mask_extractf32x4_ps ( __W , __U , __A , 1 );
772+ }
773+
774+ __m128 test_mm512_maskz_extractf32x4_ps ( __mmask8 __U ,__m512 __A ){
775+ // CIR-LABEL: test_mm512_maskz_extractf32x4_ps
776+ // CIR: [[ZERO:%.*]] = cir.const #cir.zero : !cir.vector<16 x !cir.float>
777+ // CIR: cir.vec.shuffle(%{{.*}}, [[ZERO]] : !cir.vector<16 x !cir.float>) [#cir.int<4> : !s32i, #cir.int<5> : !s32i, #cir.int<6> : !s32i, #cir.int<7> : !s32i] : !cir.vector<4 x !cir.float>
778+
779+ // LLVM-LABEL: test_mm512_maskz_extractf32x4_ps
780+ // LLVM: shufflevector <16 x float> %{{.*}}, <16 x float> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
781+ // LLVM: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
782+
783+ // OGCG-LABEL: test_mm512_maskz_extractf32x4_ps
784+ // OGCG: shufflevector <16 x float> %{{.*}}, <16 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
785+ // OGCG: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
786+ return _mm512_maskz_extractf32x4_ps (__U , __A , 1 );
787+ }
788+
789+ __m128i test_mm512_extracti32x4_epi32 (__m512i __A ) {
790+ // CIR-LABEL: test_mm512_extracti32x4_epi32
791+ // CIR: [[ZERO:%.*]] = cir.const #cir.zero : !cir.vector<16 x !s32i>
792+ // CIR: cir.vec.shuffle(%{{.*}}, [[ZERO]] : !cir.vector<16 x !s32i>) [#cir.int<12> : !s32i, #cir.int<13> : !s32i, #cir.int<14> : !s32i, #cir.int<15> : !s32i] : !cir.vector<4 x !s32i>
793+
794+ // LLVM-LABEL: test_mm512_extracti32x4_epi32
795+ // LLVM: shufflevector <16 x i32> %{{.*}}, <16 x i32> zeroinitializer, <4 x i32> <i32 12, i32 13, i32 14, i32 15>
796+
797+ // OGCG-LABEL: test_mm512_extracti32x4_epi32
798+ // OGCG: shufflevector <16 x i32> %{{.*}}, <16 x i32> poison, <4 x i32> <i32 12, i32 13, i32 14, i32 15>
799+ return _mm512_extracti32x4_epi32 (__A , 3 );
800+ }
801+
802+ __m128i test_mm512_mask_extracti32x4_epi32 (__m128i __W , __mmask8 __U , __m512i __A ) {
803+ // CIR-LABEL: test_mm512_mask_extracti32x4_epi32
804+ // CIR: [[ZERO:%.*]] = cir.const #cir.zero : !cir.vector<16 x !s32i>
805+ // CIR: cir.vec.shuffle(%{{.*}}, [[ZERO]] : !cir.vector<16 x !s32i>) [#cir.int<12> : !s32i, #cir.int<13> : !s32i, #cir.int<14> : !s32i, #cir.int<15> : !s32i] : !cir.vector<4 x !s32i>
806+ // CIR: cir.select if %{{.*}} then %{{.*}} else %{{.*}} : (!cir.vector<4 x !cir.bool>, !cir.vector<4 x !s32i>, !cir.vector<4 x !s32i>) -> !cir.vector<4 x !s32i>
807+
808+ // LLVM-LABEL: test_mm512_mask_extracti32x4_epi32
809+ // LLVM: shufflevector <16 x i32> %{{.*}}, <16 x i32> zeroinitializer, <4 x i32> <i32 12, i32 13, i32 14, i32 15>
810+ // LLVM: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
811+
812+ // OGCG-LABEL: test_mm512_mask_extracti32x4_epi32
813+ // OGCG: shufflevector <16 x i32> %{{.*}}, <16 x i32> poison, <4 x i32> <i32 12, i32 13, i32 14, i32 15>
814+ // OGCG: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
815+ return _mm512_mask_extracti32x4_epi32 (__W , __U , __A , 3 );
816+ }
817+
818+ __m128i test_mm512_maskz_extracti32x4_epi32 (__mmask8 __U , __m512i __A ) {
819+ // CIR-LABEL: test_mm512_maskz_extracti32x4_epi32
820+ // CIR: [[ZERO:%.*]] = cir.const #cir.zero : !cir.vector<16 x !s32i>
821+ // CIR: cir.vec.shuffle(%{{.*}}, [[ZERO]] : !cir.vector<16 x !s32i>) [#cir.int<12> : !s32i, #cir.int<13> : !s32i, #cir.int<14> : !s32i, #cir.int<15> : !s32i] : !cir.vector<4 x !s32i>
822+ // CIR: cir.select if %{{.*}} then %{{.*}} else %{{.*}} : (!cir.vector<4 x !cir.bool>, !cir.vector<4 x !s32i>, !cir.vector<4 x !s32i>) -> !cir.vector<4 x !s32i>
823+
824+ // LLVM-LABEL: test_mm512_maskz_extracti32x4_epi32
825+ // LLVM: shufflevector <16 x i32> %{{.*}}, <16 x i32> zeroinitializer, <4 x i32> <i32 12, i32 13, i32 14, i32 15>
826+ // LLVM: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
827+
828+ // OGCG-LABEL: test_mm512_maskz_extracti32x4_epi32
829+ // OGCG: shufflevector <16 x i32> %{{.*}}, <16 x i32> poison, <4 x i32> <i32 12, i32 13, i32 14, i32 15>
830+ // OGCG: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
831+ return _mm512_maskz_extracti32x4_epi32 (__U , __A , 3 );
832+ }
833+
834+ __m256i test_mm512_extracti64x4_epi64 (__m512i __A ) {
835+ // CIR-LABEL: test_mm512_extracti64x4_epi64
836+ // CIR: [[ZERO:%.*]] = cir.const #cir.zero : !cir.vector<8 x !s64i>
837+ // CIR: cir.vec.shuffle(%{{.*}}, [[ZERO]] : !cir.vector<8 x !s64i>) [#cir.int<4> : !s32i, #cir.int<5> : !s32i, #cir.int<6> : !s32i, #cir.int<7> : !s32i] : !cir.vector<4 x !s64i>
838+
839+ // LLVM-LABEL: test_mm512_extracti64x4_epi64
840+ // LLVM: shufflevector <8 x i64> %{{.*}}, <8 x i64> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
841+
842+ // OGCG-LABEL: test_mm512_extracti64x4_epi64
843+ // OGCG: shufflevector <8 x i64> %{{.*}}, <8 x i64> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
844+ return _mm512_extracti64x4_epi64 (__A , 1 );
845+ }
846+
847+ __m256i test_mm512_mask_extracti64x4_epi64 (__m256i __W , __mmask8 __U , __m512i __A ) {
848+ // CIR-LABEL: test_mm512_mask_extracti64x4_epi64
849+ // CIR: [[ZERO:%.*]] = cir.const #cir.zero : !cir.vector<8 x !s64i>
850+ // CIR: cir.vec.shuffle(%{{.*}}, [[ZERO]] : !cir.vector<8 x !s64i>) [#cir.int<4> : !s32i, #cir.int<5> : !s32i, #cir.int<6> : !s32i, #cir.int<7> : !s32i] : !cir.vector<4 x !s64i>
851+
852+ // LLVM-LABEL: test_mm512_mask_extracti64x4_epi64
853+ // LLVM: shufflevector <8 x i64> %{{.*}}, <8 x i64> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
854+ // LLVM: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
855+
856+ // OGCG-LABEL: test_mm512_mask_extracti64x4_epi64
857+ // OGCG: shufflevector <8 x i64> %{{.*}}, <8 x i64> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
858+ // OGCG: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
859+ return _mm512_mask_extracti64x4_epi64 (__W , __U , __A , 1 );
860+ }
861+
862+ __m256i test_mm512_maskz_extracti64x4_epi64 (__mmask8 __U , __m512i __A ) {
863+ // CIR-LABEL: test_mm512_maskz_extracti64x4_epi64
864+ // CIR: [[ZERO:%.*]] = cir.const #cir.zero : !cir.vector<8 x !s64i>
865+ // CIR: cir.vec.shuffle(%{{.*}}, [[ZERO]] : !cir.vector<8 x !s64i>) [#cir.int<4> : !s32i, #cir.int<5> : !s32i, #cir.int<6> : !s32i, #cir.int<7> : !s32i] : !cir.vector<4 x !s64i>
866+
867+ // LLVM-LABEL: test_mm512_maskz_extracti64x4_epi64
868+ // LLVM: shufflevector <8 x i64> %{{.*}}, <8 x i64> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
869+ // LLVM: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
870+
871+ // OGCG-LABEL: test_mm512_maskz_extracti64x4_epi64
872+ // OGCG: shufflevector <8 x i64> %{{.*}}, <8 x i64> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
873+ // OGCG: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
874+ return _mm512_maskz_extracti64x4_epi64 (__U , __A , 1 );
875+ }
0 commit comments