mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 00:32:55 +00:00
Start generating arbitrary precision integer SCEVs. This removes the temporary
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
This commit is contained in:
parent
67e1f49a50
commit
237d873439
@ -585,17 +585,7 @@ static SCEVHandle BinomialCoefficient(SCEVHandle It, unsigned K,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// We need at least W + T bits for the multiplication step
|
// We need at least W + T bits for the multiplication step
|
||||||
// FIXME: A temporary hack; we round up the bitwidths
|
unsigned CalculationBits = W + T;
|
||||||
// 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();
|
|
||||||
|
|
||||||
// Calcuate 2^T, at width T+W.
|
// Calcuate 2^T, at width T+W.
|
||||||
APInt DivFactor = APInt(CalculationBits, 1).shl(T);
|
APInt DivFactor = APInt(CalculationBits, 1).shl(T);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user