https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114943
Bug ID: 114943
Summary: X86 AVX2: inefficient code generated to convert SIMD
Vectors
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: vincenzo.innocente at cern dot ch
Target Milestone: ---
in the example below (see https://godbolt.org/z/qnfT4fE5G )
convert and covert3 produce code that looks to me inefficient w/r/t convert2
(and clang) for target x86-64-v3
#define VECTOR_EXT(N) __attribute__((vector_size(N)))
typedef float VECTOR_EXT(16) float32x4_t;
typedef double VECTOR_EXT(32) float64x4_t;
float32x4_t f1,f2,f3,f4,f;
float64x4_t d1,d2,d3,d4,d;
void covert() {
for (int i=0;i<4;++i) {
d1[i] = f1[i];
d2[i] = f2[i];
d3[i] = f3[i];
d4[i] = f4[i];
}
}
void covert2() {
for (int i=0;i<4;++i)
d1[i] = f1[i];
for (int i=0;i<4;++i)
d2[i] = f2[i];
for (int i=0;i<4;++i)
d3[i] = f3[i];
for (int i=0;i<4;++i)
d4[i] = f4[i];
}
void covert3() {
d1 = __builtin_convertvector(f1,float64x4_t);
}