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.

Reply via email to