mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-25 10:27:04 +00:00
Some ARM implementaions, e.g. A-series, does return stack prediction. That is,
the processor keeps a return addresses stack (RAS) which stores the address and the instruction execution state of the instruction after a function-call type branch instruction. Calling a "noreturn" function with normal call instructions (e.g. bl) can corrupt RAS and causes 100% return misprediction so LLVM should use a unconditional branch instead. i.e. mov lr, pc b _foo The "mov lr, pc" is issued in order to get proper backtrace. rdar://8979299 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151623 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1233,7 +1233,8 @@ public:
|
||||
LowerCallTo(SDValue Chain, Type *RetTy, bool RetSExt, bool RetZExt,
|
||||
bool isVarArg, bool isInreg, unsigned NumFixedArgs,
|
||||
CallingConv::ID CallConv, bool isTailCall,
|
||||
bool isReturnValueUsed, SDValue Callee, ArgListTy &Args,
|
||||
bool doesNotRet, bool isReturnValueUsed,
|
||||
SDValue Callee, ArgListTy &Args,
|
||||
SelectionDAG &DAG, DebugLoc dl) const;
|
||||
|
||||
/// LowerCall - This hook must be implemented to lower calls into the
|
||||
@@ -1245,7 +1246,7 @@ public:
|
||||
virtual SDValue
|
||||
LowerCall(SDValue /*Chain*/, SDValue /*Callee*/,
|
||||
CallingConv::ID /*CallConv*/, bool /*isVarArg*/,
|
||||
bool &/*isTailCall*/,
|
||||
bool /*doesNotRet*/, bool &/*isTailCall*/,
|
||||
const SmallVectorImpl<ISD::OutputArg> &/*Outs*/,
|
||||
const SmallVectorImpl<SDValue> &/*OutVals*/,
|
||||
const SmallVectorImpl<ISD::InputArg> &/*Ins*/,
|
||||
|
||||
Reference in New Issue
Block a user