diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2011-12-09 18:27:22 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2011-12-09 18:27:22 +0000 | 
| commit | d4c8b5d2e851b0e8a063c6bf8543a4823a26c15a (patch) | |
| tree | d5baf24dba561bcf8bc6ec60db36bfc5586f6378 /lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | |
| parent | 30815c536baacc07e925f0aef23a5395883173dc (diff) | |
Notes
Diffstat (limited to 'lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp')
| -rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 11 | 
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index 7ed46a6952d16..095b4001696f4 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -2034,14 +2034,17 @@ bool SelectionDAGBuilder::handleJTSwitchCase(CaseRec &CR,      return false;    APInt Range = ComputeRange(First, Last); -  double Density = TSize.roundToDouble() / Range.roundToDouble(); -  if (Density < 0.4) +  // The density is TSize / Range. Require at least 40%. +  // It should not be possible for IntTSize to saturate for sane code, but make +  // sure we handle Range saturation correctly. +  uint64_t IntRange = Range.getLimitedValue(UINT64_MAX/10); +  uint64_t IntTSize = TSize.getLimitedValue(UINT64_MAX/10); +  if (IntTSize * 10 < IntRange * 4)      return false;    DEBUG(dbgs() << "Lowering jump table\n"                 << "First entry: " << First << ". Last entry: " << Last << '\n' -               << "Range: " << Range -               << ". Size: " << TSize << ". Density: " << Density << "\n\n"); +               << "Range: " << Range << ". Size: " << TSize << ".\n\n");    // Get the MachineFunction which holds the current MBB.  This is used when    // inserting any additional MBBs necessary to represent the switch.  | 
