[LLVMdev] Implementing an llvm.setreturnaddress intrinsic
Mehrdad Niknami
mniknami at berkeley.edu
Sun Nov 3 19:08:57 PST 2013
Hi,
I've been having some trouble implementing a new intrinsic for LLVM and I
was wondering if someone might know the answer.
LLVM has an llvm.returnaddress intrinsic, but for a specific project, I
need to be able to modify the return address of a function as well, so I'm
implementing a new intrinsic:
def int_setreturnaddress : Intrinsic<[], [llvm_i32_ty, llvm_ptr_ty],
[]>;
And I'm using it as follows:
B.CreateCall2(
Intrinsic::getDeclaration(M, Intrinsic::setreturnaddress),
ConstantInt::get(Type::getInt32Ty(RI->getContext()), 0),
B.CreateIntToPtr(ConstantInt::get(IntPtrTy, 0 /* testing */)),
RA->getReturnType()));
The problem I'm facing is that for some reason, my following line inside
X86TargetLowering::LowerOperation is never getting called:
case ISD::SETRETURNADDR: return LowerSETRETURNADDR(Op, DAG);
This is despite the fact that I can confirm the following line inside
SelectionDAGBuilder::visitIntrinsicCall *is* getting called:
case Intrinsic::setreturnaddress:
setValue(&I, DAG.getNode(ISD::SETRETURNADDR, sdl, TLI->getPointerTy(),
getValue(I.getArgOperand(0)),
getValue(I.getArgOperand(1))));
return 0;
My best guess is that my code is being optimized out -- but I'm not sure
where or why.
Does anyone know why this might be happening?
Thank you!
Mehrdad
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131103/0ceafed6/attachment.html>
More information about the llvm-dev
mailing list