Date: Mon, 9 Sep 2019 17:58:26 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r352089 - in stable: 11/contrib/llvm/lib/CodeGen 12/contrib/llvm/lib/CodeGen Message-ID: <201909091758.x89HwQ2C095861@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dim Date: Mon Sep 9 17:58:26 2019 New Revision: 352089 URL: https://svnweb.freebsd.org/changeset/base/352089 Log: MFC r351938: Pull in r371111 from upstream llvm trunk (by Eli Friedman): [IfConversion] Fix diamond conversion with unanalyzable branches. The code was incorrectly counting the number of identical instructions, and therefore tried to predicate an instruction which should not have been predicated. This could have various effects: a compiler crash, an assembler failure, a miscompile, or just generating an extra, unnecessary instruction. Instead of depending on TargetInstrInfo::removeBranch, which only works on analyzable branches, just remove all branch instructions. Fixes https://bugs.llvm.org/show_bug.cgi?id=43121 and https://bugs.llvm.org/show_bug.cgi?id=41121 . Differential Revision: https://reviews.llvm.org/D67203 This should fix "Unable to predicate BX killed renamable $r0" errors when building the lang/spidermonkey170 and lang/spidermonkey38 ports for armv7 and armv6. PR: 236567 Modified: stable/12/contrib/llvm/lib/CodeGen/IfConversion.cpp Directory Properties: stable/12/ (props changed) Changes in other areas also in this revision: Modified: stable/11/contrib/llvm/lib/CodeGen/IfConversion.cpp Directory Properties: stable/11/ (props changed) Modified: stable/12/contrib/llvm/lib/CodeGen/IfConversion.cpp ============================================================================== --- stable/12/contrib/llvm/lib/CodeGen/IfConversion.cpp Mon Sep 9 17:56:37 2019 (r352088) +++ stable/12/contrib/llvm/lib/CodeGen/IfConversion.cpp Mon Sep 9 17:58:26 2019 (r352089) @@ -1759,9 +1759,15 @@ bool IfConverter::IfConvertDiamondCommon( if (!BBI1->IsBrAnalyzable) verifySameBranchInstructions(&MBB1, &MBB2); #endif - BBI1->NonPredSize -= TII->removeBranch(*BBI1->BB); - // Remove duplicated instructions. + // Remove duplicated instructions from the tail of MBB1: any branch + // instructions, and the common instructions counted by NumDups2. DI1 = MBB1.end(); + while (DI1 != MBB1.begin()) { + MachineBasicBlock::iterator Prev = std::prev(DI1); + if (!Prev->isBranch() && !Prev->isDebugInstr()) + break; + DI1 = Prev; + } for (unsigned i = 0; i != NumDups2; ) { // NumDups2 only counted non-dbg_value instructions, so this won't // run off the head of the list.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201909091758.x89HwQ2C095861>