mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-03 18:29:50 +00:00
When lowering direct calls, lower them to use a targetglobaladress directly
instead of a globaladdress. This has no effect on the generated code at all. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24386 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b9debbf54c
commit
2823b3e70e
@ -753,8 +753,7 @@ SDOperand PPCDAGToDAGISel::SelectCALL(SDOperand Op) {
|
|||||||
if (GlobalAddressSDNode *GASD =
|
if (GlobalAddressSDNode *GASD =
|
||||||
dyn_cast<GlobalAddressSDNode>(N->getOperand(1))) {
|
dyn_cast<GlobalAddressSDNode>(N->getOperand(1))) {
|
||||||
CallOpcode = PPC::BL;
|
CallOpcode = PPC::BL;
|
||||||
CallOperands.push_back(CurDAG->getTargetGlobalAddress(GASD->getGlobal(),
|
CallOperands.push_back(N->getOperand(1));
|
||||||
MVT::i32));
|
|
||||||
} else if (ExternalSymbolSDNode *ESSDN =
|
} else if (ExternalSymbolSDNode *ESSDN =
|
||||||
dyn_cast<ExternalSymbolSDNode>(N->getOperand(1))) {
|
dyn_cast<ExternalSymbolSDNode>(N->getOperand(1))) {
|
||||||
CallOpcode = PPC::BL;
|
CallOpcode = PPC::BL;
|
||||||
|
@ -691,6 +691,11 @@ PPCTargetLowering::LowerCallTo(SDOperand Chain,
|
|||||||
RetVals.push_back(ActualRetTyVT);
|
RetVals.push_back(ActualRetTyVT);
|
||||||
RetVals.push_back(MVT::Other);
|
RetVals.push_back(MVT::Other);
|
||||||
|
|
||||||
|
// If the callee is a GlobalAddress node (quite common, every direct call is)
|
||||||
|
// turn it into a TargetGlobalAddress node so that legalize doesn't hack it.
|
||||||
|
if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee))
|
||||||
|
Callee = DAG.getTargetGlobalAddress(G->getGlobal(), MVT::i32);
|
||||||
|
|
||||||
SDOperand TheCall = SDOperand(DAG.getCall(RetVals,
|
SDOperand TheCall = SDOperand(DAG.getCall(RetVals,
|
||||||
Chain, Callee, args_to_use), 0);
|
Chain, Callee, args_to_use), 0);
|
||||||
Chain = TheCall.getValue(RetTyVT != MVT::isVoid);
|
Chain = TheCall.getValue(RetTyVT != MVT::isVoid);
|
||||||
|
Loading…
Reference in New Issue
Block a user