[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