Bug 80324

Summary: _mm512_reduce_xxx type instrinsics are missing
Product: gcc Reporter: Sven Woop <mail>
Component: targetAssignee: Jakub Jelinek <jakub>
Status: RESOLVED FIXED    
Severity: normal    
Priority: P3    
Version: unknown   
Target Milestone: ---   
Host: Target: x86_64
Build: Known to work:
Known to fail: Last reconfirmed: 2017-04-06 00:00:00
Attachments: gcc7-pr80324-wip.patch

Description Sven Woop 2017-04-05 11:54:43 UTC
The following intrinsics are missing in GCC 6.3 (and also in trunk):

_mm512_reduce_add_epi32
_mm512_reduce_add_epi64
_mm512_reduce_add_pd
_mm512_reduce_add_ps
_mm512_reduce_and_epi32
_mm512_reduce_and_epi64
_mm512_reduce_max_epi32
_mm512_reduce_max_epi64
_mm512_reduce_max_epu32
_mm512_reduce_max_pd
_mm512_reduce_max_ps
_mm512_reduce_min_epi32
_mm512_reduce_min_epi64
_mm512_reduce_min_epu32
_mm512_reduce_min_pd
_mm512_reduce_min_ps
_mm512_reduce_mul_epi32
_mm512_reduce_mul_ps
_mm512_reduce_or_epi64

There are likely some others too, but these are the ones for which compilation of our project fails.
Comment 1 Sven Woop 2017-04-06 05:13:50 UTC
These intrinsics are supported by latest ICC and Clang.

Documentation of these can be found here:

https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=reduce&techs=AVX_512

Likely many other reduce intrinsics that show up in the Intrinsics Guide are missing in GCC too.
Comment 2 Jakub Jelinek 2017-04-06 16:30:16 UTC
Created attachment 41145 [details]
gcc7-pr80324-wip.patch

WIP patch.
Comment 3 Jakub Jelinek 2017-04-10 06:54:02 UTC
Author: jakub
Date: Mon Apr 10 06:53:28 2017
New Revision: 246798

URL: https://gcc.gnu.org/viewcvs?rev=246798&root=gcc&view=rev
Log:
	PR target/80324
	* config/i386/avx512fintrin.h (_mm512_reduce_add_epi32,
	_mm512_reduce_mul_epi32, _mm512_reduce_and_epi32,
	_mm512_reduce_or_epi32, _mm512_mask_reduce_add_epi32,
	_mm512_mask_reduce_mul_epi32, _mm512_mask_reduce_and_epi32,
	_mm512_mask_reduce_or_epi32, _mm512_reduce_min_epi32,
	_mm512_reduce_max_epi32, _mm512_reduce_min_epu32,
	_mm512_reduce_max_epu32, _mm512_mask_reduce_min_epi32,
	_mm512_mask_reduce_max_epi32, _mm512_mask_reduce_min_epu32,
	_mm512_mask_reduce_max_epu32, _mm512_reduce_add_ps,
	_mm512_reduce_mul_ps, _mm512_mask_reduce_add_ps,
	_mm512_mask_reduce_mul_ps, _mm512_reduce_min_ps, _mm512_reduce_max_ps,
	_mm512_mask_reduce_min_ps, _mm512_mask_reduce_max_ps,
	_mm512_reduce_add_epi64, _mm512_reduce_mul_epi64,
	_mm512_reduce_and_epi64, _mm512_reduce_or_epi64,
	_mm512_mask_reduce_add_epi64, _mm512_mask_reduce_mul_epi64,
	_mm512_mask_reduce_and_epi64, _mm512_mask_reduce_or_epi64,
	_mm512_reduce_min_epi64, _mm512_reduce_max_epi64,
	_mm512_mask_reduce_min_epi64, _mm512_mask_reduce_max_epi64,
	_mm512_reduce_min_epu64, _mm512_reduce_max_epu64,
	_mm512_mask_reduce_min_epu64, _mm512_mask_reduce_max_epu64,
	_mm512_reduce_add_pd, _mm512_reduce_mul_pd, _mm512_mask_reduce_add_pd,
	_mm512_mask_reduce_mul_pd, _mm512_reduce_min_pd, _mm512_reduce_max_pd,
	_mm512_mask_reduce_min_pd, _mm512_mask_reduce_max_pd): New intrinsics.

	* gcc.target/i386/avx512f-reduce-op-1.c: New test.

Added:
    trunk/gcc/testsuite/gcc.target/i386/avx512f-reduce-op-1.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/i386/avx512fintrin.h
    trunk/gcc/testsuite/ChangeLog
Comment 4 Jakub Jelinek 2017-04-10 07:54:17 UTC
Implemented on the trunk, not planning to backport.