Pull in r356809 from upstream llvm trunk (by Eli Friedman):

[ARM] Don't form "ands" when it isn't scheduled correctly.

  In r322972/r323136, the iteration here was changed to catch cases at
  the beginning of a basic block... but we accidentally deleted an
  important safety check.  Restore that check to the way it was.

  Fixes https://bugs.llvm.org/show_bug.cgi?id=41116

  Differential Revision: https://reviews.llvm.org/D59680

This should fix "Assertion failed: (LiveCPSR && "CPSR liveness tracking
is wrong!"), function UpdateCPSRUse" errors when building the devel/xwpe
port for armv7.

PR:		236062, 236568
MFC after:	1 month
X-MFC-With:	r344779
This commit is contained in:
Dimitry Andric 2019-03-23 14:10:05 +00:00
parent 545517f198
commit 94e9dcf224
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=345449

View File

@ -2824,7 +2824,15 @@ bool ARMBaseInstrInfo::optimizeCompareInstr(
// change. We can't do this transformation.
return false;
} while (I != B);
if (I == B) {
// In some cases, we scan the use-list of an instruction for an AND;
// that AND is in the same BB, but may not be scheduled before the
// corresponding TST. In that case, bail out.
//
// FIXME: We could try to reschedule the AND.
return false;
}
} while (true);
// Return false if no candidates exist.
if (!MI && !SubAdd)