[llvm-dev] BUILD_VECTOR disambiguation

Cameron McInally via llvm-dev llvm-dev at lists.llvm.org
Wed Jul 8 10:49:40 PDT 2020


Proposal to change the BUILD_VECTOR comment posted in D83413, if
anyone would like to comment.

Thanks again,
Cam

On Tue, Jul 7, 2020 at 11:55 AM Cameron McInally
<cameron.mcinally at nyu.edu> wrote:
>
> That's what I would expect. I don't see a good a priori reason to
> build a vector with mixed operand types. IMO, the BUILD_VECTOR
> specification should be tightened up.
>
> On Tue, Jul 7, 2020 at 11:47 AM Craig Topper <craig.topper at gmail.com> wrote:
> >
> > Mixed types aren't allowed. They are checked for in VerifySDNode in SelectionDAG.cpp and will fail an asserts build.
> >
> > ~Craig
> >
> >
> > On Tue, Jul 7, 2020 at 8:25 AM Krzysztof Parzyszek via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> >>
> >> The problem can happen when you want to build a vector of i8, but i8 itself is not legal on your target.  All operands to BUILD_VECTOR will be legalized to the next legal integer type, so you can end up with a BUILD_VECTOR of vNi8 where all operands are i32, for example.
> >>
> >> Actual mixed types are less likely to happen, but if you are doing your own target-specific lowering, you can end up with mixed types, simply because your code doesn't have to make them all the same.
> >>
> >> --
> >> Krzysztof Parzyszek  kparzysz at quicinc.com   AI tools development
> >>
> >> > -----Original Message-----
> >> > From: Cameron McInally <cameron.mcinally at nyu.edu>
> >> > Sent: Tuesday, July 7, 2020 10:10 AM
> >> > To: Krzysztof Parzyszek <kparzysz at quicinc.com>
> >> > Cc: llvm-dev at lists.llvm.org
> >> > Subject: [EXT] Re: [llvm-dev] BUILD_VECTOR disambiguation
> >> >
> >> > Thanks for the clarification. The `except` seemed dangling to me, but it's
> >> > early here.
> >> >
> >> > Just curious... how do we end up with a mixed type BUILD_VECTOR?
> >> > That's counterintuitive.
> >> >
> >> > On Tue, Jul 7, 2020 at 10:58 AM Krzysztof Parzyszek via llvm-dev <llvm-
> >> > dev at lists.llvm.org> wrote:
> >> > >
> >> > > Mixed integer types are ok, but the values will get truncated to the
> >> > element type of the output value.  It's pretty much what the comment says.
> >> > >
> >> > > --
> >> > > Krzysztof Parzyszek  kparzysz at quicinc.com   AI tools development
> >> > >
> >> > > > -----Original Message-----
> >> > > > From: llvm-dev <llvm-dev-bounces at lists.llvm.org> On Behalf Of
> >> > > > Cameron McInally via llvm-dev
> >> > > > Sent: Tuesday, July 7, 2020 9:53 AM
> >> > > > To: LLVM Developers Mailing List <llvm-dev at lists.llvm.org>
> >> > > > Subject: [EXT] [llvm-dev] BUILD_VECTOR disambiguation
> >> > > >
> >> > > > Hey devs,
> >> > > >
> >> > > > From ISDOpcodes.h...
> >> > > >
> >> > > > /// BUILD_VECTOR(ELT0, ELT1, ELT2, ELT3,...) - Return a fixed-width
> >> > > > vector /// with the specified, possibly variable, elements. The
> >> > > > number of elements /// is required to be a power of two. The types
> >> > > > of the operands must all be /// the same and must match the vector
> >> > > > element type, except that integer types /// are allowed to be larger
> >> > > > than the element type, in which case the operands /// are implicitly
> >> > truncated.
> >> > > > BUILD_VECTOR,
> >> > > >
> >> > > > Must the operand types always be the same? Or could we see a
> >> > > > BUILD_VECTOR with mixed integer types? E.g.:
> >> > > >
> >> > > > BUILD_VECTOR(i32, i32, i64, i32)
> >> > > >
> >> > > > Thanks,
> >> > > > Cam
> >> _______________________________________________
> >> LLVM Developers mailing list
> >> llvm-dev at lists.llvm.org
> >> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev


More information about the llvm-dev mailing list