diff options
author | Bill Schmidt <wschmidt@linux.vnet.ibm.com> | 2013-09-26 17:09:28 +0000 |
---|---|---|
committer | Bill Schmidt <wschmidt@linux.vnet.ibm.com> | 2013-09-26 17:09:28 +0000 |
commit | cea1596205d7082a4735946843308390ab94df10 (patch) | |
tree | ab8e0108ccecb5053ad5940edfe0cabef982eac2 /llvm/lib/Target/PowerPC/PPCISelLowering.cpp | |
parent | 3d08340b3caab95ecd5b228a08a19f70275a889f (diff) | |
download | bcm5719-llvm-cea1596205d7082a4735946843308390ab94df10.tar.gz bcm5719-llvm-cea1596205d7082a4735946843308390ab94df10.zip |
[PowerPC] Fix PR17354: Generate nop after local calls for PIC code.
When generating code for shared libraries, even local calls may be
intercepted, so we need a nop after the call for the linker to fix up the
TOC. Test case adapted from the one provided in PR17354.
llvm-svn: 191440
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCISelLowering.cpp')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp index 5e12664e728..8da5f0563c6 100644 --- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp @@ -3487,7 +3487,9 @@ PPCTargetLowering::FinishCall(CallingConv::ID CallConv, SDLoc dl, // from allocating it), resulting in an additional register being // allocated and an unnecessary move instruction being generated. needsTOCRestore = true; - } else if ((CallOpc == PPCISD::CALL) && !isLocalCall(Callee)) { + } else if ((CallOpc == PPCISD::CALL) && + (!isLocalCall(Callee) || + DAG.getTarget().getRelocationModel() == Reloc::PIC_)) { // Otherwise insert NOP for non-local calls. CallOpc = PPCISD::CALL_NOP; } |