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