Start generating arbitrary precision integer SCEVs. This removes the temporary
authorNick Lewycky <nicholas@mxc.ca>
Sun, 25 Jan 2009 08:16:27 +0000 (08:16 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Sun, 25 Jan 2009 08:16:27 +0000 (08:16 +0000)
code that rounded up and capped the size.

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

lib/Analysis/ScalarEvolution.cpp

index ca16a755dcab5f024fceaa522a4943c1fbe03650..c05ba8d0ef2700866f5ce8ea7525f421464d1e31 100644 (file)
@@ -585,17 +585,7 @@ static SCEVHandle BinomialCoefficient(SCEVHandle It, unsigned K,
   }
 
   // We need at least W + T bits for the multiplication step
-  // FIXME: A temporary hack; we round up the bitwidths
-  // to the nearest power of 2 to be nice to the code generator.
-  unsigned CalculationBits = 1U << Log2_32_Ceil(W + T);
-  // FIXME: Temporary hack to avoid generating integers that are too wide.
-  // Although, it's not completely clear how to determine how much
-  // widening is safe; for example, on X86, we can't really widen
-  // beyond 64 because we need to be able to do multiplication
-  // that's CalculationBits wide, but on X86-64, we can safely widen up to
-  // 128 bits.
-  if (CalculationBits > 64)
-    return new SCEVCouldNotCompute();
+  unsigned CalculationBits = W + T;
 
   // Calcuate 2^T, at width T+W.
   APInt DivFactor = APInt(CalculationBits, 1).shl(T);