svn commit: r345449 - head/contrib/llvm/lib/Target/ARM

Dimitry Andric dim at FreeBSD.org
Sat Mar 23 14:10:07 UTC 2019


Author: dim
Date: Sat Mar 23 14:10:05 2019
New Revision: 345449
URL: https://svnweb.freebsd.org/changeset/base/345449

Log:
  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

Modified:
  head/contrib/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp

Modified: head/contrib/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
==============================================================================
--- head/contrib/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp	Sat Mar 23 13:41:14 2019	(r345448)
+++ head/contrib/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp	Sat Mar 23 14:10:05 2019	(r345449)
@@ -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)


More information about the svn-src-head mailing list