diff options
| author | Tomasz Krupa <tomasz.krupa@intel.com> | 2018-06-14 17:36:23 +0000 |
|---|---|---|
| committer | Tomasz Krupa <tomasz.krupa@intel.com> | 2018-06-14 17:36:23 +0000 |
| commit | 82aa42af4971e3cb0e31bed874c8d5f7c8d3737c (patch) | |
| tree | ff8564703b8f37d960d586e9926ca3899b31b43a /clang/test | |
| parent | d8d66a6b285b7c9ee7a9040550a52953336d9337 (diff) | |
| download | bcm5719-llvm-82aa42af4971e3cb0e31bed874c8d5f7c8d3737c.tar.gz bcm5719-llvm-82aa42af4971e3cb0e31bed874c8d5f7c8d3737c.zip | |
[X86] Lowering Mask Scalar intrinsics to native IR (Clang part)
Summary: Lowering add, sub, mul, and div mask scalar intrinsic calls
to native IR.
Reviewers: craig.topper, RKSimon, spatel, sroland
Reviewed By: craig.topper
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D47979
llvm-svn: 334741
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CodeGen/avx512f-builtins.c | 164 |
1 files changed, 148 insertions, 16 deletions
diff --git a/clang/test/CodeGen/avx512f-builtins.c b/clang/test/CodeGen/avx512f-builtins.c index cc34ee5ef67..2d5b95940fb 100644 --- a/clang/test/CodeGen/avx512f-builtins.c +++ b/clang/test/CodeGen/avx512f-builtins.c @@ -2302,12 +2302,29 @@ __m128 test_mm_maskz_add_round_ss(__mmask8 __U, __m128 __A, __m128 __B) { } __m128 test_mm_mask_add_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { // CHECK-LABEL: @test_mm_mask_add_ss - // CHECK: @llvm.x86.avx512.mask.add.ss.round + // CHECK-NOT: @llvm.x86.avx512.mask.add.ss.round + // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: fadd float %{{.*}}, %{{.*}} + // CHECK: insertelement <4 x float> %{{.*}}, i32 0 + // CHECK: and i32 {{.*}}, 1 + // CHECK: icmp ne i32 %{{.*}}, 0 + // CHECK: br {{.*}}, {{.*}}, {{.*}} + // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0 return _mm_mask_add_ss(__W,__U,__A,__B); } __m128 test_mm_maskz_add_ss(__mmask8 __U, __m128 __A, __m128 __B) { // CHECK-LABEL: @test_mm_maskz_add_ss - // CHECK: @llvm.x86.avx512.mask.add.ss.round + // CHECK-NOT: @llvm.x86.avx512.mask.add.ss.round + // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: fadd float %{{.*}}, %{{.*}} + // CHECK: insertelement <4 x float> %{{.*}}, i32 0 + // CHECK: and i32 {{.*}}, 1 + // CHECK: icmp ne i32 %{{.*}}, 0 + // CHECK: br {{.*}}, {{.*}}, {{.*}} + // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0 return _mm_maskz_add_ss(__U,__A,__B); } __m128d test_mm_add_round_sd(__m128d __A, __m128d __B) { @@ -2327,12 +2344,29 @@ __m128d test_mm_maskz_add_round_sd(__mmask8 __U, __m128d __A, __m128d __B) { } __m128d test_mm_mask_add_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { // CHECK-LABEL: @test_mm_mask_add_sd - // CHECK: @llvm.x86.avx512.mask.add.sd.round + // CHECK-NOT: @llvm.x86.avx512.mask.add.sd.round + // CHECK: extractelement <2 x double> %{{.*}}, i32 0 + // CHECK: extractelement <2 x double> %{{.*}}, i32 0 + // CHECK: fadd double %{{.*}}, %{{.*}} + // CHECK: insertelement <2 x double> {{.*}}, i32 0 + // CHECK: and i32 {{.*}}, 1 + // CHECK: icmp ne i32 %{{.*}}, 0 + // CHECK: br {{.*}}, {{.*}}, {{.*}} + // CHECK: extractelement <2 x double> %{{.*}}, i32 0 + // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0 return _mm_mask_add_sd(__W,__U,__A,__B); } __m128d test_mm_maskz_add_sd(__mmask8 __U, __m128d __A, __m128d __B) { // CHECK-LABEL: @test_mm_maskz_add_sd - // CHECK: @llvm.x86.avx512.mask.add.sd.round + // CHECK-NOT: @llvm.x86.avx512.mask.add.sd.round + // CHECK: extractelement <2 x double> %{{.*}}, i32 0 + // CHECK: extractelement <2 x double> %{{.*}}, i32 0 + // CHECK: fadd double %{{.*}}, %{{.*}} + // CHECK: insertelement <2 x double> {{.*}}, i32 0 + // CHECK: and i32 {{.*}}, 1 + // CHECK: icmp ne i32 %{{.*}}, 0 + // CHECK: br {{.*}}, {{.*}}, {{.*}} + // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0 return _mm_maskz_add_sd(__U,__A,__B); } __m512d test_mm512_sub_round_pd(__m512d __A, __m512d __B) { @@ -2410,12 +2444,29 @@ __m128 test_mm_maskz_sub_round_ss(__mmask8 __U, __m128 __A, __m128 __B) { } __m128 test_mm_mask_sub_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { // CHECK-LABEL: @test_mm_mask_sub_ss - // CHECK: @llvm.x86.avx512.mask.sub.ss.round + // CHECK-NOT: @llvm.x86.avx512.mask.sub.ss.round + // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: fsub float %{{.*}}, %{{.*}} + // CHECK: insertelement <4 x float> {{.*}}, i32 0 + // CHECK: and i32 {{.*}}, 1 + // CHECK: icmp ne i32 %{{.*}}, 0 + // CHECK: br {{.*}}, {{.*}}, {{.*}} + // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0 return _mm_mask_sub_ss(__W,__U,__A,__B); } __m128 test_mm_maskz_sub_ss(__mmask8 __U, __m128 __A, __m128 __B) { // CHECK-LABEL: @test_mm_maskz_sub_ss - // CHECK: @llvm.x86.avx512.mask.sub.ss.round + // CHECK-NOT: @llvm.x86.avx512.mask.sub.ss.round + // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: fsub float %{{.*}}, %{{.*}} + // CHECK: insertelement <4 x float> {{.*}}, i32 0 + // CHECK: and i32 {{.*}}, 1 + // CHECK: icmp ne i32 %{{.*}}, 0 + // CHECK: br {{.*}}, {{.*}}, {{.*}} + // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0 return _mm_maskz_sub_ss(__U,__A,__B); } __m128d test_mm_sub_round_sd(__m128d __A, __m128d __B) { @@ -2435,12 +2486,29 @@ __m128d test_mm_maskz_sub_round_sd(__mmask8 __U, __m128d __A, __m128d __B) { } __m128d test_mm_mask_sub_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { // CHECK-LABEL: @test_mm_mask_sub_sd - // CHECK: @llvm.x86.avx512.mask.sub.sd.round + // CHECK-NOT: @llvm.x86.avx512.mask.sub.sd.round + // CHECK: extractelement <2 x double> %{{.*}}, i32 0 + // CHECK: extractelement <2 x double> %{{.*}}, i32 0 + // CHECK: fsub double %{{.*}}, %{{.*}} + // CHECK: insertelement <2 x double> {{.*}}, i32 0 + // CHECK: and i32 {{.*}}, 1 + // CHECK: icmp ne i32 %{{.*}}, 0 + // CHECK: br {{.*}}, {{.*}}, {{.*}} + // CHECK: extractelement <2 x double> %{{.*}}, i32 0 + // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0 return _mm_mask_sub_sd(__W,__U,__A,__B); } __m128d test_mm_maskz_sub_sd(__mmask8 __U, __m128d __A, __m128d __B) { // CHECK-LABEL: @test_mm_maskz_sub_sd - // CHECK: @llvm.x86.avx512.mask.sub.sd.round + // CHECK-NOT: @llvm.x86.avx512.mask.sub.sd.round + // CHECK: extractelement <2 x double> %{{.*}}, i32 0 + // CHECK: extractelement <2 x double> %{{.*}}, i32 0 + // CHECK: fsub double %{{.*}}, %{{.*}} + // CHECK: insertelement <2 x double> {{.*}}, i32 0 + // CHECK: and i32 {{.*}}, 1 + // CHECK: icmp ne i32 %{{.*}}, 0 + // CHECK: br {{.*}}, {{.*}}, {{.*}} + // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0 return _mm_maskz_sub_sd(__U,__A,__B); } __m512d test_mm512_mul_round_pd(__m512d __A, __m512d __B) { @@ -2518,12 +2586,29 @@ __m128 test_mm_maskz_mul_round_ss(__mmask8 __U, __m128 __A, __m128 __B) { } __m128 test_mm_mask_mul_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { // CHECK-LABEL: @test_mm_mask_mul_ss - // CHECK: @llvm.x86.avx512.mask.mul.ss.round + // CHECK-NOT: @llvm.x86.avx512.mask.mul.ss.round + // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: fmul float %{{.*}}, %{{.*}} + // CHECK: insertelement <4 x float> {{.*}}, i32 0 + // CHECK: and i32 {{.*}}, 1 + // CHECK: icmp ne i32 %{{.*}}, 0 + // CHECK: br {{.*}}, {{.*}}, {{.*}} + // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0 return _mm_mask_mul_ss(__W,__U,__A,__B); } __m128 test_mm_maskz_mul_ss(__mmask8 __U, __m128 __A, __m128 __B) { // CHECK-LABEL: @test_mm_maskz_mul_ss - // CHECK: @llvm.x86.avx512.mask.mul.ss.round + // CHECK-NOT: @llvm.x86.avx512.mask.mul.ss.round + // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: fmul float %{{.*}}, %{{.*}} + // CHECK: insertelement <4 x float> {{.*}}, i32 0 + // CHECK: and i32 {{.*}}, 1 + // CHECK: icmp ne i32 %{{.*}}, 0 + // CHECK: br {{.*}}, {{.*}}, {{.*}} + // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0 return _mm_maskz_mul_ss(__U,__A,__B); } __m128d test_mm_mul_round_sd(__m128d __A, __m128d __B) { @@ -2543,12 +2628,29 @@ __m128d test_mm_maskz_mul_round_sd(__mmask8 __U, __m128d __A, __m128d __B) { } __m128d test_mm_mask_mul_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { // CHECK-LABEL: @test_mm_mask_mul_sd - // CHECK: @llvm.x86.avx512.mask.mul.sd.round + // CHECK-NOT: @llvm.x86.avx512.mask.mul.sd.round + // CHECK: extractelement <2 x double> %{{.*}}, i32 0 + // CHECK: extractelement <2 x double> %{{.*}}, i32 0 + // CHECK: fmul double %{{.*}}, %{{.*}} + // CHECK: insertelement <2 x double> {{.*}}, i32 0 + // CHECK: and i32 {{.*}}, 1 + // CHECK: icmp ne i32 %{{.*}}, 0 + // CHECK: br {{.*}}, {{.*}}, {{.*}} + // CHECK: extractelement <2 x double> %{{.*}}, i32 0 + // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0 return _mm_mask_mul_sd(__W,__U,__A,__B); } __m128d test_mm_maskz_mul_sd(__mmask8 __U, __m128d __A, __m128d __B) { // CHECK-LABEL: @test_mm_maskz_mul_sd - // CHECK: @llvm.x86.avx512.mask.mul.sd.round + // CHECK-NOT: @llvm.x86.avx512.mask.mul.sd.round + // CHECK: extractelement <2 x double> %{{.*}}, i32 0 + // CHECK: extractelement <2 x double> %{{.*}}, i32 0 + // CHECK: fmul double %{{.*}}, %{{.*}} + // CHECK: insertelement <2 x double> {{.*}}, i32 0 + // CHECK: and i32 {{.*}}, 1 + // CHECK: icmp ne i32 %{{.*}}, 0 + // CHECK: br {{.*}}, {{.*}}, {{.*}} + // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i32 0 return _mm_maskz_mul_sd(__U,__A,__B); } __m512d test_mm512_div_round_pd(__m512d __A, __m512d __B) { @@ -2636,12 +2738,27 @@ __m128 test_mm_maskz_div_round_ss(__mmask8 __U, __m128 __A, __m128 __B) { } __m128 test_mm_mask_div_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { // CHECK-LABEL: @test_mm_mask_div_ss - // CHECK: @llvm.x86.avx512.mask.div.ss.round + // CHECK-NOT: @llvm.x86.avx512.mask.div.ss.round + // CHECK: extractelement <4 x float> %{{.*}}, i64 0 + // CHECK: extractelement <4 x float> %{{.*}}, i64 0 + // CHECK: extractelement <4 x float> %{{.*}}, i64 0 + // CHECK: fdiv float %{{.*}}, %{{.*}} + // CHECK: bitcast i8 %{{.*}} to <8 x i1> + // CHECK: extractelement <8 x i1> %{{.*}}, i64 0 + // CHECK: select i1 %{{.*}}, float %{{.*}}, float %{{.*}} + // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0 return _mm_mask_div_ss(__W,__U,__A,__B); } __m128 test_mm_maskz_div_ss(__mmask8 __U, __m128 __A, __m128 __B) { // CHECK-LABEL: @test_mm_maskz_div_ss - // CHECK: @llvm.x86.avx512.mask.div.ss.round + // CHECK-NOT: @llvm.x86.avx512.mask.div.ss.round + // CHECK: extractelement <4 x float> %{{.*}}, i64 0 + // CHECK: extractelement <4 x float> %{{.*}}, i64 0 + // CHECK: fdiv float %{{.*}}, %{{.*}} + // CHECK: bitcast i8 %{{.*}} to <8 x i1> + // CHECK: extractelement <8 x i1> %{{.*}}, i64 0 + // CHECK: select i1 %{{.*}}, float %{{.*}}, float %{{.*}} + // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0 return _mm_maskz_div_ss(__U,__A,__B); } __m128d test_mm_div_round_sd(__m128d __A, __m128d __B) { @@ -2661,12 +2778,27 @@ __m128d test_mm_maskz_div_round_sd(__mmask8 __U, __m128d __A, __m128d __B) { } __m128d test_mm_mask_div_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { // CHECK-LABEL: @test_mm_mask_div_sd - // CHECK: @llvm.x86.avx512.mask.div.sd.round + // CHECK-NOT: @llvm.x86.avx512.mask.div.sd.round + // CHECK: extractelement <2 x double> %{{.*}}, i64 0 + // CHECK: extractelement <2 x double> %{{.*}}, i64 0 + // CHECK: extractelement <2 x double> %{{.*}}, i64 0 + // CHECK: fdiv double %{{.*}}, %{{.*}} + // CHECK: bitcast i8 %{{.*}} to <8 x i1> + // CHECK: extractelement <8 x i1> %{{.*}}, i64 0 + // CHECK: select i1 %{{.*}}, double %{{.*}}, double %{{.*}} + // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0 return _mm_mask_div_sd(__W,__U,__A,__B); } __m128d test_mm_maskz_div_sd(__mmask8 __U, __m128d __A, __m128d __B) { // CHECK-LABEL: @test_mm_maskz_div_sd - // CHECK: @llvm.x86.avx512.mask.div.sd.round + // CHECK-NOT: @llvm.x86.avx512.mask.div.sd.round + // CHECK: extractelement <2 x double> %{{.*}}, i64 0 + // CHECK: extractelement <2 x double> %{{.*}}, i64 0 + // CHECK: fdiv double %{{.*}}, %{{.*}} + // CHECK: bitcast i8 %{{.*}} to <8 x i1> + // CHECK: extractelement <8 x i1> %{{.*}}, i64 0 + // CHECK: select i1 %{{.*}}, double %{{.*}}, double %{{.*}} + // CHECK: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0 return _mm_maskz_div_sd(__U,__A,__B); } __m128 test_mm_max_round_ss(__m128 __A, __m128 __B) { |

