[llvm-dev] Suggestion / Help regarding new calling convention

vivek pandya via llvm-dev llvm-dev at lists.llvm.org
Mon Jun 20 07:39:32 PDT 2016


Dear Community,

To improve current interprocedural register allocation (IPRA) , we have
planned to set callee saved registers to none for local functions,
currently I am doing it in following way:

if (F->hasLocalLinkage()  && !F->hasAddressTaken()) {
   DEBUG(dbgs() << "Function has LocalLinkage \n");
F->setCallingConv(CallingConv::GHC);
 }

but we think threre should be clean and properway to do this perhaps like:

if (F->hasLocalLinkage() && !F->hasAddressTaken()) {
    DEBUG(dbgs() << "Function has LocalLinkage \n");
    F->setCallingConv(CallingConv::NO_Callee_Saved);
  }

So I would like to know any better suggestions and if it is better to add a
new CC for this purpose then what aspects should be considered while
defining a new CC. Actually in this case the new CC does not really
required to define how parameters should be passed or any special rule for
return value etc , it just required to set callee saved registers to be
none. So what are the minimal things required to define such a CC?

Other alternative that I have thought was to add new attribute for function
and use it like following in TargetFrameLowering::determineCalleeSaves()

 // In Naked functions we aren't going to save any registers.
  if (MF.getFunction()->hasFnAttribute(Attribute::Naked))
    return;

Any suggestions / thoughts are welcomed !

Sincerely,
Vivek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160620/523dc115/attachment.html>


More information about the llvm-dev mailing list