[llvm] r280518 - IfConversion: Add assertions that both sides of a diamond don't pred-clobber.

Kyle Butt via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 2 11:29:29 PDT 2016


Author: iteratee
Date: Fri Sep  2 13:29:28 2016
New Revision: 280518

URL: http://llvm.org/viewvc/llvm-project?rev=280518&view=rev
Log:
IfConversion: Add assertions that both sides of a diamond don't pred-clobber.

One side of a diamond may end with a predicate clobbering instruction.
That side of the diamond has to be if-converted second. Both sides can't
clobber the predicate or the ifconversion is invalid. This is checked
elsewhere, but add an assert as a safety check. NFC

Modified:
    llvm/trunk/lib/CodeGen/IfConversion.cpp

Modified: llvm/trunk/lib/CodeGen/IfConversion.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/IfConversion.cpp?rev=280518&r1=280517&r2=280518&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/IfConversion.cpp (original)
+++ llvm/trunk/lib/CodeGen/IfConversion.cpp Fri Sep  2 13:29:28 2016
@@ -1753,10 +1753,11 @@ bool IfConverter::IfConvertDiamondCommon
   bool DoSwap = false;
   if (TClobbersPred && !FClobbersPred)
     DoSwap = true;
-  else if (TClobbersPred == FClobbersPred) {
+  else if (!TClobbersPred && !FClobbersPred) {
     if (TrueBBI.NonPredSize > FalseBBI.NonPredSize)
       DoSwap = true;
-  }
+  } else if (TClobbersPred && FClobbersPred)
+    llvm_unreachable("Predicate info cannot be clobbered by both sides.");
   if (DoSwap) {
     std::swap(BBI1, BBI2);
     std::swap(Cond1, Cond2);




More information about the llvm-commits mailing list