[LLVMdev] libcalls for shifts

Johannes Birgmeier e0902998 at student.tuwien.ac.at
Sun Jan 8 02:37:44 PST 2012


> Is i64 a legal type on your target?  If so, you might need to hack the
> code generator a bit; no in-tree target has a legal integer type that
> doesn't support shifts.  If not, I have no idea how you're getting
> that error.

Yes, well, i64 is a legal type, that's how it is. However, i64s are
always stored in two 32-bit registers and in some cases need complicated
instruction patterns for easy things (such as add, sub and so on) that
basically simulate the i64 behaviour with a sequence of i32
instructions. Simulating an i64 shift with two variables (no immediates)
with i32 instructions is so complicated that the target (the TI C64x+
family) has libcalls for them. Instructions for i32 shift exist, of course.

Thanks for your help. I'll maybe start tearing up the code generator
then. (I've already tried just copying the MakeLibCall function from the
right class into our *Lowering.cpp and calling it using custom lowering,
but some pass doesn't like that; I suspect it's our scheduler.)

Regards,
Johannes



More information about the llvm-dev mailing list