devel/llvm60: apply i386 crashfix after r467849
PR: 227686, 227698 Approved by: portmgr blanket
This commit is contained in:
parent
5c339975f3
commit
4aa83e9a28
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=468476
2 changed files with 63 additions and 1 deletions
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
PORTNAME= llvm
|
PORTNAME= llvm
|
||||||
DISTVERSION= 6.0.0
|
DISTVERSION= 6.0.0
|
||||||
PORTREVISION= 2
|
PORTREVISION= 3
|
||||||
CATEGORIES= devel lang
|
CATEGORIES= devel lang
|
||||||
MASTER_SITES= http://${PRE_}releases.llvm.org/${LLVM_RELEASE}/${RCDIR}
|
MASTER_SITES= http://${PRE_}releases.llvm.org/${LLVM_RELEASE}/${RCDIR}
|
||||||
PKGNAMESUFFIX= ${LLVM_SUFFIX}
|
PKGNAMESUFFIX= ${LLVM_SUFFIX}
|
||||||
|
|
62
devel/llvm60/files/patch-fsvn-r332898
Normal file
62
devel/llvm60/files/patch-fsvn-r332898
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
commit de8877900af2a4af25465be5fde7e460ffee08a2
|
||||||
|
Author: dim <dim@FreeBSD.org>
|
||||||
|
Date: Mon Apr 23 23:07:57 2018 +0000
|
||||||
|
|
||||||
|
Pull in r329771 from upstream llvm trunk (by Craig Topper):
|
||||||
|
|
||||||
|
[X86] In X86FlagsCopyLowering, when rewriting a memory setcc we need
|
||||||
|
to emit an explicit MOV8mr instruction.
|
||||||
|
|
||||||
|
Previously the code only knew how to handle setcc to a register.
|
||||||
|
|
||||||
|
This should fix a crash in the chromium build.
|
||||||
|
|
||||||
|
This fixes various assertion failures while building ports targeting
|
||||||
|
i386:
|
||||||
|
* www/firefox: isReg() && "This is not a register operand!"
|
||||||
|
* www/iridium, www/qt5-webengine: (I.atEnd() || std::next(I) ==
|
||||||
|
def_instr_end()) && "getVRegDef assumes a single definition or no
|
||||||
|
definition"
|
||||||
|
* devel/powerpc64-gcc: FromReg != ToReg && "Cannot replace a reg with
|
||||||
|
itself"
|
||||||
|
|
||||||
|
Reported by: jbeich
|
||||||
|
PR: 225330, 227686, 227698, 227699
|
||||||
|
MFC after: 1 week
|
||||||
|
X-MFC-With: r332833
|
||||||
|
|
||||||
|
diff --git lib/Target/X86/X86FlagsCopyLowering.cpp lib/Target/X86/X86FlagsCopyLowering.cpp
|
||||||
|
index 1b6369b7bfd9..1fd1c704d79a 100644
|
||||||
|
--- lib/Target/X86/X86FlagsCopyLowering.cpp
|
||||||
|
+++ lib/Target/X86/X86FlagsCopyLowering.cpp
|
||||||
|
@@ -770,8 +770,27 @@ void X86FlagsCopyLoweringPass::rewriteSetCC(MachineBasicBlock &TestMBB,
|
||||||
|
if (!CondReg)
|
||||||
|
CondReg = promoteCondToReg(TestMBB, TestPos, TestLoc, Cond);
|
||||||
|
|
||||||
|
- // Rewriting this is trivial: we just replace the register and remove the
|
||||||
|
- // setcc.
|
||||||
|
- MRI->replaceRegWith(SetCCI.getOperand(0).getReg(), CondReg);
|
||||||
|
+ // Rewriting a register def is trivial: we just replace the register and
|
||||||
|
+ // remove the setcc.
|
||||||
|
+ if (!SetCCI.mayStore()) {
|
||||||
|
+ assert(SetCCI.getOperand(0).isReg() &&
|
||||||
|
+ "Cannot have a non-register defined operand to SETcc!");
|
||||||
|
+ MRI->replaceRegWith(SetCCI.getOperand(0).getReg(), CondReg);
|
||||||
|
+ SetCCI.eraseFromParent();
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // Otherwise, we need to emit a store.
|
||||||
|
+ auto MIB = BuildMI(*SetCCI.getParent(), SetCCI.getIterator(),
|
||||||
|
+ SetCCI.getDebugLoc(), TII->get(X86::MOV8mr));
|
||||||
|
+ // Copy the address operands.
|
||||||
|
+ for (int i = 0; i < X86::AddrNumOperands; ++i)
|
||||||
|
+ MIB.add(SetCCI.getOperand(i));
|
||||||
|
+
|
||||||
|
+ MIB.addReg(CondReg);
|
||||||
|
+
|
||||||
|
+ MIB->setMemRefs(SetCCI.memoperands_begin(), SetCCI.memoperands_end());
|
||||||
|
+
|
||||||
|
SetCCI.eraseFromParent();
|
||||||
|
+ return;
|
||||||
|
}
|
Loading…
Reference in a new issue