diff --git a/clang/lib/Headers/avx512fp16intrin.h b/clang/lib/Headers/avx512fp16intrin.h --- a/clang/lib/Headers/avx512fp16intrin.h +++ b/clang/lib/Headers/avx512fp16intrin.h @@ -3142,6 +3142,11 @@ _MM_FROUND_CUR_DIRECTION); } +static __inline__ __m512h __DEFAULT_FN_ATTRS512 _mm512_mul_pch(__m512h __A, + __m512h __B) { + return _mm512_fmul_pch(__A, __B); +} + static __inline__ __m512h __DEFAULT_FN_ATTRS512 _mm512_mask_fmul_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) { return (__m512h)__builtin_ia32_vfmulcph512_mask((__v16sf)__A, (__v16sf)__B, @@ -3149,6 +3154,11 @@ _MM_FROUND_CUR_DIRECTION); } +static __inline__ __m512h __DEFAULT_FN_ATTRS512 +_mm512_mask_mul_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) { + return _mm512_mask_fmul_pch(__W, __U, __A, __B); +} + static __inline__ __m512h __DEFAULT_FN_ATTRS512 _mm512_maskz_fmul_pch(__mmask16 __U, __m512h __A, __m512h __B) { return (__m512h)__builtin_ia32_vfmulcph512_mask( @@ -3156,6 +3166,11 @@ _MM_FROUND_CUR_DIRECTION); } +static __inline__ __m512h __DEFAULT_FN_ATTRS512 +_mm512_maskz_mul_pch(__mmask16 __U, __m512h __A, __m512h __B) { + return _mm512_maskz_fmul_pch(__U, __A, __B); +} + #define _mm512_fmul_round_pch(A, B, R) \ ((__m512h)__builtin_ia32_vfmulcph512_mask( \ (__v16sf)(__m512h)(A), (__v16sf)(__m512h)(B), \ diff --git a/clang/lib/Headers/avx512vlfp16intrin.h b/clang/lib/Headers/avx512vlfp16intrin.h --- a/clang/lib/Headers/avx512vlfp16intrin.h +++ b/clang/lib/Headers/avx512vlfp16intrin.h @@ -1884,6 +1884,11 @@ (__v4sf)__A, (__v4sf)__B, (__v4sf)_mm_undefined_ph(), (__mmask8)-1); } +static __inline__ __m128h __DEFAULT_FN_ATTRS128 _mm_mul_pch(__m128h __A, + __m128h __B) { + return _mm_fmul_pch(__A, __B); +} + static __inline__ __m128h __DEFAULT_FN_ATTRS128 _mm_mask_fmul_pch(__m128h __W, __mmask8 __U, __m128h __A, @@ -1892,30 +1897,58 @@ (__v4sf)__W, (__mmask8)__U); } +static __inline__ __m128h __DEFAULT_FN_ATTRS128 _mm_mask_mul_pch(__m128h __W, + __mmask8 __U, + __m128h __A, + __m128h __B) { + return _mm_mask_fmul_pch(__W, __U, __A, __B); +} + static __inline__ __m128h __DEFAULT_FN_ATTRS128 _mm_maskz_fmul_pch(__mmask8 __U, __m128h __A, __m128h __B) { return (__m128h)__builtin_ia32_vfmulcph128_mask( (__v4sf)__A, (__v4sf)__B, (__v4sf)_mm_setzero_ph(), (__mmask8)__U); } +static __inline__ __m128h __DEFAULT_FN_ATTRS128 _mm_maskz_mul_pch(__mmask8 __U, + __m128h __A, + __m128h __B) { + return _mm_maskz_fmul_pch(__U, __A, __B); +} + static __inline__ __m256h __DEFAULT_FN_ATTRS256 _mm256_fmul_pch(__m256h __A, __m256h __B) { return (__m256h)__builtin_ia32_vfmulcph256_mask( (__v8sf)__A, (__v8sf)__B, (__v8sf)_mm256_undefined_ph(), (__mmask8)-1); } +static __inline__ __m256h __DEFAULT_FN_ATTRS256 _mm256_mul_pch(__m256h __A, + __m256h __B) { + return _mm256_fmul_pch(__A, __B); +} + static __inline__ __m256h __DEFAULT_FN_ATTRS256 _mm256_mask_fmul_pch(__m256h __W, __mmask8 __U, __m256h __A, __m256h __B) { return (__m256h)__builtin_ia32_vfmulcph256_mask((__v8sf)__A, (__v8sf)__B, (__v8sf)__W, (__mmask8)__U); } +static __inline__ __m256h __DEFAULT_FN_ATTRS256 +_mm256_mask_mul_pch(__m256h __W, __mmask8 __U, __m256h __A, __m256h __B) { + return _mm256_mask_fmul_pch(__W, __U, __A, __B); +} + static __inline__ __m256h __DEFAULT_FN_ATTRS256 _mm256_maskz_fmul_pch(__mmask8 __U, __m256h __A, __m256h __B) { return (__m256h)__builtin_ia32_vfmulcph256_mask( (__v8sf)__A, (__v8sf)__B, (__v8sf)_mm256_setzero_ph(), (__mmask8)__U); } +static __inline__ __m256h __DEFAULT_FN_ATTRS256 +_mm256_maskz_mul_pch(__mmask8 __U, __m256h __A, __m256h __B) { + return _mm256_maskz_fmul_pch(__U, __A, __B); +} + static __inline__ __m128h __DEFAULT_FN_ATTRS128 _mm_fmadd_pch(__m128h __A, __m128h __B, __m128h __C) { diff --git a/clang/test/CodeGen/X86/avx512fp16-builtins.c b/clang/test/CodeGen/X86/avx512fp16-builtins.c --- a/clang/test/CodeGen/X86/avx512fp16-builtins.c +++ b/clang/test/CodeGen/X86/avx512fp16-builtins.c @@ -4315,18 +4315,36 @@ return _mm512_fmul_pch(__A, __B); } +__m512h test_mm512_mul_pch(__m512h __A, __m512h __B) { + // CHECK-LABEL: @test_mm512_mul_pch + // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 + return _mm512_mul_pch(__A, __B); +} + __m512h test_mm512_mask_fmul_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) { // CHECK-LABEL: @test_mm512_mask_fmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 return _mm512_mask_fmul_pch(__W, __U, __A, __B); } +__m512h test_mm512_mask_mul_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) { + // CHECK-LABEL: @test_mm512_mask_mul_pch + // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 + return _mm512_mask_mul_pch(__W, __U, __A, __B); +} + __m512h test_mm512_maskz_fmul_pch(__mmask16 __U, __m512h __A, __m512h __B) { // CHECK-LABEL: @test_mm512_maskz_fmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 return _mm512_maskz_fmul_pch(__U, __A, __B); } +__m512h test_mm512_maskz_mul_pch(__mmask16 __U, __m512h __A, __m512h __B) { + // CHECK-LABEL: @test_mm512_maskz_mul_pch + // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 + return _mm512_maskz_mul_pch(__U, __A, __B); +} + __m512h test_mm512_fmul_round_pch(__m512h __A, __m512h __B) { // CHECK-LABEL: @test_mm512_fmul_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 diff --git a/clang/test/CodeGen/X86/avx512vlfp16-builtins.c b/clang/test/CodeGen/X86/avx512vlfp16-builtins.c --- a/clang/test/CodeGen/X86/avx512vlfp16-builtins.c +++ b/clang/test/CodeGen/X86/avx512vlfp16-builtins.c @@ -2934,36 +2934,72 @@ return _mm_fmul_pch(__A, __B); } +__m128h test_mm_mul_pch(__m128h __A, __m128h __B) { + // CHECK-LABEL: @test_mm_mul_pch + // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.128 + return _mm_mul_pch(__A, __B); +} + __m128h test_mm_mask_fmul_pch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { // CHECK-LABEL: @test_mm_mask_fmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.128 return _mm_mask_fmul_pch(__W, __U, __A, __B); } +__m128h test_mm_mask_mul_pch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { + // CHECK-LABEL: @test_mm_mask_mul_pch + // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.128 + return _mm_mask_mul_pch(__W, __U, __A, __B); +} + __m128h test_mm_maskz_fmul_pch(__mmask8 __U, __m128h __A, __m128h __B) { // CHECK-LABEL: @test_mm_maskz_fmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.128 return _mm_maskz_fmul_pch(__U, __A, __B); } +__m128h test_mm_maskz_mul_pch(__mmask8 __U, __m128h __A, __m128h __B) { + // CHECK-LABEL: @test_mm_maskz_mul_pch + // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.128 + return _mm_maskz_mul_pch(__U, __A, __B); +} + __m256h test_mm256_fmul_pch(__m256h __A, __m256h __B) { // CHECK-LABEL: @test_mm256_fmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.256 return _mm256_fmul_pch(__A, __B); } +__m256h test_mm256_mul_pch(__m256h __A, __m256h __B) { + // CHECK-LABEL: @test_mm256_mul_pch + // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.256 + return _mm256_mul_pch(__A, __B); +} + __m256h test_mm256_mask_fmul_pch(__m256h __W, __mmask8 __U, __m256h __A, __m256h __B) { // CHECK-LABEL: @test_mm256_mask_fmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.256 return _mm256_mask_fmul_pch(__W, __U, __A, __B); } +__m256h test_mm256_mask_mul_pch(__m256h __W, __mmask8 __U, __m256h __A, __m256h __B) { + // CHECK-LABEL: @test_mm256_mask_mul_pch + // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.256 + return _mm256_mask_mul_pch(__W, __U, __A, __B); +} + __m256h test_mm256_maskz_fmul_pch(__mmask8 __U, __m256h __A, __m256h __B) { // CHECK-LABEL: @test_mm256_maskz_fmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.256 return _mm256_maskz_fmul_pch(__U, __A, __B); } +__m256h test_mm256_maskz_mul_pch(__mmask8 __U, __m256h __A, __m256h __B) { + // CHECK-LABEL: @test_mm256_maskz_mul_pch + // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.256 + return _mm256_maskz_mul_pch(__U, __A, __B); +} + __m128h test_mm_fmadd_pch(__m128h __A, __m128h __B, __m128h __C) { // CHECK-LABEL: @test_mm_fmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.128