Bug 80324 - _mm512_reduce_xxx type instrinsics are missing
Summary: _mm512_reduce_xxx type instrinsics are missing
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: unknown
: P3 normal
Target Milestone: ---
Assignee: Jakub Jelinek
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-04-05 11:54 UTC by Sven Woop
Modified: 2018-08-21 23:26 UTC (History)
0 users

See Also:
Host:
Target: x86_64
Build:
Known to work:
Known to fail:
Last reconfirmed: 2017-04-06 00:00:00


Attachments
gcc7-pr80324-wip.patch (1.34 KB, patch)
2017-04-06 16:30 UTC, Jakub Jelinek
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
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.