[Bug c++/90798] New: An ICE with -Os
zhonghao at pku dot org.cn
gcc-bugzilla@gcc.gnu.org
Sun Jun 9 09:02:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90798
Bug ID: 90798
Summary: An ICE with -Os
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: zhonghao at pku dot org.cn
Target Milestone: ---
My gcc is 10.0.0, and my code is:
#include <x86intrin.h>
#include <stdint.h>
void gather_swizzle(const __m128i *indices, float *buffer)
{
__m128i idx = *indices++;
uint32_t idx0 = static_cast<uint32_t>(_mm_extract_epi32(idx, 0));
uint32_t idx1 = static_cast<uint32_t>(_mm_extract_epi32(idx, 1));
uint32_t idx2 = static_cast<uint32_t>(_mm_extract_epi32(idx, 2));
uint32_t idx3 = static_cast<uint32_t>(_mm_extract_epi32(idx, 3));
float sum0 = buffer[idx0];
float sum1 = buffer[idx1];
float sum2 = buffer[idx2];
float sum3 = buffer[idx3];
buffer[0] = sum0;
buffer[1] = sum1;
buffer[2] = sum2;
buffer[3] = sum3;
}
Gcc crashes, with the following parameters:
g++ -Os | g++ -O3 | g++ -O1 | gcc -Os | gcc -O3 | gcc -O1 |
n file included from
/opt/compiler-explorer/gcc-trunk-20190609/lib/gcc/x86_64-linux-gnu/10.0.0/include/immintrin.h:37,
from
/opt/compiler-explorer/gcc-trunk-20190609/lib/gcc/x86_64-linux-gnu/10.0.0/include/x86intrin.h:32,
from <source>:1:
/opt/compiler-explorer/gcc-trunk-20190609/lib/gcc/x86_64-linux-gnu/10.0.0/include/smmintrin.h:
In function 'void gather_swizzle(const __m128i*, float*)':
/opt/compiler-explorer/gcc-trunk-20190609/lib/gcc/x86_64-linux-gnu/10.0.0/include/smmintrin.h:447:1:
error: inlining failed in call to 'always_inline' 'int
_mm_extract_epi32(__m128i, int)': target specific option mismatch
447 | _mm_extract_epi32 (__m128i __X, const int __N)
| ^~~~~~~~~~~~~~~~~
<source>:10:57: note: called from here
10 | uint32_t idx3 = static_cast<uint32_t>(_mm_extract_epi32(idx, 3));
| ~~~~~~~~~~~~~~~~~^~~~~~~~
In file included from
/opt/compiler-explorer/gcc-trunk-20190609/lib/gcc/x86_64-linux-gnu/10.0.0/include/immintrin.h:37,
from
/opt/compiler-explorer/gcc-trunk-20190609/lib/gcc/x86_64-linux-gnu/10.0.0/include/x86intrin.h:32,
from <source>:1:
/opt/compiler-explorer/gcc-trunk-20190609/lib/gcc/x86_64-linux-gnu/10.0.0/include/smmintrin.h:447:1:
error: inlining failed in call to 'always_inline' 'int
_mm_extract_epi32(__m128i, int)': target specific option mismatch
447 | _mm_extract_epi32 (__m128i __X, const int __N)
| ^~~~~~~~~~~~~~~~~
<source>:9:57: note: called from here
9 | uint32_t idx2 = static_cast<uint32_t>(_mm_extract_epi32(idx, 2));
| ~~~~~~~~~~~~~~~~~^~~~~~~~
In file included from
/opt/compiler-explorer/gcc-trunk-20190609/lib/gcc/x86_64-linux-gnu/10.0.0/include/immintrin.h:37,
from
/opt/compiler-explorer/gcc-trunk-20190609/lib/gcc/x86_64-linux-gnu/10.0.0/include/x86intrin.h:32,
from <source>:1:
/opt/compiler-explorer/gcc-trunk-20190609/lib/gcc/x86_64-linux-gnu/10.0.0/include/smmintrin.h:447:1:
error: inlining failed in call to 'always_inline' 'int
_mm_extract_epi32(__m128i, int)': target specific option mismatch
447 | _mm_extract_epi32 (__m128i __X, const int __N)
| ^~~~~~~~~~~~~~~~~
<source>:8:57: note: called from here
8 | uint32_t idx1 = static_cast<uint32_t>(_mm_extract_epi32(idx, 1));
| ~~~~~~~~~~~~~~~~~^~~~~~~~
In file included from
/opt/compiler-explorer/gcc-trunk-20190609/lib/gcc/x86_64-linux-gnu/10.0.0/include/immintrin.h:37,
from
/opt/compiler-explorer/gcc-trunk-20190609/lib/gcc/x86_64-linux-gnu/10.0.0/include/x86intrin.h:32,
from <source>:1:
/opt/compiler-explorer/gcc-trunk-20190609/lib/gcc/x86_64-linux-gnu/10.0.0/include/smmintrin.h:447:1:
error: inlining failed in call to 'always_inline' 'int
_mm_extract_epi32(__m128i, int)': target specific option mismatch
447 | _mm_extract_epi32 (__m128i __X, const int __N)
| ^~~~~~~~~~~~~~~~~
<source>:7:57: note: called from here
7 | uint32_t idx0 = static_cast<uint32_t>(_mm_extract_epi32(idx, 0));
| ~~~~~~~~~~~~~~~~~^~~~~~~~
Compiler returned: 1
More information about the Gcc-bugs
mailing list