- fix small pic for secure-plt mode (from kettenis@) - modify LLVM's DAGCombiner to skip an optimization if it would make an illegal ISD::ADDE node, fixing a fatal backend error (from gkoehler@ with help from mortimer@) OK jca@ (maintainer)
31 lines
1.3 KiB
Plaintext
31 lines
1.3 KiB
Plaintext
$OpenBSD: patch-lib_Target_PowerPC_PPCISelDAGToDAG_cpp,v 1.7 2020/05/18 22:28:22 cwen Exp $
|
|
|
|
Fix small pic for secure-plt mode, from our base-clang
|
|
|
|
Index: lib/Target/PowerPC/PPCISelDAGToDAG.cpp
|
|
--- lib/Target/PowerPC/PPCISelDAGToDAG.cpp.orig
|
|
+++ lib/Target/PowerPC/PPCISelDAGToDAG.cpp
|
|
@@ -412,7 +412,8 @@ SDNode *PPCDAGToDAGISel::getGlobalBaseReg() {
|
|
if (PPCLowering->getPointerTy(CurDAG->getDataLayout()) == MVT::i32) {
|
|
if (PPCSubTarget->isTargetELF()) {
|
|
GlobalBaseReg = PPC::R30;
|
|
- if (M->getPICLevel() == PICLevel::SmallPIC) {
|
|
+ if (M->getPICLevel() == PICLevel::SmallPIC &&
|
|
+ !PPCSubTarget->isSecurePlt()) {
|
|
BuildMI(FirstMBB, MBBI, dl, TII.get(PPC::MoveGOTtoLR));
|
|
BuildMI(FirstMBB, MBBI, dl, TII.get(PPC::MFLR), GlobalBaseReg);
|
|
MF->getInfo<PPCFunctionInfo>()->setUsesPICBase(true);
|
|
@@ -4356,11 +4357,9 @@ void PPCDAGToDAGISel::Select(SDNode *N) {
|
|
break;
|
|
|
|
case PPCISD::CALL: {
|
|
- const Module *M = MF->getFunction().getParent();
|
|
-
|
|
if (PPCLowering->getPointerTy(CurDAG->getDataLayout()) != MVT::i32 ||
|
|
(!TM.isPositionIndependent() || !PPCSubTarget->isSecurePlt()) ||
|
|
- !PPCSubTarget->isTargetELF() || M->getPICLevel() == PICLevel::SmallPIC)
|
|
+ !PPCSubTarget->isTargetELF())
|
|
break;
|
|
|
|
SDValue Op = N->getOperand(1);
|