[llvm-commits] [llvm] r168988 - /llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp

Chandler Carruth chandlerc at gmail.com
Fri Nov 30 01:26:25 PST 2012


Author: chandlerc
Date: Fri Nov 30 03:26:25 2012
New Revision: 168988

URL: http://llvm.org/viewvc/llvm-project?rev=168988&view=rev
Log:
Rearrange the comments, control flow, and variable names; no
functionality changed.

Evan's commit r168970 moved the code that the primary comment in this
function referred to to the other end of the function without moving the
comment, and there has been a steady creep of "boolean" logic in it that
is simpler if handled via early exit. That way each special case can
have its own comments. I've also made the variable name a bit more
explanatory than "AllFit". This is in preparation to fix the
non-deterministic output of this function.

Modified:
    llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp

Modified: llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp?rev=168988&r1=168987&r2=168988&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp Fri Nov 30 03:26:25 2012
@@ -3513,14 +3513,10 @@
                                    const DataLayout *TD,
                                    const TargetTransformInfo *TTI,
                             const SmallDenseMap<PHINode*, Type*>& ResultTypes) {
-  // The table density should be at least 40%. This is the same criterion as for
-  // jump tables, see SelectionDAGBuilder::handleJTSwitchCase.
-  // FIXME: Find the best cut-off.
   if (SI->getNumCases() > TableSize || TableSize >= UINT64_MAX / 10)
     return false; // TableSize overflowed, or mul below might overflow.
 
-  // If each table would fit in a register, we should build it anyway.
-  bool AllFit = true;
+  bool AllTablesFitInRegister = true;
   bool HasIllegalType = false;
   for (SmallDenseMap<PHINode*, Type*>::const_iterator I = ResultTypes.begin(),
        E = ResultTypes.end(); I != E; ++I) {
@@ -3528,12 +3524,23 @@
     if (!TTI->getScalarTargetTransformInfo()->isTypeLegal(Ty))
       HasIllegalType = true;
     if (!SwitchLookupTable::WouldFitInRegister(TD, TableSize, Ty)) {
-      AllFit = false;
+      AllTablesFitInRegister = false;
       break;
     }
   }
 
-  return AllFit || (!HasIllegalType && (SI->getNumCases() * 10 >= TableSize * 4));
+  // If each table would fit in a register, we should build it anyway.
+  if (AllTablesFitInRegister)
+    return true;
+
+  // Don't build a table that doesn't fit in-register if it has illegal types.
+  if (HasIllegalType)
+    return false;
+
+  // The table density should be at least 40%. This is the same criterion as for
+  // jump tables, see SelectionDAGBuilder::handleJTSwitchCase.
+  // FIXME: Find the best cut-off.
+  return SI->getNumCases() * 10 >= TableSize * 4;
 }
 
 /// SwitchToLookupTable - If the switch is only used to initialize one or more





More information about the llvm-commits mailing list