[llvm-dev] Bitcast between 2 different SDNode vector types
Alex Susu via llvm-dev
llvm-dev at lists.llvm.org
Thu May 25 19:26:32 PDT 2017
Hello.
I am trying to emulate in software in my SIMD processor back end vector types with
elements i32 using the native vector types with i16 (for example: v64i32 with v128i16).
For example, when I want to add 2 v64i32 I use first a getNode(ISD::BITCAST, ...) to
typecast the operands of add. But this does not seem to work - I tried to get inspired
from http://llvm.org/docs/doxygen/html/X86ISelLowering_8cpp_source.html. When I use that
instruction I get an error saying "Cannot select [...] v128i16 = bitcast txy", where txy
is of type t64i32.
So I tried to declare at the beginning of the ISelLowering class:
setOperationAction(ISD::BITCAST, MVT::v64i32, Expand /* or Promote */);
AddPromotedToType (ISD::BITCAST, MVT::v64i32, MVT::v128i16); // and also
MVT::v128i16, MVT::v64i32
This eventually led to replacing during Instruction selection the
v128i16 = bitcast t52
with
v128i16,ch = load<LD256[FixedStack3]> t110, FrameIndex:i64<3>, undef:i64
but the load<LD256[FixedStack3]> operation is not really good for me.
Can somebody help me? I need a simple bitcast operation that just changes the type of
the vector SDNode without any further complication, if possible.
Thank you,
Alex
More information about the llvm-dev
mailing list