From: Simon Pilgrim Date: Tue, 8 Jan 2019 12:59:15 +0000 (+0000) Subject: [X86] Add shift-by-immediate tests for non-immediate/out-of-range values X-Git-Tag: llvmorg-8.0.0-rc1~724 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b12738d932cb4113e72af1719ae63025b14c35dc;p=platform%2Fupstream%2Fllvm.git [X86] Add shift-by-immediate tests for non-immediate/out-of-range values As noted on PR40203, for gcc compatibility we need to support non-immediate values in the 'slli/srli/srai' shift by immediate vector intrinsics. llvm-svn: 350619 --- diff --git a/clang/test/CodeGen/avx2-builtins.c b/clang/test/CodeGen/avx2-builtins.c index 89225e6..90c07c1 100644 --- a/clang/test/CodeGen/avx2-builtins.c +++ b/clang/test/CodeGen/avx2-builtins.c @@ -995,18 +995,36 @@ __m256i test_mm256_slli_epi16(__m256i a) { return _mm256_slli_epi16(a, 3); } +__m256i test_mm256_slli_epi16_2(__m256i a, int b) { + // CHECK-LABEL: test_mm256_slli_epi16_2 + // CHECK: call <16 x i16> @llvm.x86.avx2.pslli.w(<16 x i16> %{{.*}}, i32 %{{.*}}) + return _mm256_slli_epi16(a, b); +} + __m256i test_mm256_slli_epi32(__m256i a) { // CHECK-LABEL: test_mm256_slli_epi32 // CHECK: call <8 x i32> @llvm.x86.avx2.pslli.d(<8 x i32> %{{.*}}, i32 %{{.*}}) return _mm256_slli_epi32(a, 3); } +__m256i test_mm256_slli_epi32_2(__m256i a, int b) { + // CHECK-LABEL: test_mm256_slli_epi32_2 + // CHECK: call <8 x i32> @llvm.x86.avx2.pslli.d(<8 x i32> %{{.*}}, i32 %{{.*}}) + return _mm256_slli_epi32(a, b); +} + __m256i test_mm256_slli_epi64(__m256i a) { // CHECK-LABEL: test_mm256_slli_epi64 // CHECK: call <4 x i64> @llvm.x86.avx2.pslli.q(<4 x i64> %{{.*}}, i32 %{{.*}}) return _mm256_slli_epi64(a, 3); } +__m256i test_mm256_slli_epi64_2(__m256i a, int b) { + // CHECK-LABEL: test_mm256_slli_epi64_2 + // CHECK: call <4 x i64> @llvm.x86.avx2.pslli.q(<4 x i64> %{{.*}}, i32 %{{.*}}) + return _mm256_slli_epi64(a, b); +} + __m256i test_mm256_slli_si256(__m256i a) { // CHECK-LABEL: test_mm256_slli_si256 // CHECK: shufflevector <32 x i8> zeroinitializer, <32 x i8> %{{.*}}, <32 x i32> @@ -1055,12 +1073,24 @@ __m256i test_mm256_srai_epi16(__m256i a) { return _mm256_srai_epi16(a, 3); } +__m256i test_mm256_srai_epi16_2(__m256i a, int b) { + // CHECK-LABEL: test_mm256_srai_epi16_2 + // CHECK: call <16 x i16> @llvm.x86.avx2.psrai.w(<16 x i16> %{{.*}}, i32 %{{.*}}) + return _mm256_srai_epi16(a, b); +} + __m256i test_mm256_srai_epi32(__m256i a) { // CHECK-LABEL: test_mm256_srai_epi32 // CHECK: call <8 x i32> @llvm.x86.avx2.psrai.d(<8 x i32> %{{.*}}, i32 %{{.*}}) return _mm256_srai_epi32(a, 3); } +__m256i test_mm256_srai_epi32_2(__m256i a, int b) { + // CHECK-LABEL: test_mm256_srai_epi32_2 + // CHECK: call <8 x i32> @llvm.x86.avx2.psrai.d(<8 x i32> %{{.*}}, i32 %{{.*}}) + return _mm256_srai_epi32(a, b); +} + __m128i test_mm_srav_epi32(__m128i a, __m128i b) { // CHECK-LABEL: test_mm_srav_epi32 // CHECK: call <4 x i32> @llvm.x86.avx2.psrav.d(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}) @@ -1097,18 +1127,36 @@ __m256i test_mm256_srli_epi16(__m256i a) { return _mm256_srli_epi16(a, 3); } +__m256i test_mm256_srli_epi16_2(__m256i a, int b) { + // CHECK-LABEL: test_mm256_srli_epi16_2 + // CHECK: call <16 x i16> @llvm.x86.avx2.psrli.w(<16 x i16> %{{.*}}, i32 %{{.*}}) + return _mm256_srli_epi16(a, b); +} + __m256i test_mm256_srli_epi32(__m256i a) { // CHECK-LABEL: test_mm256_srli_epi32 // CHECK: call <8 x i32> @llvm.x86.avx2.psrli.d(<8 x i32> %{{.*}}, i32 %{{.*}}) return _mm256_srli_epi32(a, 3); } +__m256i test_mm256_srli_epi32_2(__m256i a, int b) { + // CHECK-LABEL: test_mm256_srli_epi32_2 + // CHECK: call <8 x i32> @llvm.x86.avx2.psrli.d(<8 x i32> %{{.*}}, i32 %{{.*}}) + return _mm256_srli_epi32(a, b); +} + __m256i test_mm256_srli_epi64(__m256i a) { // CHECK-LABEL: test_mm256_srli_epi64 // CHECK: call <4 x i64> @llvm.x86.avx2.psrli.q(<4 x i64> %{{.*}}, i32 %{{.*}}) return _mm256_srli_epi64(a, 3); } +__m256i test_mm256_srli_epi64_2(__m256i a, int b) { + // CHECK-LABEL: test_mm256_srli_epi64_2 + // CHECK: call <4 x i64> @llvm.x86.avx2.psrli.q(<4 x i64> %{{.*}}, i32 %{{.*}}) + return _mm256_srli_epi64(a, b); +} + __m256i test_mm256_srli_si256(__m256i a) { // CHECK-LABEL: test_mm256_srli_si256 // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> zeroinitializer, <32 x i32> diff --git a/clang/test/CodeGen/avx512bw-builtins.c b/clang/test/CodeGen/avx512bw-builtins.c index aa6b453..9e75baa 100644 --- a/clang/test/CodeGen/avx512bw-builtins.c +++ b/clang/test/CodeGen/avx512bw-builtins.c @@ -1760,6 +1760,12 @@ __m512i test_mm512_slli_epi16(__m512i __A) { return _mm512_slli_epi16(__A, 5); } +__m512i test_mm512_slli_epi16_2(__m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_slli_epi16_2 + // CHECK: @llvm.x86.avx512.pslli.w.512 + return _mm512_slli_epi16(__A, __B); +} + __m512i test_mm512_mask_slli_epi16(__m512i __W, __mmask32 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_mask_slli_epi16 // CHECK: @llvm.x86.avx512.pslli.w.512 @@ -1767,6 +1773,13 @@ __m512i test_mm512_mask_slli_epi16(__m512i __W, __mmask32 __U, __m512i __A) { return _mm512_mask_slli_epi16(__W, __U, __A, 5); } +__m512i test_mm512_mask_slli_epi16_2(__m512i __W, __mmask32 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_mask_slli_epi16_2 + // CHECK: @llvm.x86.avx512.pslli.w.512 + // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} + return _mm512_mask_slli_epi16(__W, __U, __A, __B); +} + __m512i test_mm512_maskz_slli_epi16(__mmask32 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_maskz_slli_epi16 // CHECK: @llvm.x86.avx512.pslli.w.512 @@ -1774,6 +1787,13 @@ __m512i test_mm512_maskz_slli_epi16(__mmask32 __U, __m512i __A) { return _mm512_maskz_slli_epi16(__U, __A, 5); } +__m512i test_mm512_maskz_slli_epi16_2(__mmask32 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_maskz_slli_epi16_2 + // CHECK: @llvm.x86.avx512.pslli.w.512 + // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} + return _mm512_maskz_slli_epi16(__U, __A, __B); +} + __m512i test_mm512_bslli_epi128(__m512i __A) { // CHECK-LABEL: @test_mm512_bslli_epi128 // CHECK: shufflevector <64 x i8> zeroinitializer, <64 x i8> %{{.*}}, <64 x i32> @@ -1846,6 +1866,12 @@ __m512i test_mm512_srai_epi16(__m512i __A) { return _mm512_srai_epi16(__A, 5); } +__m512i test_mm512_srai_epi16_2(__m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_srai_epi16_2 + // CHECK: @llvm.x86.avx512.psrai.w.512 + return _mm512_srai_epi16(__A, __B); +} + __m512i test_mm512_mask_srai_epi16(__m512i __W, __mmask32 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_mask_srai_epi16 // CHECK: @llvm.x86.avx512.psrai.w.512 @@ -1853,6 +1879,13 @@ __m512i test_mm512_mask_srai_epi16(__m512i __W, __mmask32 __U, __m512i __A) { return _mm512_mask_srai_epi16(__W, __U, __A, 5); } +__m512i test_mm512_mask_srai_epi16_2(__m512i __W, __mmask32 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_mask_srai_epi16_2 + // CHECK: @llvm.x86.avx512.psrai.w.512 + // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} + return _mm512_mask_srai_epi16(__W, __U, __A, __B); +} + __m512i test_mm512_maskz_srai_epi16(__mmask32 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_maskz_srai_epi16 // CHECK: @llvm.x86.avx512.psrai.w.512 @@ -1860,6 +1893,13 @@ __m512i test_mm512_maskz_srai_epi16(__mmask32 __U, __m512i __A) { return _mm512_maskz_srai_epi16(__U, __A, 5); } +__m512i test_mm512_maskz_srai_epi16_2(__mmask32 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_maskz_srai_epi16_2 + // CHECK: @llvm.x86.avx512.psrai.w.512 + // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} + return _mm512_maskz_srai_epi16(__U, __A, __B); +} + __m512i test_mm512_srl_epi16(__m512i __A, __m128i __B) { // CHECK-LABEL: @test_mm512_srl_epi16 // CHECK: @llvm.x86.avx512.psrl.w.512 @@ -1886,6 +1926,12 @@ __m512i test_mm512_srli_epi16(__m512i __A) { return _mm512_srli_epi16(__A, 5); } +__m512i test_mm512_srli_epi16_2(__m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_srli_epi16_2 + // CHECK: @llvm.x86.avx512.psrli.w.512 + return _mm512_srli_epi16(__A, __B); +} + __m512i test_mm512_mask_srli_epi16(__m512i __W, __mmask32 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_mask_srli_epi16 // CHECK: @llvm.x86.avx512.psrli.w.512 @@ -1893,6 +1939,13 @@ __m512i test_mm512_mask_srli_epi16(__m512i __W, __mmask32 __U, __m512i __A) { return _mm512_mask_srli_epi16(__W, __U, __A, 5); } +__m512i test_mm512_mask_srli_epi16_2(__m512i __W, __mmask32 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_mask_srli_epi16_2 + // CHECK: @llvm.x86.avx512.psrli.w.512 + // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} + return _mm512_mask_srli_epi16(__W, __U, __A, __B); +} + __m512i test_mm512_maskz_srli_epi16(__mmask32 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_maskz_srli_epi16 // CHECK: @llvm.x86.avx512.psrli.w.512 @@ -1900,6 +1953,13 @@ __m512i test_mm512_maskz_srli_epi16(__mmask32 __U, __m512i __A) { return _mm512_maskz_srli_epi16(__U, __A, 5); } +__m512i test_mm512_maskz_srli_epi16_2(__mmask32 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_maskz_srli_epi16_2 + // CHECK: @llvm.x86.avx512.psrli.w.512 + // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} + return _mm512_maskz_srli_epi16(__U, __A, __B); +} + __m512i test_mm512_bsrli_epi128(__m512i __A) { // CHECK-LABEL: @test_mm512_bsrli_epi128 // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> zeroinitializer, <64 x i32> diff --git a/clang/test/CodeGen/avx512f-builtins.c b/clang/test/CodeGen/avx512f-builtins.c index 0f21bae..5154e82 100644 --- a/clang/test/CodeGen/avx512f-builtins.c +++ b/clang/test/CodeGen/avx512f-builtins.c @@ -4201,6 +4201,12 @@ __m512i test_mm512_slli_epi32(__m512i __A) { return _mm512_slli_epi32(__A, 5); } +__m512i test_mm512_slli_epi32_2(__m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_slli_epi32_2 + // CHECK: @llvm.x86.avx512.pslli.d.512 + return _mm512_slli_epi32(__A, __B); +} + __m512i test_mm512_mask_slli_epi32(__m512i __W, __mmask16 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_mask_slli_epi32 // CHECK: @llvm.x86.avx512.pslli.d.512 @@ -4208,6 +4214,13 @@ __m512i test_mm512_mask_slli_epi32(__m512i __W, __mmask16 __U, __m512i __A) { return _mm512_mask_slli_epi32(__W, __U, __A, 5); } +__m512i test_mm512_mask_slli_epi32_2(__m512i __W, __mmask16 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_mask_slli_epi32_2 + // CHECK: @llvm.x86.avx512.pslli.d.512 + // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} + return _mm512_mask_slli_epi32(__W, __U, __A, __B); +} + __m512i test_mm512_maskz_slli_epi32(__mmask16 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_maskz_slli_epi32 // CHECK: @llvm.x86.avx512.pslli.d.512 @@ -4215,12 +4228,25 @@ __m512i test_mm512_maskz_slli_epi32(__mmask16 __U, __m512i __A) { return _mm512_maskz_slli_epi32(__U, __A, 5); } +__m512i test_mm512_maskz_slli_epi32_2(__mmask16 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_maskz_slli_epi32_2 + // CHECK: @llvm.x86.avx512.pslli.d.512 + // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} + return _mm512_maskz_slli_epi32(__U, __A, __B); +} + __m512i test_mm512_slli_epi64(__m512i __A) { // CHECK-LABEL: @test_mm512_slli_epi64 // CHECK: @llvm.x86.avx512.pslli.q.512 return _mm512_slli_epi64(__A, 5); } +__m512i test_mm512_slli_epi64_2(__m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_slli_epi64_2 + // CHECK: @llvm.x86.avx512.pslli.q.512 + return _mm512_slli_epi64(__A, __B); +} + __m512i test_mm512_mask_slli_epi64(__m512i __W, __mmask8 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_mask_slli_epi64 // CHECK: @llvm.x86.avx512.pslli.q.512 @@ -4228,18 +4254,39 @@ __m512i test_mm512_mask_slli_epi64(__m512i __W, __mmask8 __U, __m512i __A) { return _mm512_mask_slli_epi64(__W, __U, __A, 5); } +__m512i test_mm512_mask_slli_epi64_2(__m512i __W, __mmask8 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_mask_slli_epi64_2 + // CHECK: @llvm.x86.avx512.pslli.q.512 + // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} + return _mm512_mask_slli_epi64(__W, __U, __A, __B); +} + __m512i test_mm512_maskz_slli_epi64(__mmask8 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_maskz_slli_epi64 + // CHECK: @llvm.x86.avx512.pslli.q.512 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_slli_epi64(__U, __A, 5); } +__m512i test_mm512_maskz_slli_epi64_2(__mmask8 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_maskz_slli_epi64_2 + // CHECK: @llvm.x86.avx512.pslli.q.512 + // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} + return _mm512_maskz_slli_epi64(__U, __A, __B); +} + __m512i test_mm512_srli_epi32(__m512i __A) { // CHECK-LABEL: @test_mm512_srli_epi32 // CHECK: @llvm.x86.avx512.psrli.d.512 return _mm512_srli_epi32(__A, 5); } +__m512i test_mm512_srli_epi32_2(__m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_srli_epi32_2 + // CHECK: @llvm.x86.avx512.psrli.d.512 + return _mm512_srli_epi32(__A, __B); +} + __m512i test_mm512_mask_srli_epi32(__m512i __W, __mmask16 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_mask_srli_epi32 // CHECK: @llvm.x86.avx512.psrli.d.512 @@ -4247,6 +4294,13 @@ __m512i test_mm512_mask_srli_epi32(__m512i __W, __mmask16 __U, __m512i __A) { return _mm512_mask_srli_epi32(__W, __U, __A, 5); } +__m512i test_mm512_mask_srli_epi32_2(__m512i __W, __mmask16 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_mask_srli_epi32_2 + // CHECK: @llvm.x86.avx512.psrli.d.512 + // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} + return _mm512_mask_srli_epi32(__W, __U, __A, __B); +} + __m512i test_mm512_maskz_srli_epi32(__mmask16 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_maskz_srli_epi32 // CHECK: @llvm.x86.avx512.psrli.d.512 @@ -4254,12 +4308,25 @@ __m512i test_mm512_maskz_srli_epi32(__mmask16 __U, __m512i __A) { return _mm512_maskz_srli_epi32(__U, __A, 5); } +__m512i test_mm512_maskz_srli_epi32_2(__mmask16 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_maskz_srli_epi32_2 + // CHECK: @llvm.x86.avx512.psrli.d.512 + // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} + return _mm512_maskz_srli_epi32(__U, __A, __B); +} + __m512i test_mm512_srli_epi64(__m512i __A) { // CHECK-LABEL: @test_mm512_srli_epi64 // CHECK: @llvm.x86.avx512.psrli.q.512 return _mm512_srli_epi64(__A, 5); } +__m512i test_mm512_srli_epi64_2(__m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_srli_epi64_2 + // CHECK: @llvm.x86.avx512.psrli.q.512 + return _mm512_srli_epi64(__A, __B); +} + __m512i test_mm512_mask_srli_epi64(__m512i __W, __mmask8 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_mask_srli_epi64 // CHECK: @llvm.x86.avx512.psrli.q.512 @@ -4267,6 +4334,13 @@ __m512i test_mm512_mask_srli_epi64(__m512i __W, __mmask8 __U, __m512i __A) { return _mm512_mask_srli_epi64(__W, __U, __A, 5); } +__m512i test_mm512_mask_srli_epi64_2(__m512i __W, __mmask8 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_mask_srli_epi64_2 + // CHECK: @llvm.x86.avx512.psrli.q.512 + // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} + return _mm512_mask_srli_epi64(__W, __U, __A, __B); +} + __m512i test_mm512_maskz_srli_epi64(__mmask8 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_maskz_srli_epi64 // CHECK: @llvm.x86.avx512.psrli.q.512 @@ -4274,6 +4348,13 @@ __m512i test_mm512_maskz_srli_epi64(__mmask8 __U, __m512i __A) { return _mm512_maskz_srli_epi64(__U, __A, 5); } +__m512i test_mm512_maskz_srli_epi64_2(__mmask8 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_maskz_srli_epi64_2 + // CHECK: @llvm.x86.avx512.psrli.q.512 + // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} + return _mm512_maskz_srli_epi64(__U, __A, __B); +} + __m512i test_mm512_mask_load_epi32(__m512i __W, __mmask16 __U, void const *__P) { // CHECK-LABEL: @test_mm512_mask_load_epi32 // CHECK: @llvm.masked.load.v16i32.p0v16i32(<16 x i32>* %{{.*}}, i32 64, <16 x i1> %{{.*}}, <16 x i32> %{{.*}}) @@ -5575,6 +5656,12 @@ __m512i test_mm512_srai_epi32(__m512i __A) { return _mm512_srai_epi32(__A, 5); } +__m512i test_mm512_srai_epi32_2(__m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_srai_epi32_2 + // CHECK: @llvm.x86.avx512.psrai.d.512 + return _mm512_srai_epi32(__A, __B); +} + __m512i test_mm512_mask_srai_epi32(__m512i __W, __mmask16 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_mask_srai_epi32 // CHECK: @llvm.x86.avx512.psrai.d.512 @@ -5582,6 +5669,13 @@ __m512i test_mm512_mask_srai_epi32(__m512i __W, __mmask16 __U, __m512i __A) { return _mm512_mask_srai_epi32(__W, __U, __A, 5); } +__m512i test_mm512_mask_srai_epi32_2(__m512i __W, __mmask16 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_mask_srai_epi32_2 + // CHECK: @llvm.x86.avx512.psrai.d.512 + // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} + return _mm512_mask_srai_epi32(__W, __U, __A, __B); +} + __m512i test_mm512_maskz_srai_epi32(__mmask16 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_maskz_srai_epi32 // CHECK: @llvm.x86.avx512.psrai.d.512 @@ -5589,12 +5683,25 @@ __m512i test_mm512_maskz_srai_epi32(__mmask16 __U, __m512i __A) { return _mm512_maskz_srai_epi32(__U, __A, 5); } +__m512i test_mm512_maskz_srai_epi32_2(__mmask16 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_maskz_srai_epi32_2 + // CHECK: @llvm.x86.avx512.psrai.d.512 + // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} + return _mm512_maskz_srai_epi32(__U, __A, __B); +} + __m512i test_mm512_srai_epi64(__m512i __A) { // CHECK-LABEL: @test_mm512_srai_epi64 // CHECK: @llvm.x86.avx512.psrai.q.512 return _mm512_srai_epi64(__A, 5); } +__m512i test_mm512_srai_epi64_2(__m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_srai_epi64_2 + // CHECK: @llvm.x86.avx512.psrai.q.512 + return _mm512_srai_epi64(__A, __B); +} + __m512i test_mm512_mask_srai_epi64(__m512i __W, __mmask8 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_mask_srai_epi64 // CHECK: @llvm.x86.avx512.psrai.q.512 @@ -5602,6 +5709,13 @@ __m512i test_mm512_mask_srai_epi64(__m512i __W, __mmask8 __U, __m512i __A) { return _mm512_mask_srai_epi64(__W, __U, __A, 5); } +__m512i test_mm512_mask_srai_epi64_2(__m512i __W, __mmask8 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_mask_srai_epi64_2 + // CHECK: @llvm.x86.avx512.psrai.q.512 + // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} + return _mm512_mask_srai_epi64(__W, __U, __A, __B); +} + __m512i test_mm512_maskz_srai_epi64(__mmask8 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_maskz_srai_epi64 // CHECK: @llvm.x86.avx512.psrai.q.512 @@ -5609,6 +5723,13 @@ __m512i test_mm512_maskz_srai_epi64(__mmask8 __U, __m512i __A) { return _mm512_maskz_srai_epi64(__U, __A, 5); } +__m512i test_mm512_maskz_srai_epi64_2(__mmask8 __U, __m512i __A, int __B) { + // CHECK-LABEL: @test_mm512_maskz_srai_epi64_2 + // CHECK: @llvm.x86.avx512.psrai.q.512 + // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} + return _mm512_maskz_srai_epi64(__U, __A, __B); +} + __m512i test_mm512_sll_epi32(__m512i __A, __m128i __B) { // CHECK-LABEL: @test_mm512_sll_epi32 // CHECK: @llvm.x86.avx512.psll.d.512 diff --git a/clang/test/CodeGen/avx512vl-builtins.c b/clang/test/CodeGen/avx512vl-builtins.c index eb69e1c..5547ac9 100644 --- a/clang/test/CodeGen/avx512vl-builtins.c +++ b/clang/test/CodeGen/avx512vl-builtins.c @@ -6245,6 +6245,13 @@ __m128i test_mm_mask_srli_epi32(__m128i __W, __mmask8 __U, __m128i __A) { return _mm_mask_srli_epi32(__W, __U, __A, 5); } +__m128i test_mm_mask_srli_epi32_2(__m128i __W, __mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_mask_srli_epi32_2 + // CHECK: @llvm.x86.sse2.psrli.d + // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} + return _mm_mask_srli_epi32(__W, __U, __A, __B); +} + __m128i test_mm_maskz_srli_epi32(__mmask8 __U, __m128i __A) { // CHECK-LABEL: @test_mm_maskz_srli_epi32 // CHECK: @llvm.x86.sse2.psrli.d @@ -6252,6 +6259,13 @@ __m128i test_mm_maskz_srli_epi32(__mmask8 __U, __m128i __A) { return _mm_maskz_srli_epi32(__U, __A, 5); } +__m128i test_mm_maskz_srli_epi32_2(__mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_maskz_srli_epi32_2 + // CHECK: @llvm.x86.sse2.psrli.d + // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} + return _mm_maskz_srli_epi32(__U, __A, __B); +} + __m256i test_mm256_mask_srli_epi32(__m256i __W, __mmask8 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_mask_srli_epi32 // CHECK: @llvm.x86.avx2.psrli.d @@ -6259,6 +6273,13 @@ __m256i test_mm256_mask_srli_epi32(__m256i __W, __mmask8 __U, __m256i __A) { return _mm256_mask_srli_epi32(__W, __U, __A, 5); } +__m256i test_mm256_mask_srli_epi32_2(__m256i __W, __mmask8 __U, __m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_mask_srli_epi32_2 + // CHECK: @llvm.x86.avx2.psrli.d + // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} + return _mm256_mask_srli_epi32(__W, __U, __A, __B); +} + __m256i test_mm256_maskz_srli_epi32(__mmask8 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_maskz_srli_epi32 // CHECK: @llvm.x86.avx2.psrli.d @@ -6266,6 +6287,12 @@ __m256i test_mm256_maskz_srli_epi32(__mmask8 __U, __m256i __A) { return _mm256_maskz_srli_epi32(__U, __A, 5); } +__m256i test_mm256_maskz_srli_epi32_2(__mmask8 __U, __m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_maskz_srli_epi32_2 + // CHECK: @llvm.x86.avx2.psrli.d + // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} + return _mm256_maskz_srli_epi32(__U, __A, __B); +} __m128i test_mm_mask_srl_epi64(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { // CHECK-LABEL: @test_mm_mask_srl_epi64 // CHECK: @llvm.x86.sse2.psrl.q @@ -6301,6 +6328,13 @@ __m128i test_mm_mask_srli_epi64(__m128i __W, __mmask8 __U, __m128i __A) { return _mm_mask_srli_epi64(__W, __U, __A, 5); } +__m128i test_mm_mask_srli_epi64_2(__m128i __W, __mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_mask_srli_epi64_2 + // CHECK: @llvm.x86.sse2.psrli.q + // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} + return _mm_mask_srli_epi64(__W, __U, __A, __B); +} + __m128i test_mm_maskz_srli_epi64(__mmask8 __U, __m128i __A) { // CHECK-LABEL: @test_mm_maskz_srli_epi64 // CHECK: @llvm.x86.sse2.psrli.q @@ -6308,6 +6342,13 @@ __m128i test_mm_maskz_srli_epi64(__mmask8 __U, __m128i __A) { return _mm_maskz_srli_epi64(__U, __A, 5); } +__m128i test_mm_maskz_srli_epi64_2(__mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_maskz_srli_epi64_2 + // CHECK: @llvm.x86.sse2.psrli.q + // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} + return _mm_maskz_srli_epi64(__U, __A, __B); +} + __m256i test_mm256_mask_srli_epi64(__m256i __W, __mmask8 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_mask_srli_epi64 // CHECK: @llvm.x86.avx2.psrli.q @@ -6315,6 +6356,13 @@ __m256i test_mm256_mask_srli_epi64(__m256i __W, __mmask8 __U, __m256i __A) { return _mm256_mask_srli_epi64(__W, __U, __A, 5); } +__m256i test_mm256_mask_srli_epi64_2(__m256i __W, __mmask8 __U, __m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_mask_srli_epi64_2 + // CHECK: @llvm.x86.avx2.psrli.q + // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} + return _mm256_mask_srli_epi64(__W, __U, __A, __B); +} + __m256i test_mm256_maskz_srli_epi64(__mmask8 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_maskz_srli_epi64 // CHECK: @llvm.x86.avx2.psrli.q @@ -6322,6 +6370,13 @@ __m256i test_mm256_maskz_srli_epi64(__mmask8 __U, __m256i __A) { return _mm256_maskz_srli_epi64(__U, __A, 5); } +__m256i test_mm256_maskz_srli_epi64_2(__mmask8 __U, __m256i __A) { + // CHECK-LABEL: @test_mm256_maskz_srli_epi64_2 + // CHECK: @llvm.x86.avx2.psrli.q + // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} + return _mm256_maskz_srli_epi64(__U, __A, 5); +} + __m128i test_mm_mask_sll_epi32(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { // CHECK-LABEL: @test_mm_mask_sll_epi32 // CHECK: @llvm.x86.sse2.psll.d @@ -6357,6 +6412,13 @@ __m128i test_mm_mask_slli_epi32(__m128i __W, __mmask8 __U, __m128i __A) { return _mm_mask_slli_epi32(__W, __U, __A, 5); } +__m128i test_mm_mask_slli_epi32_2(__m128i __W, __mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_mask_slli_epi32_2 + // CHECK: @llvm.x86.sse2.pslli.d + // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} + return _mm_mask_slli_epi32(__W, __U, __A, __B); +} + __m128i test_mm_maskz_slli_epi32(__mmask8 __U, __m128i __A) { // CHECK-LABEL: @test_mm_maskz_slli_epi32 // CHECK: @llvm.x86.sse2.pslli.d @@ -6364,6 +6426,13 @@ __m128i test_mm_maskz_slli_epi32(__mmask8 __U, __m128i __A) { return _mm_maskz_slli_epi32(__U, __A, 5); } +__m128i test_mm_maskz_slli_epi32_2(__mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_maskz_slli_epi32_2 + // CHECK: @llvm.x86.sse2.pslli.d + // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} + return _mm_maskz_slli_epi32(__U, __A, __B); +} + __m256i test_mm256_mask_slli_epi32(__m256i __W, __mmask8 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_mask_slli_epi32 // CHECK: @llvm.x86.avx2.pslli.d @@ -6371,6 +6440,13 @@ __m256i test_mm256_mask_slli_epi32(__m256i __W, __mmask8 __U, __m256i __A) { return _mm256_mask_slli_epi32(__W, __U, __A, 5); } +__m256i test_mm256_mask_slli_epi32_2(__m256i __W, __mmask8 __U, __m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_mask_slli_epi32_2 + // CHECK: @llvm.x86.avx2.pslli.d + // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} + return _mm256_mask_slli_epi32(__W, __U, __A, __B); +} + __m256i test_mm256_maskz_slli_epi32(__mmask8 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_maskz_slli_epi32 // CHECK: @llvm.x86.avx2.pslli.d @@ -6378,6 +6454,13 @@ __m256i test_mm256_maskz_slli_epi32(__mmask8 __U, __m256i __A) { return _mm256_maskz_slli_epi32(__U, __A, 5); } +__m256i test_mm256_maskz_slli_epi32_2(__mmask8 __U, __m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_maskz_slli_epi32_2 + // CHECK: @llvm.x86.avx2.pslli.d + // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} + return _mm256_maskz_slli_epi32(__U, __A, __B); +} + __m128i test_mm_mask_sll_epi64(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { // CHECK-LABEL: @test_mm_mask_sll_epi64 // CHECK: @llvm.x86.sse2.psll.q @@ -6413,6 +6496,13 @@ __m128i test_mm_mask_slli_epi64(__m128i __W, __mmask8 __U, __m128i __A) { return _mm_mask_slli_epi64(__W, __U, __A, 5); } +__m128i test_mm_mask_slli_epi64_2(__m128i __W, __mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_mask_slli_epi64_2 + // CHECK: @llvm.x86.sse2.pslli.q + // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} + return _mm_mask_slli_epi64(__W, __U, __A, __B); +} + __m128i test_mm_maskz_slli_epi64(__mmask8 __U, __m128i __A) { // CHECK-LABEL: @test_mm_maskz_slli_epi64 // CHECK: @llvm.x86.sse2.pslli.q @@ -6420,6 +6510,13 @@ __m128i test_mm_maskz_slli_epi64(__mmask8 __U, __m128i __A) { return _mm_maskz_slli_epi64(__U, __A, 5); } +__m128i test_mm_maskz_slli_epi64_2(__mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_maskz_slli_epi64_2 + // CHECK: @llvm.x86.sse2.pslli.q + // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} + return _mm_maskz_slli_epi64(__U, __A, __B); +} + __m256i test_mm256_mask_slli_epi64(__m256i __W, __mmask8 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_mask_slli_epi64 // CHECK: @llvm.x86.avx2.pslli.q @@ -6427,6 +6524,13 @@ __m256i test_mm256_mask_slli_epi64(__m256i __W, __mmask8 __U, __m256i __A) { return _mm256_mask_slli_epi64(__W, __U, __A, 5); } +__m256i test_mm256_mask_slli_epi64_2(__m256i __W, __mmask8 __U, __m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_mask_slli_epi64_2 + // CHECK: @llvm.x86.avx2.pslli.q + // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} + return _mm256_mask_slli_epi64(__W, __U, __A, __B); +} + __m256i test_mm256_maskz_slli_epi64(__mmask8 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_maskz_slli_epi64 // CHECK: @llvm.x86.avx2.pslli.q @@ -6434,6 +6538,13 @@ __m256i test_mm256_maskz_slli_epi64(__mmask8 __U, __m256i __A) { return _mm256_maskz_slli_epi64(__U, __A, 5); } +__m256i test_mm256_maskz_slli_epi64_2(__mmask8 __U, __m256i __A) { + // CHECK-LABEL: @test_mm256_maskz_slli_epi64_2 + // CHECK: @llvm.x86.avx2.pslli.q + // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} + return _mm256_maskz_slli_epi64(__U, __A, 5); +} + __m128i test_mm_mask_srav_epi32(__m128i __W, __mmask8 __U, __m128i __X, __m128i __Y) { // CHECK-LABEL: @test_mm_mask_srav_epi32 // CHECK: @llvm.x86.avx2.psrav.d @@ -7687,6 +7798,13 @@ __m128i test_mm_mask_srai_epi32(__m128i __W, __mmask8 __U, __m128i __A) { return _mm_mask_srai_epi32(__W, __U, __A, 5); } +__m128i test_mm_mask_srai_epi32_2(__m128i __W, __mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_mask_srai_epi32_2 + // CHECK: @llvm.x86.sse2.psrai.d + // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} + return _mm_mask_srai_epi32(__W, __U, __A, __B); +} + __m128i test_mm_maskz_srai_epi32(__mmask8 __U, __m128i __A) { // CHECK-LABEL: @test_mm_maskz_srai_epi32 // CHECK: @llvm.x86.sse2.psrai.d @@ -7694,6 +7812,13 @@ __m128i test_mm_maskz_srai_epi32(__mmask8 __U, __m128i __A) { return _mm_maskz_srai_epi32(__U, __A, 5); } +__m128i test_mm_maskz_srai_epi32_2(__mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_maskz_srai_epi32_2 + // CHECK: @llvm.x86.sse2.psrai.d + // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} + return _mm_maskz_srai_epi32(__U, __A, __B); +} + __m256i test_mm256_mask_srai_epi32(__m256i __W, __mmask8 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_mask_srai_epi32 // CHECK: @llvm.x86.avx2.psrai.d @@ -7701,6 +7826,13 @@ __m256i test_mm256_mask_srai_epi32(__m256i __W, __mmask8 __U, __m256i __A) { return _mm256_mask_srai_epi32(__W, __U, __A, 5); } +__m256i test_mm256_mask_srai_epi32_2(__m256i __W, __mmask8 __U, __m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_mask_srai_epi32_2 + // CHECK: @llvm.x86.avx2.psrai.d + // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} + return _mm256_mask_srai_epi32(__W, __U, __A, __B); +} + __m256i test_mm256_maskz_srai_epi32(__mmask8 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_maskz_srai_epi32 // CHECK: @llvm.x86.avx2.psrai.d @@ -7708,6 +7840,13 @@ __m256i test_mm256_maskz_srai_epi32(__mmask8 __U, __m256i __A) { return _mm256_maskz_srai_epi32(__U, __A, 5); } +__m256i test_mm256_maskz_srai_epi32_2(__mmask8 __U, __m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_maskz_srai_epi32_2 + // CHECK: @llvm.x86.avx2.psrai.d + // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} + return _mm256_maskz_srai_epi32(__U, __A, __B); +} + __m128i test_mm_sra_epi64(__m128i __A, __m128i __B) { // CHECK-LABEL: @test_mm_sra_epi64 // CHECK: @llvm.x86.avx512.psra.q.128 @@ -7754,6 +7893,12 @@ __m128i test_mm_srai_epi64(__m128i __A) { return _mm_srai_epi64(__A, 5); } +__m128i test_mm_srai_epi64_2(__m128i __A, int __B) { + // CHECK-LABEL: @test_mm_srai_epi64_2 + // CHECK: @llvm.x86.avx512.psrai.q.128 + return _mm_srai_epi64(__A, __B); +} + __m128i test_mm_mask_srai_epi64(__m128i __W, __mmask8 __U, __m128i __A) { // CHECK-LABEL: @test_mm_mask_srai_epi64 // CHECK: @llvm.x86.avx512.psrai.q.128 @@ -7761,6 +7906,13 @@ __m128i test_mm_mask_srai_epi64(__m128i __W, __mmask8 __U, __m128i __A) { return _mm_mask_srai_epi64(__W, __U, __A, 5); } +__m128i test_mm_mask_srai_epi64_2(__m128i __W, __mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_mask_srai_epi64_2 + // CHECK: @llvm.x86.avx512.psrai.q.128 + // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} + return _mm_mask_srai_epi64(__W, __U, __A, __B); +} + __m128i test_mm_maskz_srai_epi64(__mmask8 __U, __m128i __A) { // CHECK-LABEL: @test_mm_maskz_srai_epi64 // CHECK: @llvm.x86.avx512.psrai.q.128 @@ -7768,12 +7920,25 @@ __m128i test_mm_maskz_srai_epi64(__mmask8 __U, __m128i __A) { return _mm_maskz_srai_epi64(__U, __A, 5); } +__m128i test_mm_maskz_srai_epi64_2(__mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_maskz_srai_epi64_2 + // CHECK: @llvm.x86.avx512.psrai.q.128 + // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} + return _mm_maskz_srai_epi64(__U, __A, __B); +} + __m256i test_mm256_srai_epi64(__m256i __A) { // CHECK-LABEL: @test_mm256_srai_epi64 // CHECK: @llvm.x86.avx512.psrai.q.256 return _mm256_srai_epi64(__A, 5); } +__m256i test_mm256_srai_epi64_2(__m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_srai_epi64_2 + // CHECK: @llvm.x86.avx512.psrai.q.256 + return _mm256_srai_epi64(__A, __B); +} + __m256i test_mm256_mask_srai_epi64(__m256i __W, __mmask8 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_mask_srai_epi64 // CHECK: @llvm.x86.avx512.psrai.q.256 @@ -7781,6 +7946,13 @@ __m256i test_mm256_mask_srai_epi64(__m256i __W, __mmask8 __U, __m256i __A) { return _mm256_mask_srai_epi64(__W, __U, __A, 5); } +__m256i test_mm256_mask_srai_epi64_2(__m256i __W, __mmask8 __U, __m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_mask_srai_epi64_2 + // CHECK: @llvm.x86.avx512.psrai.q.256 + // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} + return _mm256_mask_srai_epi64(__W, __U, __A, __B); +} + __m256i test_mm256_maskz_srai_epi64(__mmask8 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_maskz_srai_epi64 // CHECK: @llvm.x86.avx512.psrai.q.256 @@ -7788,6 +7960,13 @@ __m256i test_mm256_maskz_srai_epi64(__mmask8 __U, __m256i __A) { return _mm256_maskz_srai_epi64(__U, __A, 5); } +__m256i test_mm256_maskz_srai_epi64_2(__mmask8 __U, __m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_maskz_srai_epi64_2 + // CHECK: @llvm.x86.avx512.psrai.q.256 + // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} + return _mm256_maskz_srai_epi64(__U, __A, __B); +} + __m128i test_mm_ternarylogic_epi32(__m128i __A, __m128i __B, __m128i __C) { // CHECK-LABEL: @test_mm_ternarylogic_epi32 // CHECK: @llvm.x86.avx512.pternlog.d.128 diff --git a/clang/test/CodeGen/avx512vlbw-builtins.c b/clang/test/CodeGen/avx512vlbw-builtins.c index 1037617..80efe72 100644 --- a/clang/test/CodeGen/avx512vlbw-builtins.c +++ b/clang/test/CodeGen/avx512vlbw-builtins.c @@ -2172,6 +2172,13 @@ __m128i test_mm_mask_slli_epi16(__m128i __W, __mmask8 __U, __m128i __A) { return _mm_mask_slli_epi16(__W, __U, __A, 5); } +__m128i test_mm_mask_slli_epi16_2(__m128i __W, __mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_mask_slli_epi16_2 + // CHECK: @llvm.x86.sse2.pslli.w + // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} + return _mm_mask_slli_epi16(__W, __U, __A, __B); +} + __m128i test_mm_maskz_slli_epi16(__mmask8 __U, __m128i __A) { // CHECK-LABEL: @test_mm_maskz_slli_epi16 // CHECK: @llvm.x86.sse2.pslli.w @@ -2179,6 +2186,13 @@ __m128i test_mm_maskz_slli_epi16(__mmask8 __U, __m128i __A) { return _mm_maskz_slli_epi16(__U, __A, 5); } +__m128i test_mm_maskz_slli_epi16_2(__mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_maskz_slli_epi16_2 + // CHECK: @llvm.x86.sse2.pslli.w + // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} + return _mm_maskz_slli_epi16(__U, __A, __B); +} + __m256i test_mm256_mask_slli_epi16(__m256i __W, __mmask16 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_mask_slli_epi16 // CHECK: @llvm.x86.avx2.pslli.w @@ -2186,6 +2200,13 @@ __m256i test_mm256_mask_slli_epi16(__m256i __W, __mmask16 __U, __m256i __A) { return _mm256_mask_slli_epi16(__W, __U, __A, 5); } +__m256i test_mm256_mask_slli_epi16_2(__m256i __W, __mmask16 __U, __m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_mask_slli_epi16_2 + // CHECK: @llvm.x86.avx2.pslli.w + // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} + return _mm256_mask_slli_epi16(__W, __U, __A, __B); +} + __m256i test_mm256_maskz_slli_epi16(__mmask16 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_maskz_slli_epi16 // CHECK: @llvm.x86.avx2.pslli.w @@ -2193,6 +2214,13 @@ __m256i test_mm256_maskz_slli_epi16(__mmask16 __U, __m256i __A) { return _mm256_maskz_slli_epi16(__U, __A, 5); } +__m256i test_mm256_maskz_slli_epi16_2(__mmask16 __U, __m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_maskz_slli_epi16_2 + // CHECK: @llvm.x86.avx2.pslli.w + // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} + return _mm256_maskz_slli_epi16(__U, __A, __B); +} + __m256i test_mm256_srlv_epi16(__m256i __A, __m256i __B) { // CHECK-LABEL: @test_mm256_srlv_epi16 // CHECK: @llvm.x86.avx512.psrlv.w.256( @@ -2268,6 +2296,13 @@ __m128i test_mm_mask_srli_epi16(__m128i __W, __mmask8 __U, __m128i __A) { return _mm_mask_srli_epi16(__W, __U, __A, 5); } +__m128i test_mm_mask_srli_epi16_2(__m128i __W, __mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_mask_srli_epi16_2 + // CHECK: @llvm.x86.sse2.psrli.w + // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} + return _mm_mask_srli_epi16(__W, __U, __A, __B); +} + __m128i test_mm_maskz_srli_epi16(__mmask8 __U, __m128i __A) { // CHECK-LABEL: @test_mm_maskz_srli_epi16 // CHECK: @llvm.x86.sse2.psrli.w @@ -2275,6 +2310,13 @@ __m128i test_mm_maskz_srli_epi16(__mmask8 __U, __m128i __A) { return _mm_maskz_srli_epi16(__U, __A, 5); } +__m128i test_mm_maskz_srli_epi16_2(__mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_maskz_srli_epi16_2 + // CHECK: @llvm.x86.sse2.psrli.w + // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} + return _mm_maskz_srli_epi16(__U, __A, __B); +} + __m256i test_mm256_mask_srli_epi16(__m256i __W, __mmask16 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_mask_srli_epi16 // CHECK: @llvm.x86.avx2.psrli.w @@ -2282,6 +2324,13 @@ __m256i test_mm256_mask_srli_epi16(__m256i __W, __mmask16 __U, __m256i __A) { return _mm256_mask_srli_epi16(__W, __U, __A, 5); } +__m256i test_mm256_mask_srli_epi16_2(__m256i __W, __mmask16 __U, __m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_mask_srli_epi16_2 + // CHECK: @llvm.x86.avx2.psrli.w + // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} + return _mm256_mask_srli_epi16(__W, __U, __A, __B); +} + __m256i test_mm256_maskz_srli_epi16(__mmask16 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_maskz_srli_epi16 // CHECK: @llvm.x86.avx2.psrli.w @@ -2289,6 +2338,13 @@ __m256i test_mm256_maskz_srli_epi16(__mmask16 __U, __m256i __A) { return _mm256_maskz_srli_epi16(__U, __A, 5); } +__m256i test_mm256_maskz_srli_epi16_2(__mmask16 __U, __m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_maskz_srli_epi16_2 + // CHECK: @llvm.x86.avx2.psrli.w + // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} + return _mm256_maskz_srli_epi16(__U, __A, __B); +} + __m256i test_mm256_srav_epi16(__m256i __A, __m256i __B) { // CHECK-LABEL: @test_mm256_srav_epi16 // CHECK: @llvm.x86.avx512.psrav.w.256( @@ -2364,6 +2420,13 @@ __m128i test_mm_mask_srai_epi16(__m128i __W, __mmask8 __U, __m128i __A) { return _mm_mask_srai_epi16(__W, __U, __A, 5); } +__m128i test_mm_mask_srai_epi16_2(__m128i __W, __mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_mask_srai_epi16_2 + // CHECK: @llvm.x86.sse2.psrai.w + // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} + return _mm_mask_srai_epi16(__W, __U, __A, __B); +} + __m128i test_mm_maskz_srai_epi16(__mmask8 __U, __m128i __A) { // CHECK-LABEL: @test_mm_maskz_srai_epi16 // CHECK: @llvm.x86.sse2.psrai.w @@ -2371,6 +2434,13 @@ __m128i test_mm_maskz_srai_epi16(__mmask8 __U, __m128i __A) { return _mm_maskz_srai_epi16(__U, __A, 5); } +__m128i test_mm_maskz_srai_epi16_2(__mmask8 __U, __m128i __A, int __B) { + // CHECK-LABEL: @test_mm_maskz_srai_epi16_2 + // CHECK: @llvm.x86.sse2.psrai.w + // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} + return _mm_maskz_srai_epi16(__U, __A, __B); +} + __m256i test_mm256_mask_srai_epi16(__m256i __W, __mmask16 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_mask_srai_epi16 // CHECK: @llvm.x86.avx2.psrai.w @@ -2378,6 +2448,13 @@ __m256i test_mm256_mask_srai_epi16(__m256i __W, __mmask16 __U, __m256i __A) { return _mm256_mask_srai_epi16(__W, __U, __A, 5); } +__m256i test_mm256_mask_srai_epi16_2(__m256i __W, __mmask16 __U, __m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_mask_srai_epi16_2 + // CHECK: @llvm.x86.avx2.psrai.w + // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} + return _mm256_mask_srai_epi16(__W, __U, __A, __B); +} + __m256i test_mm256_maskz_srai_epi16(__mmask16 __U, __m256i __A) { // CHECK-LABEL: @test_mm256_maskz_srai_epi16 // CHECK: @llvm.x86.avx2.psrai.w @@ -2385,6 +2462,13 @@ __m256i test_mm256_maskz_srai_epi16(__mmask16 __U, __m256i __A) { return _mm256_maskz_srai_epi16(__U, __A, 5); } +__m256i test_mm256_maskz_srai_epi16_2(__mmask16 __U, __m256i __A, int __B) { + // CHECK-LABEL: @test_mm256_maskz_srai_epi16_2 + // CHECK: @llvm.x86.avx2.psrai.w + // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} + return _mm256_maskz_srai_epi16(__U, __A, __B); +} + __m128i test_mm_mask_mov_epi16(__m128i __W, __mmask8 __U, __m128i __A) { // CHECK-LABEL: @test_mm_mask_mov_epi16 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} diff --git a/clang/test/CodeGen/sse2-builtins.c b/clang/test/CodeGen/sse2-builtins.c index 029340a..28ee523 100644 --- a/clang/test/CodeGen/sse2-builtins.c +++ b/clang/test/CodeGen/sse2-builtins.c @@ -1186,18 +1186,54 @@ __m128i test_mm_slli_epi16(__m128i A) { return _mm_slli_epi16(A, 1); } +__m128i test_mm_slli_epi16_1(__m128i A) { + // CHECK-LABEL: test_mm_slli_epi16_1 + // CHECK: call <8 x i16> @llvm.x86.sse2.pslli.w(<8 x i16> %{{.*}}, i32 %{{.*}}) + return _mm_slli_epi16(A, -1); +} + +__m128i test_mm_slli_epi16_2(__m128i A, int B) { + // CHECK-LABEL: test_mm_slli_epi16_2 + // CHECK: call <8 x i16> @llvm.x86.sse2.pslli.w(<8 x i16> %{{.*}}, i32 %{{.*}}) + return _mm_slli_epi16(A, B); +} + __m128i test_mm_slli_epi32(__m128i A) { // CHECK-LABEL: test_mm_slli_epi32 // CHECK: call <4 x i32> @llvm.x86.sse2.pslli.d(<4 x i32> %{{.*}}, i32 %{{.*}}) return _mm_slli_epi32(A, 1); } +__m128i test_mm_slli_epi32_1(__m128i A) { + // CHECK-LABEL: test_mm_slli_epi32_1 + // CHECK: call <4 x i32> @llvm.x86.sse2.pslli.d(<4 x i32> %{{.*}}, i32 %{{.*}}) + return _mm_slli_epi32(A, -1); +} + +__m128i test_mm_slli_epi32_2(__m128i A, int B) { + // CHECK-LABEL: test_mm_slli_epi32_2 + // CHECK: call <4 x i32> @llvm.x86.sse2.pslli.d(<4 x i32> %{{.*}}, i32 %{{.*}}) + return _mm_slli_epi32(A, B); +} + __m128i test_mm_slli_epi64(__m128i A) { // CHECK-LABEL: test_mm_slli_epi64 // CHECK: call <2 x i64> @llvm.x86.sse2.pslli.q(<2 x i64> %{{.*}}, i32 %{{.*}}) return _mm_slli_epi64(A, 1); } +__m128i test_mm_slli_epi64_1(__m128i A) { + // CHECK-LABEL: test_mm_slli_epi64_1 + // CHECK: call <2 x i64> @llvm.x86.sse2.pslli.q(<2 x i64> %{{.*}}, i32 %{{.*}}) + return _mm_slli_epi64(A, -1); +} + +__m128i test_mm_slli_epi64_2(__m128i A, int B) { + // CHECK-LABEL: test_mm_slli_epi64_2 + // CHECK: call <2 x i64> @llvm.x86.sse2.pslli.q(<2 x i64> %{{.*}}, i32 %{{.*}}) + return _mm_slli_epi64(A, B); +} + __m128i test_mm_slli_si128(__m128i A) { // CHECK-LABEL: test_mm_slli_si128 // CHECK: shufflevector <16 x i8> zeroinitializer, <16 x i8> %{{.*}}, <16 x i32> @@ -1242,12 +1278,36 @@ __m128i test_mm_srai_epi16(__m128i A) { return _mm_srai_epi16(A, 1); } +__m128i test_mm_srai_epi16_1(__m128i A) { + // CHECK-LABEL: test_mm_srai_epi16_1 + // CHECK: call <8 x i16> @llvm.x86.sse2.psrai.w(<8 x i16> %{{.*}}, i32 %{{.*}}) + return _mm_srai_epi16(A, -1); +} + +__m128i test_mm_srai_epi16_2(__m128i A, int B) { + // CHECK-LABEL: test_mm_srai_epi16_2 + // CHECK: call <8 x i16> @llvm.x86.sse2.psrai.w(<8 x i16> %{{.*}}, i32 %{{.*}}) + return _mm_srai_epi16(A, B); +} + __m128i test_mm_srai_epi32(__m128i A) { // CHECK-LABEL: test_mm_srai_epi32 // CHECK: call <4 x i32> @llvm.x86.sse2.psrai.d(<4 x i32> %{{.*}}, i32 %{{.*}}) return _mm_srai_epi32(A, 1); } +__m128i test_mm_srai_epi32_1(__m128i A) { + // CHECK-LABEL: test_mm_srai_epi32_1 + // CHECK: call <4 x i32> @llvm.x86.sse2.psrai.d(<4 x i32> %{{.*}}, i32 %{{.*}}) + return _mm_srai_epi32(A, -1); +} + +__m128i test_mm_srai_epi32_2(__m128i A, int B) { + // CHECK-LABEL: test_mm_srai_epi32_2 + // CHECK: call <4 x i32> @llvm.x86.sse2.psrai.d(<4 x i32> %{{.*}}, i32 %{{.*}}) + return _mm_srai_epi32(A, B); +} + __m128i test_mm_srl_epi16(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_srl_epi16 // CHECK: call <8 x i16> @llvm.x86.sse2.psrl.w(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) @@ -1272,18 +1332,54 @@ __m128i test_mm_srli_epi16(__m128i A) { return _mm_srli_epi16(A, 1); } +__m128i test_mm_srli_epi16_1(__m128i A) { + // CHECK-LABEL: test_mm_srli_epi16_1 + // CHECK: call <8 x i16> @llvm.x86.sse2.psrli.w(<8 x i16> %{{.*}}, i32 %{{.*}}) + return _mm_srli_epi16(A, -1); +} + +__m128i test_mm_srli_epi16_2(__m128i A, int B) { + // CHECK-LABEL: test_mm_srli_epi16 + // CHECK: call <8 x i16> @llvm.x86.sse2.psrli.w(<8 x i16> %{{.*}}, i32 %{{.*}}) + return _mm_srli_epi16(A, B); +} + __m128i test_mm_srli_epi32(__m128i A) { // CHECK-LABEL: test_mm_srli_epi32 // CHECK: call <4 x i32> @llvm.x86.sse2.psrli.d(<4 x i32> %{{.*}}, i32 %{{.*}}) return _mm_srli_epi32(A, 1); } +__m128i test_mm_srli_epi32_1(__m128i A) { + // CHECK-LABEL: test_mm_srli_epi32_1 + // CHECK: call <4 x i32> @llvm.x86.sse2.psrli.d(<4 x i32> %{{.*}}, i32 %{{.*}}) + return _mm_srli_epi32(A, -1); +} + +__m128i test_mm_srli_epi32_2(__m128i A, int B) { + // CHECK-LABEL: test_mm_srli_epi32_2 + // CHECK: call <4 x i32> @llvm.x86.sse2.psrli.d(<4 x i32> %{{.*}}, i32 %{{.*}}) + return _mm_srli_epi32(A, B); +} + __m128i test_mm_srli_epi64(__m128i A) { // CHECK-LABEL: test_mm_srli_epi64 // CHECK: call <2 x i64> @llvm.x86.sse2.psrli.q(<2 x i64> %{{.*}}, i32 %{{.*}}) return _mm_srli_epi64(A, 1); } +__m128i test_mm_srli_epi64_1(__m128i A) { + // CHECK-LABEL: test_mm_srli_epi64_1 + // CHECK: call <2 x i64> @llvm.x86.sse2.psrli.q(<2 x i64> %{{.*}}, i32 %{{.*}}) + return _mm_srli_epi64(A, -1); +} + +__m128i test_mm_srli_epi64_2(__m128i A, int B) { + // CHECK-LABEL: test_mm_srli_epi64_2 + // CHECK: call <2 x i64> @llvm.x86.sse2.psrli.q(<2 x i64> %{{.*}}, i32 %{{.*}}) + return _mm_srli_epi64(A, B); +} + __m128i test_mm_srli_si128(__m128i A) { // CHECK-LABEL: test_mm_srli_si128 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> zeroinitializer, <16 x i32>