[llvm-dev] Addressing TableGen's error "Ran out of lanemask bits" in order to use more than 32 subregisters per register
Krzysztof Parzyszek via llvm-dev
llvm-dev at lists.llvm.org
Mon Oct 10 08:20:52 PDT 2016
Would uint64_t be sufficient for you?
-Krzysztof
On 10/9/2016 12:39 AM, Ruiling Song via llvm-dev wrote:
> Hello Alex,
>
> I am very interested in your change to support more than 32bit lanemask.
> I am working on a new llvm backend target which may also needs such kind
> of support.
> I am not sure whether it is convenient to share the change with me? So I
> could have some try.
>
> Thanks!
> Ruiling
>
> 2016-09-19 5:14 GMT+08:00 Alex Susu via llvm-dev
> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>>:
>
> Hello.
> I've managed to patch the various files from the back end
> related to lanemask - now I have 1024-bit long lanemask.
> But now I get the following error when giving make llc:
> <<error:unhandled vector type width in intrinsic!>>
> This error comes from this file
> https://github.com/llvm-mirror/llvm/blob/master/utils/TableGen/IntrinsicEmitter.cpp
> <https://github.com/llvm-mirror/llvm/blob/master/utils/TableGen/IntrinsicEmitter.cpp>,
> comes from the fact there is no IIT_V128 (nor IIT_V256), and they is
> a switch case using them in method static void
> EncodeFixedType(Record *R, std::vector<unsigned char> &ArgCodes,
> std::vector<unsigned char> &Sig).
>
> Is there any reason these enum IIT_Info ( IIT_V128, IIT_V256)
> are not added in file /IntrinsicEmitter.cpp?
>
> Thank you,
> Alex
>
>
> On Tue, Sep 13, 2016 at 1:47 AM, Matthias Braun <mbraun at apple.com
> <mailto:mbraun at apple.com>> wrote:
>
>
> > On Sep 8, 2016, at 6:37 AM, Alex Susu via llvm-dev <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
> >
> > Hello.
> > In my TableGen back end description I need to use more than 32 (e.g., 128, 1024, etc) subregisters per register for my research SIMD processor. I have used so far with success 32 subregisters.
> >
> > However, when using 128 subregisters when I now give the command:
> > llvm-tblgen -gen-register-info Connex.td
> > I get an error message "error:Ran out of lanemask bits to represent subregister sub_16_033".
> >
> > To handle this limitation, I started editing the files where this error comes from:
> > llvm/utils/TableGen/CodeGenRegisters.h
> > llvm/utils/TableGen/CodeGenRegisters.cpp
> > More exactly, the error comes from the fact the member LaneMask of the classes CodeGenSubRegIndex and CodeGenRegister is unsigned (i.e., 32 bits). So for every lane/subregister we require a bit from the type LaneMask.
> > I plan to use type long (or even type int1024_t from the boost library, header cpp_int.hpp) for LaneMask and change accordingly the methods handing the type.
> >
> > Is there are any limitation I am not aware of (maybe in LLVMV's register allocator) that would prevent me from using more than 32 lanes/subregisters?
>
> There is no known limitation. I chose uint32_t out of concern
> for compiletime. Going up for uint64_t should be no problem, I'd
> be more concerned about bigger types; hopefully all code
> properly uses the LaneBitmask type instead of plain unsigned,
> you may need a few fixes in that area.
> (For history: We had a scheme in the past where the liveness
> tracking mapped all lanes after lane 31 to the bit 32, however
> that turned out to need special code in some places that turned
> out to be a constant source of bugs that typically only happened
> in big and hard to debug inputs so we moved away from this scheme).
>
> - Matthias
>
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation
More information about the llvm-dev
mailing list