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
|
||||
DISTVERSION= 6.0.0
|
||||
PORTREVISION= 2
|
||||
PORTREVISION= 3
|
||||
CATEGORIES= devel lang
|
||||
MASTER_SITES= http://${PRE_}releases.llvm.org/${LLVM_RELEASE}/${RCDIR}
|
||||
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