mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-06 01:24:35 +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:
@ -2311,8 +2311,10 @@ void DAGTypeLegalizer::ExpandIntRes_XMULO(SDNode *N,
|
||||
SDValue Func = DAG.getExternalSymbol(TLI.getLibcallName(LC), PtrVT);
|
||||
std::pair<SDValue, SDValue> CallInfo =
|
||||
TLI.LowerCallTo(Chain, RetTy, true, false, false, false,
|
||||
0, TLI.getLibcallCallingConv(LC), false,
|
||||
true, Func, Args, DAG, dl);
|
||||
0, TLI.getLibcallCallingConv(LC),
|
||||
/*isTailCall=*/false,
|
||||
/*doesNotReturn=*/false, /*isReturnValueUsed=*/true,
|
||||
Func, Args, DAG, dl);
|
||||
|
||||
SplitInteger(CallInfo.first, Lo, Hi);
|
||||
SDValue Temp2 = DAG.getLoad(PtrVT, dl, CallInfo.second, Temp,
|
||||
|
Reference in New Issue
Block a user