[LLVMdev] Help with gcc SSE intrinsics
David Vandevoorde
daveed at vandevoorde.com
Fri Oct 9 13:47:08 PDT 2009
On Oct 9, 2009, at 4:26 PM, David Greene wrote:
> Ok, I've been looking at this for hours and can't figure it out. I
> know I'm
> missing something obvious.
>
> I've been spending the past few days beefing up the vector support
> in the C
> Backend. This should help us debug vector code that's miscompiled.
> But
> gcc doesn't like this fragment:
>
> ((double *)(&llvm_cbe_r1147))[0u] =
> (((llvm_cbe_r1146__BITCAST_TEMPORARY.Int64 = 4ull,
> llvm_cbe_r1146__BITCAST_TEMPORARY .Double)));
> llvm_cbe_r1148 = __builtin_ia32_movddup(llvm_cbe_r1147);
>
> prog.linked.c:10393: error: incompatible types when assigning to
> type 'double
> __vector__'
> from type 'int'
>
> double __attribute__((vector_size(16 ))) llvm_cbe_r1147;
> double __attribute__((vector_size(16 ))) llvm_cbe_r1148;
>
> Any ideas what gcc is complaining about? I'm running gcc with -msse3.
As far as I can tell, GCC 4.x no longer predeclares
__builtin_ia32_movddup. g++ gives a clearer error, but in C the
function is implicitly declared as a returning int (because of the
call), and so you get the type mismatch again.
At least, that's my guess (I'm not familiar with GCC internals).
Daveed
More information about the llvm-dev
mailing list