https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80583
Bug ID: 80583
Summary: ICE with target_clones and vectorized float: internal
compiler error: in convert_move, at expr.c:270
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: blaffablaffa at gmail dot com
Target Milestone: ---
The test case in attachment unfortunately is relatively large, but I couldn't
isolate the issue.
The main() of this source file is prepended with
#ifdef __x86_64__
__attribute__((target_clones("default","avx","avx2")))
#endif
I use some operations on vector float types:
typedef float __attribute__((vector_size(32))) float8;
typedef float __attribute__((vector_size(16))) float4;
typedef float __attribute__((vector_size(8))) float2;
The compiler appears to stumble on some arithmetic operations on these
Compile with "g++ -std=c++1y -Wall -c -o main.o main.cpp". Error is:
In file included from /usr/include/c++/6.3.1/bits/stl_algo.h:61:0,
from /usr/include/c++/6.3.1/algorithm:62,
from main.cpp:4:
/usr/include/c++/6.3.1/bits/stl_heap.h: In function ‘void
std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare)
[with _RandomAccessIterator = armorset*; _Distance = long int; _Tp = armorset;
_Compare = __gnu_cxx::__ops::_Iter_less_iter]’:
/usr/include/c++/6.3.1/bits/stl_heap.h:209:5: note: The ABI for passing
parameters with 32-byte alignment has changed in GCC 4.6
__adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
^~~~~~~~~~~~~
main.cpp: In function ‘int main.avx.298(int, char**)’:
main.cpp:477:85: internal compiler error: in convert_move, at expr.c:270
auto body_legs_abs = (body->absorptions.all - 100) * (legs->absorptions.all
- 100);
^
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
Preprocessed source stored into /tmp/ccUaXkg3.out file, please attach this to
your bugreport.
[pisto@pisto ds3]$ g++ -std=c++1y -Wall -c -o main.o main.cpp
In file included from /usr/include/c++/6.3.1/bits/stl_algo.h:61:0,
from /usr/include/c++/6.3.1/algorithm:62,
from main.cpp:4:
/usr/include/c++/6.3.1/bits/stl_heap.h: In function ‘void
std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare)
[with _RandomAccessIterator = armorset*; _Distance = long int; _Tp = armorset;
_Compare = __gnu_cxx::__ops::_Iter_less_iter]’:
/usr/include/c++/6.3.1/bits/stl_heap.h:209:5: note: The ABI for passing
parameters with 32-byte alignment has changed in GCC 4.6
__adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
^~~~~~~~~~~~~
main.cpp: In function ‘int main.avx.0(int, char**)’:
main.cpp:477:44: internal compiler error: in convert_move, at expr.c:270
auto body_legs_abs = (body->absorptions.all - 100) * (legs->absorptions.all
- 100);
~~~~~~~~~~~~~~~~~~^~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
Preprocessed source stored into /tmp/cc8Qjc34.out file, please attach this to
your bugreport.