[LLVMdev] Transforming wide integer computations back to vector computations

Duncan Sands baldrick at free.fr
Mon Jan 2 09:32:14 PST 2012


Hi Matt,

> It seems that one of the optimization passes (it seems to be SROA) sometimes transforms computations on vectors of ints to computations on wide integer types; for example, I'm seeing code like the following after optimizations(*):
>
>    %0 = bitcast<16 x i8>  %float2uint to i128
>    %1 = shl i128 %0, 8
>    %ins = or i128 %1, 255
>    %2 = bitcast i128 %ins to<16 x i8>

this would probably be better expressed as a vector shuffle.  What's the
testcase?

Ciao, Duncan.

>
> The back end I'm trying to get this code to go through (a hacked up version of the LLVM C backend(**)) doesn't support wide integer types, but is fine with the original vectors of integers; I'm wondering if there's a straightforward way to avoid having these computations on wide integer types generated in the first place or if there's pre-existing code that would transform this back to use the original vector types.


>
> Thanks,
> -matt
>
> (*) It seems that this is happening with vectors of i8 and i16, but not i32 and i64; in some cases, this is leading to better code for i8/i16 vectors, in that an unnecessary store/load round-trip being optimized out for the i8/i16 case.  I can provide a test case/submit a bug if this would be useful.
>
> (**) Additional CBE patches to come from this effort, pending turning aforementioned hacks into something a little cleaner/nicer.
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list