Disable MachineSink on convergent operations, similar to how IR Sink is
authorOwen Anderson <resistor@mac.com>
Mon, 1 Jun 2015 17:26:30 +0000 (17:26 +0000)
committerOwen Anderson <resistor@mac.com>
Mon, 1 Jun 2015 17:26:30 +0000 (17:26 +0000)
restricted.  No test because no in-tree target currently has convergent
MachineInstr's.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238763 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/MachineSink.cpp

index 5f03390f146ce95d29b9122d32547cf7242e9b1b..aed0e500d4419ef4e6e121b1c900a05e706fdbdc 100644 (file)
@@ -655,6 +655,10 @@ bool MachineSinking::SinkInstruction(MachineInstr *MI, bool &SawStore) {
   if (!MI->isSafeToMove(AA, SawStore))
     return false;
 
+  // Convergent operations may only be moved to control equivalent locations.
+  if (MI->isConvergent())
+    return false;
+
   // FIXME: This should include support for sinking instructions within the
   // block they are currently in to shorten the live ranges.  We often get
   // instructions sunk into the top of a large block, but it would be better to