Hi Bjorn,
> I have a backend for an in house architecture, and would like to start
working on support for vector datatypes and intrinsics. As I starter I would
like to have vector code scalarized, as is done, e.g., for the Mips backend.
However, I cannot find a way to force the instruction selector or type legalizer
to scalarize the vectors (i.e., vector types and vector ops). Can anyone help me
out?
if the backend declares no vector types as being legal then everything should
be scalarized. Since it is not I assume that you have declared some vector
register classes?
Ciao, Duncan.
>
> The code I am trying to compile is as follows:
>
> typedef short v2sw __attribute__ ((vector_size (8)));
>
> int main(int argc, char ** argv) {
> v2sw a = {1,2,3,4};
> v2sw b = {5,6,7,8};
> v2sw c = a;
>
> int i;
>
> for (i=0;i<argc;i++)
> c += b;
>
> printf("%d %d %d %d\n",c[0],c[1],c[2],c[3]);
>
> return 0;
> }
>
> When I compile this to bytecode with clang and then invoke llc with
-march=mips, everything goes fine and the code is scalarized. But when I try it
on my backend, I get
> LLVM ERROR: Cannot select: 0xa5e2730: v4i16 = BUILD_VECTOR 0xa5e29d8,
0xa5e2378, 0xa5e21e0, 0xa5e2158 [ID=14]
> 0xa5e29d8: i32 = Constant<1> [ID=11]
> 0xa5e2378: i32 = Constant<2> [ID=10]
> 0xa5e21e0: i32 = Constant<3> [ID=9]
> 0xa5e2158: i32 = Constant<4> [ID=8]
>
> Now I've looked at the Mips backend and other backends in detail, but I
didn't find anything that would force the scalarization in there (like
references to v64, v4i16, BUILD_VECTOR, ...), so I am clueless ...
>
> Thanks,
>
> Bjorn De Sutter
> Computer Systems Lab
> Ghent University
>
>
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev