зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1176864 - Truncate modulo operator for int32 r=h4writer, r=nbp
--HG-- extra : rebase_source : 8a0f02a60176f6e243594ae56713f79284f0fd2d
This commit is contained in:
Родитель
9b5f31c84a
Коммит
aaa261a733
|
@ -2902,10 +2902,13 @@ ComputeTruncateKind(MDefinition* candidate, bool* shouldClone)
|
||||||
const Range* r = candidate->range();
|
const Range* r = candidate->range();
|
||||||
bool canHaveRoundingErrors = !r || r->canHaveRoundingErrors();
|
bool canHaveRoundingErrors = !r || r->canHaveRoundingErrors();
|
||||||
|
|
||||||
// Special case integer division: the result of a/b can be infinite
|
// Special case integer division and modulo: a/b can be infinite, and a%b
|
||||||
// but cannot actually have rounding errors induced by truncation.
|
// can be NaN but cannot actually have rounding errors induced by truncation.
|
||||||
if (candidate->isDiv() && candidate->toDiv()->specialization() == MIRType_Int32)
|
if ((candidate->isDiv() || candidate->isMod()) &&
|
||||||
|
static_cast<const MBinaryArithInstruction *>(candidate)->specialization() == MIRType_Int32)
|
||||||
|
{
|
||||||
canHaveRoundingErrors = false;
|
canHaveRoundingErrors = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (canHaveRoundingErrors)
|
if (canHaveRoundingErrors)
|
||||||
return MDefinition::NoTruncate;
|
return MDefinition::NoTruncate;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче