openbsd-ports/devel/llvm/patches/patch-lib_Target_PowerPC_PPCISelDAGToDAG_cpp
cwen 17f3a7653c llvm: add powerpc improvements from base clang:
- 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)
2020-05-18 22:28:22 +00:00

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);