[LLVMdev] libcalls for shifts

Johannes Birgmeier e0902998 at student.tuwien.ac.at
Sat Jan 7 10:18:11 PST 2012


Hello,

my target has libcall support for long long shifts. I already have the 
following lines in my Lowering constructor:

   setLibcallName(RTLIB::SHL_I64, "__llshl");
   setLibcallName(RTLIB::SRL_I64, "__llshru");
   setLibcallName(RTLIB::SRA_I64, "__llshr");

and

   setOperationAction(ISD::SHL, MVT::i64, Expand);
   setOperationAction(ISD::SRA, MVT::i64, Expand);
   setOperationAction(ISD::SRL, MVT::i64, Expand);

But when I try to compile a sample program, I get the error:
NODE: 0x273c850: i64 = shl 0x273b800, 0x273be00

llc: LegalizeDAG.cpp:1011: llvm::SDValue 
{anonymous}::SelectionDAGLegalize::LegalizeOp(llvm::SDValue): Assertion 
`0 && "Do not know how to legalize this operator!"' failed.

... Well, I thought that was the way to tell LLVM to expand to a 
libcall. What's the problem? How can I convince LLVM to expand to a 
libcall here?
(ARM does intrinsics magics here. Is this the (only) way to do it?)

Regards,
Johannes



More information about the llvm-dev mailing list