[Bug target/61925] [4.8/4.9/5 Regression] internal error when using vectorization on CPU without SSE
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Nov 25 10:14:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61925
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
On trunk I get
vector.c:6:1: error: unrecognizable insn:
(insn 3 2 4 2 (set (reg/v:TI 101 [ a ])
(mem/c:TI (plus:SI (reg/f:SI 81 virtual-incoming-args)
(const_int 16 [0x10])) [1 a+0 S16 A128])) vector.c:4 -1
(expr_list:REG_EQUIV (mem/c:TI (plus:SI (reg/f:SI 81
virtual-incoming-args)
(const_int 16 [0x10])) [1 a+0 S16 A128])
(nil)))
instead.
Reduced testcase for the convert_move ICE on the branches, ICEs at -m32
-march=i386:
#pragma GCC push_options
#pragma GCC target("sse")
typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
typedef long long __m128i __attribute__ ((__vector_size__ (16),
__may_alias__));
__m128i _mm_castps_si128(__m128 __A) { }
#pragma GCC pop_options
__attribute__((vector_size(16))) int
f(__attribute__((vector_size(16))) int a,
__attribute__((vector_size(16))) int b)
{
return a + b;
}
this seems to be fixed on trunk.
Reduced testcase for the ICE on trunk, ICEs at -m32 -march=i386:
#pragma GCC push_options
#pragma GCC target("sse")
typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__,
__artificial__)) _mm_undefined_ps (void) {
}
#pragma GCC target("sse2")
#pragma GCC pop_options
__attribute__((vector_size(16))) int f(__attribute__((vector_size(16))) int a,
__attribute__((vector_size(16))) int b) {
return a + b;
}
thus it requires a sse2 target attribute.
Would be interesting to know what fixed the convert_move ICE on trunk.
More information about the Gcc-bugs
mailing list